2016-02-19 53 views
0

我使用我的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> 

回答

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"/>

+0

好介紹的標籤之一。我有多個CDATA標籤,我希望所有這些標籤都可以保留。任何方式我可以做到這一點? – BrownTownCoder

+0

@BrownTownCoder是,這些元素的「空格分隔列表」作爲'xsl:output'元素的'cdata-section-elements'屬性的值。我只是重複了馬丁所說的話。 –

+0

使用純粹的XSLT,編寫樣式表時需要知道這些元素的名稱,並將它們全部列入'xsl:output'中。 –