[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
Re: [xml-dev] Subtree transformation
- From: "Mukul Gandhi" <gandhi.mukul@gmail.com>
- To: "Garvin Riensche" <g.riensche@gmx.net>
- Date: Fri, 16 Mar 2007 14:25:26 +0530
You need to use the "identity template" pattern.
Please try this stylesheet:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" indent="yes" />
<!-- identity template; copies everything -->
<xsl:template match="node() | @*">
<xsl:copy>
<xsl:apply-templates select="node() | @*"/>
</xsl:copy>
</xsl:template>
<!-- template for last "c" node -->
<xsl:template match="c[not(following-sibling::c)]">
<xsl:copy>
<xsl:apply-templates select="@*" />
<xsl:apply-templates />
</xsl:copy>
<c id="2"/>
<c id="3"/>
</xsl:template>
</xsl:stylesheet>
This when applied to the XML:
<a>
<b>
<bb>
<bbb/>
</bb>
<c id="1"/>
</b>
<d>
<e/>
...
</d>
</a>
Produces output:
<?xml version="1.0" encoding="UTF-8"?>
<a>
<b>
<bb>
<bbb/>
</bb>
<c id="1"/>
<c id="2"/>
<c id="3"/>
</b>
<d>
<e/>
...
</d>
</a>
Hope this helps.
On 3/15/07, Garvin Riensche <g.riensche@gmx.net> wrote:
> Hello,
>
> I am wondering if it is possible to change a subtree of an XML tree
> whose structure is not always the same. For example, the input XML can
> look like
>
> <a>
> <b>
> <c id="1"/>
> </b>
> </a>
>
> I want to add some more "<c>" tags as children of the "<b>" tag to get
> something like this:
>
> <a>
> <b>
> <c id="1"/>
> <c id="2"/>
> ...
> </b>
> </a>
>
> If the input would always look like this I would write a stylesheet that
> looks like the following:
>
> <xsl:stylesheet match="/">
> <a>
> <b>
> <xsl:copy-of="/a/b/c"/>
> <c id="2"/>
> <c id="3"/>
> </b>
> </a>
>
> But how can I add further siblings to "<c>" if the preceding nodes
> differ and if there are more tags below the closing "</b>" like in this
> example:
>
> <a>
> <b>
> <bb>
> <bbb/>
> </bb>
> <c id="1"/>
> </b>
> <d>
> <e/>
> ...
> </d>
> </a>
>
>
> I need to copy everything and add some additional "<c>" tags. I dont't
> know how to do that becase with xsl:copy-of I can copy the whole tree
> but it can not be changed and if I iterate trough the tree with xsl:copy
> every tag is immideately closed. It would be nice if someone could help.
>
> Regards,
> Garvin
--
Regards,
Mukul Gandhi
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]