Get value: $node/ancestor::node() : ancestor « XSLT stylesheet « XML






Get value: $node/ancestor::node()


File: Data.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="Transform.xslt" type="text/xsl"?>

<employees xmlns="http://www.domain.com/namespace/employee">
  <title>Employee Data File</title>
  <employee eid="1" dept="programming">
    <contact addInfo="info1">
      <name>
        <firstName>Joe</firstName>
        <middleName int="B">Brian</middleName>
        <lastName>Smith</lastName>
      </name>
      <address>
        <street>1 Drive</street>
        <city>Vancouver</city>
        <state>BC</state>
        <zipcode>80210</zipcode>
      </address>
      <phone>
        <tel type="wk">111-1111111</tel>
        <tel type="hm">222-222222</tel>
        <fax>303-4667357</fax>
      </phone>
      <email>a@a.com</email>
    </contact>
    <hireDate>2008-10-29</hireDate>
  </employee>
  <employee eid="2" dept="training">
    <contact addInfo="info2">
      <name>
        <firstName>S</firstName>
        <middleName int="S">S</middleName>
        <lastName>W</lastName>
        </name>
      <address>
        <street>1 St.</street>
        <city>Austin</city>
        <state>Texas</state>
        <zipcode>22222</zipcode>
      </address>
      <phone>
        <tel type="wk">512-3467899</tel>
        <tel type="hm">512-4623356</tel>
        <fax>512-3465655</fax>
      </phone>
      <email>s@s.com</email>
    </contact>
    <hireDate>2000-03-11</hireDate>
  </employee>
</employees>


File: Transform.xslt

<?xml version="1.0"?>

<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  version="2.0">
  <xsl:output method="text" />

  <xsl:template match="/">
    <xsl:for-each select="//*">
      <xsl:value-of select="concat(name(), ' -- ')" />
      <xsl:call-template name="depth" />
      ;
    </xsl:for-each>
  </xsl:template>

  <xsl:template name="depth">
    <xsl:param name="node" as="node()" select="." />
    <xsl:value-of select="count($node/ancestor::node())" />
  </xsl:template>
</xsl:transform>

Output:

employees -- 1
      ;
    title -- 2
      ;
    employee -- 2
      ;
    contact -- 3
      ;
    name -- 4
      ;
    firstName -- 5
      ;
    middleName -- 5
      ;
    lastName -- 5
      ;
    address -- 4
      ;
    street -- 5
      ;
    city -- 5
      ;
    state -- 5
      ;
    zipcode -- 5
      ;
    phone -- 4
      ;
    tel -- 5
      ;
    tel -- 5
      ;
    fax -- 5
      ;
    email -- 4
      ;
    hireDate -- 3
      ;
    employee -- 2
      ;
    contact -- 3
      ;
    name -- 4
      ;
    firstName -- 5
      ;
    middleName -- 5
      ;
    lastName -- 5
      ;
    address -- 4
      ;
    street -- 5
      ;
    city -- 5
      ;
    state -- 5
      ;
    zipcode -- 5
      ;
    phone -- 4
      ;
    tel -- 5
      ;
    tel -- 5
      ;
    fax -- 5
      ;
    email -- 4
      ;
    hireDate -- 3
      ;
    

 








Related examples in the same category

1.if test="ancestor::chapter"
2.ancestor::node index