Re: [xsl] ancestor axis order

Subject: Re: [xsl] ancestor axis order
From: "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx>
Date: Tue, 04 May 2004 07:22:18 -0400
At 2004-05-04 11:34 +0100, David.Pawson@xxxxxxxxxxx wrote:
Given XML such as
...
I need to determine, for each <ref/> child, whether there is
a <choice/> ancestor prior to the <define/> Ancestor.

By "prior" I'm assuming that you need to know if you have a <choice> ancestor that has a <define> ancestor.


for the example above, references should be 'no' and
scope should be 'yes'

Not sure what you mean by that.


But, below is the use of the test:

<xsl:when test="ancestor::choice/ancestor::define">

I hope this helps.

......................... Ken

T:\ftemp>type david.xml
   <define name="report">
      <element>
         <name ns="">report</name>
         <group>
            <group>

               <group>
                  <group>
                     <group>
                        <group>
                           <group>
                              <ref name="issues"/>
                              <ref name="vision"/>
                           </group>
                           <ref name="goals"/>
                        </group>
                        <ref name="scope"/>
                     </group>
                     <ref name="tasks"/>
                  </group>
                  <ref name="assessment"/>
               </group>

               <choice>
                  <empty/>
                  <ref name="references"/>
               </choice>
            </group>
            <ref name="owner"/>
         </group>
      </element>
   </define>

T:\ftemp>type david.xsl
<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                version="1.0">

<xsl:output indent="yes"/>

<xsl:template match="/">
   <xsl:for-each select=".//ref">
      <xsl:element name="{@name}">
        <xsl:choose>
          <xsl:when test="ancestor::choice/ancestor::define">
            <xsl:attribute name="required">no</xsl:attribute>
          </xsl:when>
          <xsl:otherwise>
            <xsl:attribute name="required">yes</xsl:attribute>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:element>
   </xsl:for-each>
 </xsl:template>

</xsl:stylesheet>
T:\ftemp>saxon david.xml david.xsl
<?xml version="1.0" encoding="utf-8"?>
<issues required="yes"/>
<vision required="yes"/>
<goals required="yes"/>
<scope required="yes"/>
<tasks required="yes"/>
<assessment required="yes"/>
<references required="no"/>
<owner required="yes"/>
T:\ftemp>


-- Public courses: Spring 2004 world tour of hands-on XSL instruction Each week: Monday-Wednesday: XSLT/XPath; Thursday-Friday: XSL-FO

Hong Kong May 17-21; Bremen Germany May 24-28; Helsinki June 14-18

World-wide on-site corporate, govt. & user group XML/XSL training.
G. Ken Holman                 mailto:gkholman@xxxxxxxxxxxxxxxxxxxx
Crane Softwrights Ltd.          http://www.CraneSoftwrights.com/s/
Box 266, Kars, Ontario CANADA K0A-2E0    +1(613)489-0999 (F:-0995)
Male Breast Cancer Awareness  http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:  http://www.CraneSoftwrights.com/legal

Current Thread