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(_dot_)Austin(_at_)courts(_dot_)state(_dot_)mn(_dot_)us]
Sent: 10 July 2006 21:52
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] 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
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--