我在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.<p></description>
答案 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"/>