2010-08-04 65 views
0

我想解析一個XMl文檔,我收到一個字符串從Web服務調用。XmlReader閱讀文檔非轉義&s

String content = ...;//long xml document 
using(TextReader reader = new StringReader(content)) 
using(XmlReader xml_reader = XmlReader.Create(reader, settings)) 
{ 
    XML = new XPathDocument(xml_reader); 
} 

但是我得到一個異常:

An error occurred while parsing EntityName. Line 1, position 1721. 

我看了看周圍,通過該字符的文件,它是一個隨機變量的中間,但大約20-30個字符早些時候,我注意到,有是非轉義符號(&個字符),所以即時通訊認爲這是問題。

運行:

content.Substring(1700, 100);//results in the following text 
"alue>1 time per day& with^honey~&water\\\\</Value></Frequency></Direction>   </Directions>  " 
        ^unescaped & char 1721 is the 'w' 

我怎樣才能成功讀取這個文件爲XML?

+0

報告此錯誤爲此XMI的供應商。他們的代碼產生這是錯誤的,應該修復。 – 2010-08-04 22:01:28

回答

1

驗證您的xml編碼與它們匹配(文檔的頂部,類似<?xml version="1.0" encoding="ISO-8859-9"?>)。替換掉下面

using(XmlReader r = XmlReader.Create(new StreamReader(fileName, Encoding.GetEncoding(webserviceEncoding)))) { 
    XML = new XPathDocument(r); 
    // ... 
} 

從WebService XML文檔webserviceEncoding值。如果不工作

  1. 字符串中加載到一個XML解析器
  2. 通知事先來代替它webservice供應商
+0

只是做content.replace(「&」,「&」)?這不可能搞砸文件的其他部分? – luke 2010-08-04 20:14:16

+0

@luke我不會批發替換那樣的。只需替換那個實例即可。或者你可以手動(正則表達式)查看值標籤的所有內容並對它們進行消毒。 – 2010-08-04 20:32:36

+0

由於通知xml提供者是正確的解決方案,因此您會得到支票。有時候最好不要一起破解解決方案,謝謝 – luke 2010-08-12 23:51:47