2014-04-01 25 views
1

XSLT文件的XML轉換特殊字符:無法使用XSLT

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:output method="xml" indent="yes" encoding="UTF-8"/> 
<xsl:template match="line1"> 
<body><xsl:value-of select="line2[@NAME='data']"/></body> 
</xsl:template> 
</xsl:stylesheet> 

XML文件:

<?xml version="1.0" encoding="UTF-8"?> 
<line1> 
    <line2 name="data"><!CDATA[地址:北京經濟技術開發區分新<span lang="ZH-CN" style="font-family:SimSun">號諾基亞大廈</span>]</line2> 
</line1> 

我在XML文件轉換數據的問題。當我嘗試生成輸出XML時,顯示錯誤:顯示無效的XML字符。任何人請在這幫助我。

回答

1

1)XML實例中的CDATA部分不正確。它在CDATA之前缺少一個開放支架,一個閉合支架和一個閉合角度支架。它應該有這樣的形式:<![CDATA[ ... ]]>

這裏是經校正的形式:

<?xml version="1.0" encoding="UTF-8"?> 
<line1> 
    <line2 name="data"><![CDATA[地址:北京經濟技術開發區分新<span lang="ZH-CN" style="font-family:SimSun">號諾基亞大廈</span>]]></line2> 
</line1> 

此外,您的XSLT不會因爲你正在尋找NAME(案例事項)找到name屬性。將其更改爲:

<xsl:value-of select="line2[@name='data']"/> 

這是使用撒克遜EE 9.5.1.3結果:

<?xml version="1.0" encoding="UTF-8"?> 
<body>地址:北京經濟技術開發區分新&lt;span lang="ZH-CN" style="font-family:SimSun"&gt;號諾基亞大廈&lt;/span&gt;</body> 

2)如果你想保留的結果CDATA部分,然後添加cdata-section-elements="body"到您的output

<xsl:output method="xml" indent="yes" encoding="UTF-8" cdata-section-elements="body"/> 

而你的結果將是:

<body><![CDATA[地址:北京經濟技術開發區分新<span lang="ZH-CN" style="font-family:SimSun">號諾基亞大廈</span>]]></body> 

3)但似乎你正在試圖建立一個XML,並希望<span>元素未轉義。在那種情況下,你應該添加disable-output-escaping="yes"xsl:value-of

<xsl:value-of disable-output-escaping="yes" select="line2[@name='data']"/> 

(從output如果你增加了一個刪除cdata-section-elements="body"),那麼你的結果會是:

<body>地址:北京經濟技術開發區分新<span lang="ZH-CN" style="font-family:SimSun">號諾基亞大廈</span></body> 
+0

你好,非常感謝你的回答...我仍然得到相應的更改後相同的錯誤...你能建議我在這 – user3328633

+0

我剛剛測試你的代碼。我會在上面添加結果。如果仍有問題,可能是與XSL或XML無關的編碼問題(如果使用BOM標頭等,檢查是否將文件保存爲UTF-8) – helderdarocha

+0

是否有任何可能支持所有的unicode將xml中的字符轉換爲使用xslt的另一個xml。我在XML的CDATA字段中遇到了幾個其他Unicode或外來字符的問題。你能幫忙嗎? – user3328633