Subject: [xsl] Error during choose statement From: "nick public" <nickpubl@xxxxxxxxx> Date: Sun, 4 Jan 2009 17:47:07 +0100 |
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
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Modify some text elements, Martin Honnen | Thread | Re: [xsl] Error during choose state, G. Ken Holman |
Re: [xsl] Modify some text elements, Martin Honnen | Date | Re: [xsl] Error during choose state, G. Ken Holman |
Month |