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.&lt;p&gt;</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"/>

+0

好介绍的标签之一。我有多个CDATA标签,我希望所有这些标签都可以保留。任何方式我可以做到这一点? – BrownTownCoder

+0

@BrownTownCoder是,这些元素的“空格分隔列表”作为'xsl:output'元素的'cdata-section-elements'属性的值。我只是重复了马丁所说的话。 –

+0

使用纯粹的XSLT,编写样式表时需要知道这些元素的名称,并将它们全部列入'xsl:output'中。 –