[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Error during choose statement

Subject: Error during choose statement
From: "nick public" <nickpubl@xxxxxxxxx>
Date: Sun, 4 Jan 2009 17:47:07 +0100
 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

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2011 All Rights Reserved.