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]

RE: trouble with contains()


<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


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