Hi people.
I have the following need:
given a complicated XML source, I have to change in output the text
element for same nodes maintaining the source structure.
An example can be this in which I want to change the <elem2> text
values, present in different levels.
===================== SOURCE =====================
<?xml version="1.0" encoding="utf-8"?>
<root>
<level1 name="xyz">
<elem1>element</elem1>
<level2a>
<elemx>wwww</elemx>
<elem2>SUB ELEMENT</elem2>
<level3>
<elem1>sub element1</elem1>
<elem2>SUB ELEMENT</elem2>
<elem3>sub element1</elem3>
</level3>
</level2a>
<level2b>
<elem2>SUB ELEMENT</elem2>
</level2b>
</level1>
</root>
=========================================================
===================== DESIRED TARGET =====================
<?xml version="1.0" encoding="utf-8"?>
<root>
<level1 name="xyz">
<elem1>element</elem1>
<level2a>
<elemx>wwww</elemx>
<elem2>NEW ELEM</elem2>
<level3>
<elem1>sub element1</elem1>
<elem2>NEW ELEM</elem2>
<elem3>sub element1</elem3>
</level3>
</level2a>
<level2b>
<elem2>NEW ELEM</elem2>
</level2b>
</level1>
</root>
=========================================================
I'm trying to use the following XSL script
===================== XSLT =====================
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:choose>
<xsl:when test="elem2">
<elem2>NEW ELEM</elem2>
</xsl:when>
<xsl:otherwise>
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:otherwise>
</xsl:choose> </xsl:template>
</xsl:stylesheet>
=========================================================
With this, I can just obtain the following output
===================== DAMNED TARGET =====================
<?xml version="1.0" encoding="utf-8"?>
<root>
<level1 name="xyz">
<elem1>element</elem1>
<elem2>NEW ELEM</elem2>
<elem2>NEW ELEM</elem2>
</level1>
</root>
=========================================================
in which are missing all sub-nodes nested in <level1>.
The strange thing (for me) is that, if I substitude the <choose> block
with the <otherwise> code, I obtain a result tree identical to source
tree.
===================== SIMPLIFIED XSLT =======================
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
exclude-result-prefixes="msxsl">
<xsl:output method="xml" indent="yes"/>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@* | node()"/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
=========================================================
Obviously, in this way I cannot chack the node name for set the
appropriate value.
Could you help me?
Thanks a lot and ciao.
Nicola
--~------------------------------------------------------------------
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>
--~--