XSLT 排序将 CDATA 转换为普通 XML 文本

XSLT Sort converts CDATA to Normal XML Text

我在 XML 上使用以下 XSLT 进行排序

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8" indent="yes" />
    <xsl:strip-space elements="*"/>

    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="*[*]">
        <xsl:copy>
            <xsl:apply-templates>
                <xsl:sort select="local-name()"/>
            </xsl:apply-templates>
        </xsl:copy>
    </xsl:template>

    <xsl:template match="Handling|Handling//*" priority="2">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

</xsl:transform>

这里的问题是我生成的 XML 中的所有字符数据都转换为普通文本,这对我的 SAX 解析器来说很难,因为数据有很多特殊字符和 HTML标签。有什么方法可以避免将 CDATA 转换为文本?

例如:

<description><![CDATA[Never program while driving.<p>]]></description>

转换为

<description>Never program while driving.&lt;p&gt;</description>

xsl:output 元素采用 cdata-section-elements 属性,您需要将其设置为 space 分隔的元素名称列表,例如 description,您希望将其内容序列化为CDATA 部分。

<xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8" indent="yes" cdata-section-elements="description"/>