[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

RE: Trying to figure out the child::item[position()=1]

Subject: RE: Trying to figure out the child::item[position()=1] syntax
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Mon, 10 Jul 2006 22:02:23 +0100
child item
Your path expression:

menuItems[child::menuItem[position()=1]/pageID = $pageID]

can be simplified to

menuItems[menuItem[1]/pageID = $pageID]

to be a bit more idiomatic.

The path expression selects a set of nodes (probably a set consisting either
of a single menuItems node, or nothing).

When you use the path expression in an xsl:if instruction, the node-set is
converted to a boolean: true if there is at least one node, otherwise false.

When you use the path expression in an xsl:value-of instruction, the
node-set is converted to a string: if the node-set is empty, the result is
""; if the node-set contains a single element, the result is the
string-value of that element, which is the concatenation of all its
descendant text nodes.

Hope that makes it clearer.

Michael Kay
http://www.saxonica.com/ 

> -----Original Message-----
> From: Austin, Darrel [mailto:Darrel.Austin@xxxxxxxxxxxxxxxxxx] 
> Sent: 10 July 2006 21:52
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject:  Trying to figure out the 
> child::item[position()=1] syntax
> 
> I use XSL sporadically and, as such, haven't quite figured 
> out all the syntax yet.
> 
> Here's a snippet of my XML:
> 
> <menuItems>
>   <menuItem>
>      <pageID>1</pageID>
>   </menuItem>
>   <menuItem>
>      <pageID>2</pageID>
>   </menuItem>
> </menuItems>
> 
> In my XSL, I want to determine if the 'pageID' value of the 
> first menuItem (and ONLY the first menuItem) matches a 
> particular value that I am passing into the XSL file.
> 
> From what I can tell, I need to use the 
> child::item[position()=1] syntax. Is that correct?
> 
> This is what I've come up with:
> 
> <xsl:if test="menuItems[child::menuItem[position()=1]/pageID 
> = $pageID]">
> 
> That seems to work. BUT, what I am a bit confused of is if I 
> write the above as a value-of:
> 
> <xsl:value-of 
> select="menuItems[child::menuItem[position()=1]/pageID = $pageID]"/>
> 
> If the node doesn't exist, I get nothing (I assume a 'false' 
> value in the IF comparison). If it does exist, I get the 
> entire contents of the XML file. Is that normal? I guess my 
> confusion is why does the if statement appear to return a 
> true/false while the value-of statement returns nothing or 
> the entire XML file? 
> 
> -Darrel

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.