XSLT Sort将CDATA转换为普通XML文本

时间:2016-02-19 19:56:46

标签: xml xslt cdata

我在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>

1 个答案:

答案 0 :(得分:3)

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

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