[xsl] trouble with contains()

Subject: [xsl] trouble with contains()
From: Charles Yates <cyates@xxxxxxxxxxxxxxxxxxxx>
Date: Tue, 04 Sep 2001 11:30:32 -0700
XML:
<root>
 <element>
   <subelement>booga</subelement>
   <subelement>foobar</subelement>
 </element>
 <element>
   <subelement>more text</subelement>
   <subelement>even more text</subelement>
 </element>
</root>

desired output:
A document with all the <elements> that have a
particular substring in a <subelement>.

What works:
<xsl:template match="/root">
 <xsl:copy>
   <xsl:for-each select="element[contains(subelement,'boo')]">
     <xsl:copy-of select="."/>
   </xsl:for-each>
 </xsl:copy>
</xsl:template>

Also works:
<xsl:for-each select="element[subelement = 'foobar']">

What doesn't:
<xsl:for-each select="element[contains(subelement,'foo')]">

Problem:
    My XPath with contains() is only checking the first
<subelement> it encounters.  I am getting around this
at the moment by doing a <xsl:for-each select="subelement">
and building a string variable with all of them and then
checking that with contains().  This is a pain though because
in my actual application the stylesheet is dynamically generated
and needs to be able to check a fairly complex document for
multiple different strings in different elements.  It would
be great if I could do this with a single XPath expression.

Thanks for any suggestions, Charles


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



Current Thread