Reputation: 33
I have the following XML input file:
<home>
<folders>
<folder uuid="uuid1">
<name>folder1</name>
<member ref="refA" />
<member ref="refB" />
</folder>
<folder uuid="uuid2">
<name>folder2</name>
<member ref="refC" />
<member ref="refD" />
</folder>
<folder uuid="uuid3">
<name>folder3</name>
<member ref="refE" />
<member ref="refF" />
</folder>
</folders>
</home>
And I would have the following tree:
<home>
<folders>
<folder uuid="uuid1">
<name>folder1</name>
<refNews>
<refNew ref="refA" />
<refNew ref="refB" />
</refNews>
</folder>
<folder uuid="uuid2">
<name>folder2</name>
<refNews>
<refNew ref="refC" />
<refNew ref="refD" />
</refNews>
</folder>
<folder uuid="uuid3">
<name>folder3</name>
<refNews>
<refNew ref="refE" />
<refNew ref="refF" />
</refNews>
</folder>
</folders>
</home>
To resume :
I try several XSLT templates but I can't rename and move in the same XSLT file :-(
I need your help, please.
Regards, Zido
Upvotes: 0
Views: 338
Reputation: 12075
It's always better to see what you have so far and help fix where it's going wrong, but this is actually quite easy. Try this:
<xsl:template match="folder">
<xsl:copy>
<xsl:apply-templates select="@* | node()[not(self::member)]"/>
<refNews>
<xsl:apply-templates select="member"/>
</refNews>
</xsl:copy>
</xsl:template>
<xsl:template match="member">
<refNew>
<xsl:apply-templates select="@* | node()"/>
</refNew>
</xsl:template>
If you don't want a refNews
element if there aren't any member
s, you can just wrap the refNews
element in <xsl:if test="member"/>
, or better yet, have the first template to match folder[member]
.
This assumes you also have the identity template defined.
Upvotes: 1