thanks for the help works great!
--- "G. Ken Holman" <gkholman(_at_)CraneSoftwrights(_dot_)com>
wrote:
At 2007-03-27 08:14 -0700, xslt user wrote:
Here is sample XML
...
which I want to transform into this:
...
just giving the element name if no ancestor has the
attribute "id" and giving the closest ancestor "id"
as
the starting point and all element names back to
the
current node if it does have an ancestor with
attribute "id".
Here is what I have so far, but it's not enough.
I think you only need something such as what I have
below.
...
but I need to process back until the current node
(not
beyond it...) giving all element names along the
way,
starting after the closest ancestor node with an
attribute "id".
I've done some searching and I might need to do
some
XSLT grouping, but I'm not sure yet. Can anyone
help?
Because the elements are nested and not siblings, I
believe you don't
need grouping at all but can do it entirely with
axes.
I hope this helps ... it does give you precisely the
output that you quoted.
. . . . . . . . . . . . . . . Ken
t:\ftemp>type xsltacct.xml
<root>
<zero>
<one id="a">
<two>
<three id="c">
<four id="d">
<five>
<six>
<seven/>
</six>
</five>
</four>
</three>
</two>
</one>
</zero>
</root>
t:\ftemp>type xsltacct.xsl
<?xml version="1.0" encoding="US-ASCII"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
version="1.0">
<xsl:output method="text"/>
<xsl:template match="*">
<xsl:choose>
<xsl:when test="not(ancestor-or-self::*[(_at_)id])">
<xsl:value-of select="name(.)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of
select="ancestor-or-self::*[(_at_)id][1]/@id"/>
<xsl:if test="not(@id)">
<xsl:for-each
select="ancestor-or-self::*[count(ancestor::*[(_at_)id])=
count(current()/ancestor::*[(_at_)id])]">
<xsl:text> </xsl:text>
<xsl:value-of select="name(.)"/>
</xsl:for-each>
</xsl:if>
</xsl:otherwise>
</xsl:choose>
<xsl:text>
</xsl:text>
<xsl:apply-templates select="*"/>
</xsl:template>
</xsl:stylesheet>
t:\ftemp>xslt xsltacct.xml xsltacct.xsl con
root
zero
a
a two
c
d
d five
d five six
d five six seven
t:\ftemp>
--
World-wide corporate, govt. & user group XML, XSL
and UBL training
RSS feeds: publicly-available developer
resources and 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 Cancer Awareness Aug'05
http://www.CraneSoftwrights.com/s/bc
Legal business disclaimers:
http://www.CraneSoftwrights.com/legal
--~------------------------------------------------------------------
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>
--~--
____________________________________________________________________________________
Never miss an email again!
Yahoo! Toolbar alerts you the instant new Mail arrives.
http://tools.search.yahoo.com/toolbar/features/mail/
--~------------------------------------------------------------------
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>
--~--