On Mon, Nov 15, 2010 at 7:34 AM, Michael Kay <mike(_at_)saxonica(_dot_)com>
wrote:
>
> I want to find out if the two nodesets share one or more elements. I
> only want a comparison regarding their nodenames not the values of
> the nodes. In the above example $me1 and $me2 share the name of one
> element: and that is the element "<a/>". So my nodeset comparison
> should return "true".
In XSLT 1.0:
<xsl:value-of select="name($me1) = name($me2)"/>
Unfortunately, no. In XSLT 1.0, name($nodeset) returns the name of the first
item in the nodeset.
I don't see any alternative to coding it as a nested loop
How about a for-each for the outer loop and a predicate instead of the
inner loop?
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:data="urn:data">
<xsl:output method="text"/>
<data:me1>
<a></a>
<b/>
</data:me1>
<data:me2>
<a>value</a>
<dd></dd>
</data:me2>
<xsl:variable name="me1" select="document('')/*/data:me1/*"/>
<xsl:variable name="me2" select="document('')/*/data:me2/*"/>
<xsl:template match="/">
<xsl:variable name="matches">
<xsl:for-each select="$me1">
<xsl:if test="$me2[name(.) = name(current())]">
<xsl:value-of select="concat(name(.), ',')"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:choose>
<xsl:when test="string($matches)">
<xsl:text>Match on </xsl:text>
<xsl:value-of select="substring-before($matches, ',')"/>
</xsl:when>
<xsl:otherwise>No match</xsl:otherwise>
</xsl:choose>
<xsl:text> </xsl:text>
</xsl:template>
</xsl:stylesheet>
-Brandon :)
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--