xsl-list
[Top] [All Lists]

RE: xpath confusion

2003-07-03 04:08:34

With the following xml:

<Root>
    <Keys>
         <Client id="abc">
              <a />
              <!-- a /--> 
              <b />
         </Client>
    </Keys>
</Root>

From your results, it seems that whitespace text nodes have been
stripped from the data model. This happens when you say
<xsl:strip-space="*"/>, or in the case of Microsoft, it happens by
default. 

XPath: "Root/Keys/Client[(_at_)id="abc"]/ descendant-or-self::node()" 
selects 4 nodes

The four nodes are the <Client> element, the <a> element, the comment,
and the <b> element.

XPath: "Root/Keys/Client[(_at_)id="abc"]/ 
descendant-or-self::comment()" selects 1 node

This is the comment node.

XPath: "Root/Keys/Client[(_at_)id="abc"]/ 
descendant-or-self::text()" selects 0 nodes. 

Please can someone explain to me why the last xpath doesn't 
select 3 nodes.

Because none of the four nodes selected by descendant-or-self::node()
are text nodes. You would get some (whitespace-only) text nodes if you
hadn't stripped them from the data model.

I would like to select the 3 nodes <Client>, <a /> and <b />. 
Any help is appreciated.

Use descendant-or-self::*. The "*" selects all the nodes that are
elements.

Michael Kay


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



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