When you do this:

<xsl:for-each select="soapenv:Body">

                                <xsl:for-each select="child::node()">

                                        <xsl:element name="{local-name()}">

                                                <xsl:apply-templates/>

                                        </xsl:element>

                                </xsl:for-each>

                        </xsl:for-each>


the select="child::node()" will select text node children of the Body element as well as its element children. Text nodes have no name, so the xsl:element instruction will fail saying that local-name() is empty.

This problem would not happen with Altova because they use the Microsoft XML parser, which removes whitespace text nodes by default. The normal expectation in XSLT is that whitespace nodes are retained unless you ask for them to be ignored. To achieve this, either add to your stylesheet

<xsl:strip-space elements="*"/>

or change the xsl:for-each select="child::node()" to xsl:for-each select="*".

Michael Kay
Saxonica