xsl-list
[Top] [All Lists]

Re: [xsl] reversing or swapping nested node hierarchy

2006-03-19 12:01:56
At 2006-03-19 13:40 -0500, Chris Capon wrote:
In an XML document:
...
Is it possible to reverse the a/b hierarchy to produce b/a on output?
To complicate the problem, not all <a>'s have <b>'s.

So, in solving the problem, I've come up with something like this:
...
..which works, but the <b> template now has working knowledge of <a>.

I'd like to find a generic solution where <b> doesn't have to know about
<a> so that <b> can be nested inside other elements too and yet work the
same way.

I hope the code below helps. You don't say what you want done with attributes, so I didn't do anything with them myself.

. . . . . . . . . Ken

T:\ftemp>type capon.xml
<root>
  <a>
    <b />
  </a>
  <a />
  <d>
    <b />
  </d>
  <d/>
  <c>
    <b />
  </c>
</root>

T:\ftemp>xslt capon.xml capon.xsl con
<?xml version="1.0" encoding="utf-8"?><root>
  <b><a/></b>
  <a/>
  <b><d/></b>
  <d/>
  <b><c/></b>
</root>
T:\ftemp>type capon.xsl
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
                version="1.0">

<xsl:template match="@*|node()"><!--identity for all other nodes-->
  <xsl:copy>
    <xsl:apply-templates select="@*|node()"/>
  </xsl:copy>
</xsl:template>

<xsl:template match="*[b]">
  <b>
    <xsl:copy/>
  </b>
</xsl:template>

</xsl:stylesheet>
T:\ftemp>

--
Upcoming XSLT/XSL-FO hands-on courses: Washington,DC 2006-06-12/16
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 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>
--~--

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