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