xsl-list
[Top] [All Lists]

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

2006-07-10 14:02:40
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>
--~--

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