On Mon, Nov 15, 2010 at 7:34 AM, Michael Kay <mike@xxxxxxxxxxxx> 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 :)
|