This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
RE: trouble with contains()
- To: <xsl-list at lists dot mulberrytech dot com>
- Subject: RE: [xsl] trouble with contains()
- From: "Sullivan, Dan" <dsullivan at develop dot com>
- Date: Tue, 4 Sep 2001 12:06:34 -0700
- Reply-To: xsl-list at lists dot mulberrytech dot com
<xsl:for-each select="element[subelement[contains(.,'foo')]]">
is what you need. It selects all elements that have a subelement that
contains 'foo'.
Your for-each expression is applying contains to a node set (the
children of element that are subelements). contains is looking for a
string so it coerces the nodeset to a string by coercing the first
element in the node set to a string. This will only find elements whose
first child subelement contains 'foo'.
Dan
-----Original Message-----
From: Charles Yates [mailto:cyates@lanelib.stanford.edu]
Sent: Tuesday, September 04, 2001 2:31 PM
To: xsl-list@lists.mulberrytech.com
Subject: [xsl] trouble with contains()
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
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list