Subject: Re: [xsl] traversing up nodes until a certain attribute, then back to current node From: xslt user <xsltacct@xxxxxxxxx> Date: Wed, 28 Mar 2007 06:25:17 -0700 (PDT) |
thanks for the help works great! --- "G. Ken Holman" <gkholman@xxxxxxxxxxxxxxxxxxxx> 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::*[@id])"> > <xsl:value-of select="name(.)"/> > </xsl:when> > <xsl:otherwise> > <xsl:value-of > select="ancestor-or-self::*[@id][1]/@id"/> > <xsl:if test="not(@id)"> > <xsl:for-each > > select="ancestor-or-self::*[count(ancestor::*[@id])= > > count(current()/ancestor::*[@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@xxxxxxxxxxxxxxxxxxxx > 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 > > ____________________________________________________________________________________ Never miss an email again! Yahoo! Toolbar alerts you the instant new Mail arrives. http://tools.search.yahoo.com/toolbar/features/mail/
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] traversing up nodes until, G. Ken Holman | Thread | [xsl] How to convert the encoded ba, Kishore Janga |
Re: [xsl] traversing up nodes until, xslt user | Date | RE: [xsl] Multiple String Replaceme, Ignacio Garcia del C |
Month |