xsl-list
[Top] [All Lists]

RE: dynamic XPath?

2003-03-12 10:43:41
[Yue Ma]

This could be a dumb question:
Is there a way we can evaluate a dynamic XPath like:
<xsl:if test="$tagPath = 'actual value'">
The tagPath is something like "//root/tag1/tag2"

Seems we can not do it with XSLT 1.0,  right?


Yes we can, depending on how complicated you want the path expression to
be.  Here is an example -

XML source -

<root>
        <e1>This is e1</e1>
        <e2>This is e2</e2>
</root>

=========================

Stylesheet -

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<!-- Path to test against -->
<xsl:variable name='tagPath' select='"/root/e2"'/>

<xsl:template match="/root/*">
        <!-- Create a variable to hold a current path expression -->
        <!-- Standard expression to create a string for the path of the
current node -->        <xsl:variable name='path'>
                /<xsl:for-each select="ancestor::*">
                <xsl:value-of select="name()"
/>/</xsl:for-each><xsl:value-of select = "name()" />
        </xsl:variable>

        <!-- Test the expression -->
        <xsl:if test='normalize-space($path)=$tagPath'>Got path for
<xsl:value-of select='name()'/></xsl:if>
</xsl:template>

</xsl:stylesheet>

Cheers,

Tom P

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>