2011-04-29 19 views
2

嗨,的XDocument正在非常挑剔與XML的一個飼料我要解析,並不斷給我的錯誤替代的XDocument

「=」是一個意外標記。預期的標記是';'。第1行,位置576.

這基本上是XDocument在XML文檔中對一個鬆散的「=」符號哭泣。

我對源XML文檔沒有任何控制權,所以我需要讓XDocument忽略這個錯誤,或者使用其他一些類。任何一個想法?

+2

發佈有問題的XML片段。這將有助於 – dkackman 2011-04-29 23:26:26

回答

1

它不會爲良好的XML,但如果你只需要加載一個壞的文檔然後HTML Agility Pack是一個很好的工具。它可以忽略許多使HTML不是XHTML而不是XML的東西,所以你的錯誤的XML輸入也可能被解析。它表示的對象模型與XmlDocument類似。例如

HtmlDocument doc = new HtmlDocument(); 
doc.Load("file.xml"); 

foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"]) 
{ 
    HtmlAttribute att = link["href"]; 
    att.Value = FixLink(att); 
} 
doc.Save("file.htm"); 

或者你可以用敏捷性包清理XML,然後養活自己乾淨的輸出,以進行進一步的處理真正的XML解析器。

這是一個快速和骯髒的把戲,我已經用於一次性任務。不一定建議通過適當的解決方案。

如果時間允許,我會建議在將它提供給XML解析器之前,以某種方式格式化/修復錯誤的XML內容(例如,可能以其字符串形式或使用其他工具)。

+1

是的,我認爲這可能是最好的解決方案,我一直在使用htmlagilitypack一段時間,但並沒有認爲XML是如此的破碎以至於需要這樣的工具。該死的人不知道如何創建適當的XML提要... – Rob 2011-04-30 00:29:22

3

如果文檔不是格式正確的XML(而且我的猜測是在文檔或其他實體外觀字符串中有'& ='),那麼任何其他XML解析器都不會是任何其他XML解析器它更開心。您是否嘗試過在IE中加載文檔,以查看它是在那裏解析還是粘貼到XML驗證器?您也可以嘗試XmlDocument.Load(),看看它是否在那裏解析,這是下一個最接近的XML解析器(除了需要一點設置的XmlReader之外)。