Re: [xsl] Question:from Michael Kay's Book

Subject: Re: [xsl] Question:from Michael Kay's Book
From: Greg Faron <gfaron@xxxxxxxxxxxxxxxxxx>
Date: Wed, 09 Oct 2002 15:46:04 -0600
At 08:42 AM 6/26/2002, you wrote:
The following is what i read..
<<//@width/..>> selects all the elements in the document that have a width
attribute.

would this mean that if i have a xml file that looks like..
<rooms>
 <room width = "1">
  my room 1
 </room>
 <room width = "2">
  my room 2
 </room>
  <room width = "3">
  my room 3
 </room>
  <room width = "4">
  my room 4
 </room>
</rooms>

then an XSL code like
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:template match="/">
<xsl:value-of select="//@width/.."/><br/>
</xsl:template>
</xsl:stylesheet>


should return me all the rooms text like
my room 1
my room 2
my room 3
my room 4..

xsl:value-of only returns the string version of the first match. You would need the xsl:for-each in order to get all of them. Try something like this:


<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
  <xsl:template match="/">
    <xsl:for-each select="//@width/..">
      <xsl:value-of select="."/><br/>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

> I am a bit confused about the above mentioned statement that
> i read in the book.  I shud be grateful if someone(possibly
> Mr Kay) clears my doubt..I think i am missing something here..

The selection is not the problem, the value-of is. The selection indeed selected all of the nodes (though your version of /rooms/room[@width] is faster). The value-of only grabbed the first one.


Greg Faron Integre Technical Publishing Co.



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


Current Thread