Thanks for all the help. I will not be able to work on this for a while
so I don't have anything to show right now.
Thanks
David
Geert Josten wrote:
If you have a working version of your XSL, send me a copy. I might find
a moment to look for some speed improvements..
Cheers,
Geert
David wrote:
Its a very interesting way of doing it but I am worried about speed. I
had an idea VERY similar to it but am worried about speed. Yours would
probably be faster than what i was thinking. I will consider this as
an possible solution. Even if it isn't the best solution I could
always do this for now and then rewrite it to use <xsl:next-match/>
when xalan supports it.(I am pretty currently doesn't but it might...)
I do not know much about STX but I am sure it can be used to solve the
problem -- and it would be faster. The only issue I have with that
solution is that I am pretty sure its 'xpaths' (stxpaths) are a dumbed
down version of xpaths that do not have stuff like preceeding-sibilings.
David
Geert Josten wrote:
David,
Fidling around a bit brought me to the XSL you will find below. Some
notes though.
Particularly the part that multiple values have to be added to the
same attribute makes it quite difficult. I have for convenience
chosen to add separate class elements to the img content. You could
merge these to a class attribute with a separate transform.
I am very sure this stylesheet can be optimized a lot. It now has to
iterate through as many modes as there are xpaths + 2, which is not
good for performance. This could be optimizes if more knowledge is
added to the xpaths.xml. For instance by clustering less and more
exact matches into a group and converting the matches in this group
to a choose construct inside a template.
I hope this XSL gives you a jump start or can give you some
inspiration for futher problems..
By the way, I saw your cross post on the dev list and am curious to
the STX solution as well.
Cheers,
Geert
<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id$ -->
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:myxsl="http://www.w3.org/1999/XSL/TransformAlias"
xmlns:xpaths="xpaths"
xmlns:xhtml="xhtml"
>
<!--+ ==============================================================
| output
+-->
<xsl:namespace-alias stylesheet-prefix="myxsl" result-prefix="xsl"/>
<xsl:output method="xml"
version="1.0" encoding="utf-8" indent="yes" />
<!--+ ==============================================================
| default templates
+-->
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()" />
</xsl:copy>
</xsl:template>
<xsl:template match="*">
<xsl:element name="{name()}">
<xsl:apply-templates select="@*|node()" />
</xsl:element>
</xsl:template>
<xsl:template match="xpaths:*">
<xsl:message terminate="yes">
Unknown or incorrect template instruction <xsl:value-of
select="name()" /> within context <xsl:value-of
select="name(parent::*)"/>
</xsl:message>
</xsl:template>
<!--+ ==============================================================
| root template
+-->
<xsl:template match="/">
<xsl:apply-templates select="xpaths:xpaths" />
</xsl:template>
<xsl:template match="xpaths:xpaths">
<myxsl:stylesheet version="1.0">
<xsl:for-each select="namespace::*[not(name() = 'xpaths')]">
<xsl:copy />
</xsl:for-each>
<myxsl:output method="xml"
version="1.0" encoding="utf-8" indent="yes" />
<myxsl:template match="/|@*|node()">
<myxsl:copy>
<myxsl:apply-templates select="." mode="xpath1"/>
</myxsl:copy>
</myxsl:template>
<xsl:apply-templates select="xpaths:xpath" />
<myxsl:template match="/|@*|node()"
mode="xpath{count(xpaths:xpath) + 1}">
<myxsl:apply-templates select="@*|node()" />
</myxsl:template>
</myxsl:stylesheet>
</xsl:template>
<xsl:template match="xpaths:xpath">
<!-- default copying -->
<myxsl:template match="/|@*|node()" mode="xpath{position()}">
<myxsl:apply-templates select="." mode="xpath{position() + 1}"/>
</myxsl:template>
<!-- special case -->
<myxsl:template match="[EMAIL PROTECTED]" mode="xpath{position()}">
<xsl:apply-templates select="node()" />
<myxsl:apply-templates select="." mode="xpath{position() + 1}"/>
</myxsl:template>
</xsl:template>
<xsl:template match="xpaths:literal">
<xsl:apply-templates select="node()" />
</xsl:template>
</xsl:stylesheet>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]