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