2013-06-11 224 views
0

我有一個循環的XML文件報告此代碼加載:的XDocument失敗的AAO字符(VB.net)

Dim xmlr As XDocument = XDocument.Load("Myfile.xml") 
For Each report As XElement In xmlr.Descendants("Report") 
    'Do stuff with report values 
Next 

這個工作,但如果文件中包含類似AAO字符我得到一個錯誤。 xml文檔具有編碼UFT-8;

<?xml version="1.0" encoding="utf-8"?> 

我在這裏找到了this post,並試着用這個代碼代替,但它沒有幫助;

Dim xmlr As XDocument 

Using oReader As StreamReader = New StreamReader("Myfile.xml", Encoding.GetEncoding("UTF-8")) 
    xmlr = XDocument.Load(oReader) 
End Using 

有什麼建議嗎?

+1

你準確得出哪個錯誤?如果文檔在其聲明中聲明爲UTF-8,並且它實際上是UTF-8編碼,那麼XML解析器不會發生抱怨。如果你得到一個錯誤,那麼這些變音符號不正確的UTF-8編碼。因此,解決方法是嘗試使用'使用oReader作爲StreamReader =新的StreamReader(「Myfile.xml」,Encoding.Default),它通常是Windows-1252等8位Windows代碼頁。 –

+0

當然,正確的方法不是修復解析步驟,而是確保生成XML的代碼已修復以正確編碼文檔。 –

+0

試着用'新的StreamReader( 「myfile.xml中」,Encoding.Default)'或'新的StreamReader解析( 「myfile.xml中」,Encoding.GetEncoding(1252))'。或者修復生成XML的代碼。 –

回答

0

根據您的意見,您嘗試處理的輸入文檔不是格式良好的XML,因爲它具有元素或屬性內容中的非轉義&符號&。由於XML語法中的&符號用於啓動一個字符(例如&#160;)或實體引用(&lt;),所以如果它應該以字面形式出現在內容中(例如<foo>a &amp; b</foo>)(並且備選是CDATA部分<foo><![CDATA[a & b]]></foo>),則必須將其轉義爲&amp;

所以.NET框架的XML解析器是告訴你,你正在試圖解析沒有良好的XML輸入和告訴你哪裏出錯做正確的事。這就是System.Xml中的所有API以及下面的API,它們可以讀取和寫入格式良好的XML。沒有API來嘗試糾正錯誤。