|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Error during choose statement
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
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|






