xsl-list
[Top] [All Lists]

RE: Node Position & Relationship!

2005-02-11 07:41:41


Given the following xml structure, I want to create an xsl if 
element that tests the current node to see if it is a level 0 
tree_node element.

<?xml version="1.0"?>
<tree>
  <tree_node id="7" value="Test">
      <tree_node id="8" value="Test Sub"/>
      <tree_node id="9" value="Test Sub One">
          <tree_node id="10" value="Test Sub Two"/>
    </tree_node>
  </tree_node>
</tree>


Here is my attached, pretty sad!!!!!

<xsl:if test="{count(self::*)=1}">
        <xsl:apply-templates select="tree_node"/>
</xsl:if      

Can someone give me the correct way to achieve this.
Also how can I found out if a particular node is a child, 
ancestor or peer 
Of any given node.

Thanks to anyone who response, muchly appreciated.

You need to read about the "xpath axis'" (plural)

To test if a node is the child of a tree node:

  <xsl:if test="parent::tree">

To test if a tree node is the top-most tree node (dependant on
structure):

  <xsl:if test="not(parent::tree)">

Or, (again depending on the structure of your xml):

  <xsl:if test="not(ancestor::tree)">

To test if a node has siblings:

  <xsl:if test="preceding-sibling::tree or following-sibling::tree">

Or:

  <xsl:if test="../tree">

There are many, many ways.  If you are certain of the structure of your
xml you could even do it at the template match level:

  <xsl:template match="/tree">
    (level 0 tree)
    

  <xsl:template match="/tree/tree">
    (level 1 tree)

...and so on.

cheers
andrew



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