2012-08-07 30 views
1

我有一個XML文件。內容相同的XML文件解析不同

<?xml version="1.0" encoding="UTF-8"?> 
<channel> 
    <item>content with special character é</item> 
</channel> 

假設上面是xml文件,除了從產品目錄中的內容,有很多標籤和內容。這是使用下面的過程中產生的:從ColdFusion的文件

  1. 調用數據庫從程序數據庫
  2. 獲取內容和
  3. 在ColdFusion中創建一個XML文件(只需使用一個文件名,前返回的ColdFusion文件:「filename.xml中」)
  4. 通過ColdFusion的查詢循環,增加產品的每個產品XML文件

這使我的錯誤寫的內容文件時,我嘗試鄰在Firefox中輸入文件(我測試xml文件的解析方式)。告訴我,我有一些需要轉義的特殊字符(「xml格式不正確」或類似的東西)。所以我把CDATA標籤放在這些xml標籤裏面,這應該清除它,對嗎? 它沒有。它使絆倒特殊字符,而不是僅僅保留用於XML的那些(&,<,>,..)。

,當我開始失去它這裏的。經過一些嘗試和手動創建更小的XML文件(不通過ColdFusion)的測試後,我通過刪除CDATA標籤並插入上面的代碼來實現它。 Firefox很好地解析了上面的代碼。 因此,經過一番思考,我只是將錯誤文件的全部內容複製到一個全新的手動創建的xml文件(.txt - > renamed to .xml),並且沒有更多的錯誤。

有人能請我解釋一下,在這種情況下,2個獨立的文件,從第一個到第二個複製完全相同的內容,得到不同的解析。第一個在特殊字符上顯示多個錯誤,第二個完全沒有問題。 請,有人,我發狂,在我的辦公桌前,這裏..> _>

編輯1: 當我說的特殊字符,我的具體內容是UTF-8字符。我不是在談論XML保留的字符(&,<,>,......),我已經逃避這些。

+1

你的代碼看起來是什麼創建文件? – 2012-08-07 13:42:25

回答

2

有在例子中,沒有特殊字符,你給,只是正常的像cé(我認爲空間是比較特殊)等

我就從你的描述,你是猜使用不正確的編碼。你說的是UTF-8,但它是真的嗎?

如果是這樣的問題,你三種解決方案:

  1. 修復代碼寫在UTF-8的文件。
  2. 修復代碼以描述其實際編碼(在HTTP頭文件和XML聲明中都這樣做)。
  3. 保持說它是UTF-8,但轉義任何超出US-ASCII範圍(U + 0000到U + 007F)的字符。例如。你輸出上面爲:

(這個虛擬的線添加,因爲解析器似乎不喜歡的代碼塊列表之後)

<?xml version="1.0" encoding="UTF-8"?> 
<channel> 
    <item>content with special character &#xe9;</item> 
</channel> 

號碼一個是最好的去,但失敗與其他兩人有利有弊。贊成數字2,它不會逃脫許多不需要轉義的角色。對於數字3,只有UTF-8和UTF-16 纔有被XML解析器接受,並且以這種方式僞造它可以與任何與UTF-8相同的字符集在範圍U + 0000到U + 007F,這是他們中的很多人。

+0

當我看看這兩個文件的編碼時,它說它們都是utf-8。我試圖明確告訴代碼使用utf-8編寫,但沒有成功。 – dreagan 2012-08-08 06:11:14

+0

你是完全正確的。 Coldfusion以ANSI編碼創建了我的xml文件。不要緊,如果整個對象被寫入ansi文件中,我的xml頭文件表示內容爲utf-8。 謝謝! – dreagan 2012-08-08 06:58:14

0

我使用XmlFormat()格式化XML文件中的數據。也許這將解決你的問題。

<?xml version="1.0" encoding="UTF-8"?> 
<channel> 
    <item>#XmlFormat(field_from_database, true)#</item> 
</channel> 
+0

嘗試過它,但它只能轉義爲xml保留的特殊字符。 – dreagan 2012-08-08 06:16:32