Subject: RE: [xsl] Newbie Question: Convert "flat" hierarchy to nested hierarchy From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Sat, 14 Oct 2006 16:58:30 +0100 |
You'll find a paper that tackles this problem (using XSLT 2.0) at http://www.idealliance.org/proceedings/xml04/papers/111/mhk-paper.html The reverse transformation is much easier: you just process all the elements in document order (//nest) and for each one compute its level number as count(ancestor::*). Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Watch-O-Matic [mailto:watchomatic@xxxxxxxxxxx] > Sent: 14 October 2006 16:09 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Newbie Question: Convert "flat" hierarchy to > nested hierarchy > > I'm a newbie among newbies in XSLT, so I request your patience. > > I'm interested in knowing if I can write an XSLT to transform a "flat" > hierarchy, representing the hierarchy of a document, into a > true nested hierarchy. And do the reverse direction transformation. > > To illustrate, here's an example of a "flat" hierarchy, where > the hierachical level of each {markupx} item is specified > using the 'lvl' attribute. (Each {markupx} item contains a > mix of marked-up > content.) > > <flat lvl="1"> {markupA} </flat> > <flat lvl="2"> {markupB} </flat> > <flat lvl="2"> {markupC} </flat> > <flat lvl="1"> {markupD} </flat> > <flat lvl="2"> {markupE} </flat> > <flat lvl="2"> {markupF} </flat> > <flat lvl="3"> {markupG} </flat> > <flat lvl="4"> {markupH} </flat> > <flat lvl="4"> {markupI} </flat> > <flat lvl="3"> {markupJ} </flat> > <flat lvl="3"> {markupK} </flat> > <flat lvl="2"> {markupL} </flat> > <flat lvl="1"> {markupM} </flat> > > > Here's what I'd like to transform it into, and back again: > > <nest> {markupA} > <nest> {markupB} </nest> > <nest> {markupC} </nest> > </nest> > <nest> {markupD} > <nest> {markupE} </nest> > <nest> {markupF} > <nest> {markupG} > <nest> {markupH} </nest> > <nest> {markupI} </nest> > </nest> > <nest> {markupJ} </nest> > <nest> {markupK} </nest> > </nest> > <nest> {markupL} </nest> > </nest> > <nest> {markupM} </nest> > > > Assume also that there will be other shared attributes for > both <flat> and <nest> -- I've left them out in the above > markup examples to make it easier to visualize the problem. > > > Are the two-way transformations doable in XSLT? > > I humbly request the discussion focus on the feasibility of > the two-way transformation, and not on alternatives to the > markup models I'm working with. I don't have much say in the > matter since this task was dropped in my lap (and having to > come up to speed in XSLT.) > > Thanks! > > Mark > -- > Watch-O-Matic > watchomatic@xxxxxxxxxxx > > -- > http://www.fastmail.fm - Same, same, but different.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Newbie Question: Convert "fla, Watch-O-Matic | Thread | RE: [xsl] Newbie Question: Convert , Watch-O-Matic |
[xsl] A union of two document() doe, Mikhail Edoshin | Date | RE: [xsl] Newbie Question: Convert , Watch-O-Matic |
Month |