This is the mail archive of the xsl-list@mulberrytech.com mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Union of two node-sets not producing desired result (probable easy question ;-))


Can anyone elighten me as to why the union of two sets shown below (marked
with ^^^^^) results in a node-set of only two elements?

Both node sets are produced by the tokenize() extension function.......one
is a fixed string for now 'Multiple'. The other is a node set generated from
a text node in an XML document....
The node sets generated by tokenize() seem to be fine, as I can use
xsl:for-each to loop through the node-set and print all the elements out. It
all looks good....The relevant fragment of the XML is shown below

<Trial>
    <TrialName>Do Multiple Trials work</TrialName>
</Trial>

And the template contained in the XSL stylesheet is shown below.....clearly
the Union of
{ 'Do', 'Multiple', 'Trials', 'Work' } and { 'Multiple' } should be give a
count of 4, yet I get a count of 2, and the elements contained in the union
are 'Do' and 'Multiple'. I feel stupid, but I can't find the problem in my
code, given that I'm pretty much a complete beginner at XSL. On another
note, what's the best way to case-insensitive unions? Convert strings to
upper case first? Is the best way to do this to use translate and use
variables which include all the characters in the alphabet?

Thank,

Joel

<xsl:template match="Trial">
    <xsl:variable name="trialNameWords"
elect="xalan:tokenize( TrialName[text()], '- ' )"/>
    <xsl:variable name="trialSearchWords"
elect="xalan:tokenize( 'Multiple', '- ' )"/>

<xsl:if test="$trialSearchWords = $trialNameWords">
    <xsl:text>We have a Match!!!!!</xsl:text>
</xsl:if>
<br/>

<xsl:value-of select="count( $trialSearchWords | $trialNameWords )"/>
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
<br/>

<xsl:for-each select="$trialSearchWords">
    <xsl:value-of select="."/>,
</xsl:for-each>
<br/>

Number of elements in trialSearchWords:
<xsl:value-of select="count( $trialSearchWords )"/>
<br/>

<xsl:for-each select="$trialNameWords">
    <xsl:value-of select="."/>,
</xsl:for-each>
<br/>

Number of elements in trialNameWords:
<xsl:value-of select="count( $trialNameWords )"/>
<br/>

</xsl:template>


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]