Oliver Becker
> I want to write an xsl that will
> basically copy an xml tree, but allow me to chnage the values of certain
> nodes. For example:
>
> <highlevel>Highest Level
> <innernode>This is an innernode
> <lownode>This is a low-level node</lownode>
> </innernode>
> </highlevel>
>
> I want to copy this, but change the text of <innernode>, such as
>
> <highlevel>Highest Level
> <innernode>I have edited this text
> <lownode>This is a low-level node</lownode>
> </innernode>
> </highlevel>
>
You shouldn't use xsl:copy-of.
This makes a deep copy without processing the inner elements.
Use xsl:copy and xsl:apply-templates - see the identity transformation
in the XSLT spec http://www.w3.org/TR/xslt#copying
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
Now you can add special templates for special element nodes, such as
innernode. But note: to process lownode you should call xsl:apply-templates
as well. So your template becomes
<xsl:template match="innernode">
<innernode>
I have edited this node
<xsl:apply-templates select="*" />
<!-- only elements, no text nodes -->
</innernode>
</xsl:template>
I haven't tested it, but it should work.
|