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
|
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
|