xsl-list
[Top] [All Lists]

Re: ancestor axis order

2004-05-04 04:22:18
At 2004-05-04 11:34 +0100, David(_dot_)Pawson(_at_)rnib(_dot_)org(_dot_)uk 
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="{(_at_)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(_at_)CraneSoftwrights(_dot_)com
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



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