需要XSLT将XML包装在CDATA标记中,而不会妨碍具有名称空间的根节点

问题描述 投票:0回答:1

需求基本上是将整个XML内容包装到带有CDATA的XML标记中,在下面输入XML

<?xml version="1.0" encoding="UTF-8"?>
<ns1:outSystemWS xmlns:ns1="http://abcd.co.za">
    <ns1:in0>
        <PQR>
            <STU>
                <TEST1>123</TEST1>
                <TEST2>XYZ</TEST2>
            </STU>
            <req>
                <TEST3>DEF</TEST3>
                <TEST4>GHI</TEST4>
            </req>
        </PQR>
    </ns1:in0>
</ns1:outSystemWS>

预期输出:

<?xml version="1.0" encoding="UTF-8"?>
<ns1:outSystemWS xmlns:ns1="http://abcd.co.za">
    <ns1:in0><![CDATA[<PQR>
            <STU>
                <TEST1>123</TEST1>
                <TEST2>XYZ</TEST2>
            </STU>
            <req>
                <TEST3>DEF</TEST3>
                <TEST4>GHI</TEST4>
            </req>
        </PQR>]]>
    </ns1:in0>
</ns1:outSystemWS>

我在XSLT以下尝试过,但是没有运气!!请帮助

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="ns:outSystemWS[*]" xmlns:ns="http://abcd.co.za">
        <xsl:copy>
            <xsl:text disable-output-escaping="yes">&lt;![CDATA[</xsl:text>
            <xsl:copy-of select="." />
            <xsl:text disable-output-escaping="yes">]]&gt;</xsl:text>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>
xml xslt cdata
1个回答
0
投票
借助XPath 3 serialize函数的XSLT 3可以做到:
© www.soinside.com 2019 - 2024. All rights reserved.