2012-09-17 182 views
0

我試圖分析包含在作進一步處理一個XDocument特殊字符時,我不斷收到以下錯誤的XML文件的字符串內容:錯誤解析XML

Name cannot begin with the '.' character, hexadecimal value 0x00. Line 1, position 8.

我沒有控制權這個文件。我所能做的就是從我讀取的網絡共享中解析它。文件內容如下:

<?xml version="1.0" encoding="utf-16"?> 
<ns0:SAEErr xmlns:ns0="http://xyz"> 
<ErrorInformation>olsfdhfaskldhfksajdfkajsf</ErrorInformation> 
<OriginalMessage>慐浹湥䥴Ɽ慐浹湥卻慴疇䍳摯ⱥ慐</OriginalMessage> 
</ns0:SAEErr> 

的代碼來解析上述文件內容如下:

StringBuilder sb = new StringBuilder(); 
     sb.Append("<root>"); 
     sb.Append(FileUtil.ReadFileContent(fileName)); 
     sb.Append("</root>"); 

     return XDocument.Parse(sb.ToString());   

缺少什麼我在這裏?

在此先感謝!

UPDATE:下面的代碼更新做到了:

XElement body = XElement.Load(fileName); 

return new XDocument(new XDeclaration("1.0", "utf-16", "no"), body); 

感謝亨克!

+0

顯示您使用加載XML文檔的代碼。 –

+0

也請告訴我們你是如何確認它確實是UTF-16。 –

+0

是的,請向我們展示XML文件的十六進制轉儲。 –

回答

0

當使用XElement.Load()讀取文件時,我只能在處理行中更改utf-16utf-8之後重現您的錯誤。所以這確實是一個編碼錯誤。

編輯:

您的代碼:

StringBuilder sb = new StringBuilder(); 
    sb.Append("<root>"); 
    sb.Append(FileUtil.ReadFileContent(fileName)); // Encoding ?? 
    sb.Append("</root>"); 
    return XDocument.Parse(sb.ToString()); 

嘗試:

XElement body = XElement.Load(fileName); 
    XDocument doc = new XDocument(new XElement("root", body)); 
+0

嗨亨克,當我嘗試使用您的代碼片段爲我的XML文件編碼設置爲UTF-16我得到以下錯誤:「非空白字符不能添加到內容」。 – Cranialsurge

+0

您是否注意到我上次編輯?關於'新的XDocument' –