XSLT排序转换CDATA为普通XML文本
问题描述:
我使用我的XML以下XSLT排序XSLT排序转换CDATA为普通XML文本
<?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
属性,你需要设置像description
要其内容元素名称的空格分隔列表已经序列化为CDATA部分。
<xsl:output method="xml" omit-xml-declaration="no" encoding="UTF-8" indent="yes" cdata-section-elements="description"/>
好介绍的标签之一。我有多个CDATA标签,我希望所有这些标签都可以保留。任何方式我可以做到这一点? – BrownTownCoder
@BrownTownCoder是,这些元素的“空格分隔列表”作为'xsl:output'元素的'cdata-section-elements'属性的值。我只是重复了马丁所说的话。 –
使用纯粹的XSLT,编写样式表时需要知道这些元素的名称,并将它们全部列入'xsl:output'中。 –