xsl-list
[Top] [All Lists]

RE: contains()

2002-09-10 01:33:55
Hello Alia

        The simple answer is either to replace 
                "contains(child::text(),'Euro')"
        with
                "contains(.,'Euro')"
        or to use <xsl:strip-space> to remove whitespace nodes.

        The whole node evaluated in string context will be all its
text nodes put together. You can see this if you were to try this:

        <xsl:for-each select="child::text()">
        <child><xsl:value-of select="."/></child>
        </xsl:for-each>
        <total><xsl:value-of select="."/></total>

        The reason your original test worked sometimes is that in those
cases the first text node was the text you wanted, not whitespace;
whereas in this case there's a text node containing just whitespace - 
a linefeed in fact - and being the first node, it's the one that's
evaluated by "child::text()".

Tom

---



-----Original Message-----
From: Alia Mikati [mailto:Aliam(_at_)investcomholding(_dot_)com]
Sent: 10 September 2002 09:10
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] contains()


Hello,
I hope u can help me with this. I have this part of an xml file:
     ...
     <tr class="dynamic_row1">
        <td width="160px">
        <img border="0" src="mypictures/flags/euro.gif" width="21"
        height="13" />
         Euro</td>
        <td width="50px" class="dynamic_right">1.018</td>
        <td width="50px" class="dynamic_right">1.018</td>
        <td width="50px" class="dynamic_right">08:10</td>
        <td width="90px" class="dynamic_center">09 SEP 2002</td>
      </tr>
      ...

And I wanna get the sibling value of the row containing 
'Euro'. But the 
xsl template is not working as if it can't find 'Euro'. 
...
<xsl:template match="body/center/table/tr/td">
  <xsl:if test="contains(child::text(),'Euro')">
      <b> Bid value is :  </b> 
      <xsl:value-of select="normalize-space(following-sibling::td
[position() = 1])"/><br/><br/>
      <b> Ask value is :  </b> 
      <xsl:value-of select="normalize-space(following-sibling::td
[position() = 2])"/><br/><br/>
  </xsl:if>
</xsl:template>
...

It works if instead of 'Euro' I searched for '1.018' for exp. or any 
other row value. I think the problem is the space before the 
word 'Euro'. 
I used 'normalize-space' but didnt work either. How can I fix it?
Thx a lot



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


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



<Prev in Thread] Current Thread [Next in Thread>