2012-03-14 40 views
0

我有這個消息,有一個CDATA內容。我希望把它變成unCDATA格式如:我可以使用xsl將CDATA轉換爲剝離版本嗎?我的意思是unCDATA的內容

<?xml version="1.0" encoding="UTF-8"?> 
<mymessage <![CDATA[<xyz>1234</xyz>]]></mymessage> 

turn into 

<?xml version="1.0" encoding="UTF-8"?> 
<mymessage &lt;xyz>1234&lt;/xyz></mymessage> 

所以我想擺脫CDATA和轉換我的消息,一個精簡版本。任何人都知道如何使用xsl來做到這一點?或者是否有可能在xsl中做這樣的事情?

+0

您似乎缺少來自'。無論如何,你爲什麼要這麼做?大多數有此類請求的人往往會碰到破碎的XML解析器(在這種情況下,正確的解決方案是修復解析器)。 – Quentin 2012-03-14 15:41:02

回答

0

你甚至可以避開轉義字符(適當時XML節點CDATA塊!)通過應用以下:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet 
    version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fo="http://www.w3.org/1999/XSL/Format" 
    xmlns:dt="http://exslt.org/dates-and-times" 
    xmlns:exsl="http://exslt.org/common" 
    extension-element-prefixes="dt exsl"> 

    <xsl:output method="xml" encoding="utf-8" indent="yes"/> 

    <xsl:template match="@*|node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@*|node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="text()"> 
     <xsl:value-of select="." disable-output-escaping="yes"/> 
    </xsl:template> 

</xsl:stylesheet> 

其中,當施加到

<?xml version="1.0" encoding="UTF-8"?> 
<mymessage><![CDATA[<xyz>1234</xyz>]]></mymessage> 

給出

<?xml version="1.0" encoding="utf-8"?> 
<mymessage><xyz>1234</xyz></mymessage> 

當然,不建議這樣做(因爲某種原因,CDATA塊被放置在那裏),所以最好不要使用匹配text()的模板。在這種情況下,結果將是

<?xml version="1.0" encoding="utf-8"?> 
<mymessage>&lt;xyz&gt;1234&lt;/xyz&gt;</mymessage> 
1

默認情況下,符合標準的XSL處理器將完成您要求的操作。如果您想保留CDATA節你確實有

<xsl:output cdata-section-elements="mymessage"/> 

添加到樣式表

相關問題