2009-11-02 70 views
16

我剛剛遇到了使用XmlDocument.LoadXml的問題。XmlDocument.Load Vs XmlDocument.LoadXml

申請被撞毀,給了以下錯誤:

"Data at the root level is invalid. Line 1, position 1"

檢查XML和發現不妥的地方後,我用Google搜索了一下,發現一個提示使用XmlDocument.Load而不是XmlDocument.LoadXml

我已經嘗試過,它完美地工作。

我的問題是:這兩種方法之間有什麼區別,什麼可能導致一個工作,另一個失敗?

回答

32

XmlDocument.Load用於從流,TextReader,路徑/ URL或XmlReader中加載XML。 XmlDocument.LoadXml用於加載字符串中包含的XML。

根據XML實際存儲的位置,它們在加載XML方面有根本不同的方法。所以這聽起來像是你的XML使用了錯誤的方法。

20

您是否試圖使用XmlDocument.LoadXml並傳入文件名?它不這麼做 - 它假定您在中傳遞的字符串是的XML。所以,你可以使用:

doc.LoadXml("<root><child /><root>"); 

doc.Load("myfile.xml"); 

如果沒有幫助,您可以顯示你的失敗,工作代碼?有不同的方式,你可以從使用LoadXmlLoad改變......從某個源

+0

我使用doc.LoadXml方法的盛大隆重的母親。我有xml文件,它也包含文檔類型定義文件。 <!DOCTYPE SoccerMatchPlus SYSTEM「SoccerMatchPlus.dtd」>我把它放在了xml文件所在的SoccerMatchPlus.dtd中。使用doc.LoadXml方法時出現錯誤,例如找不到文件'C:\ Windows \ system32 \ SoccerMatchPlus.dtd'。爲什麼doc.LoadXml方法在'C:\ Windows \ system32'文件夾中找到該文件?我可以在運行時更改路徑嗎? – 2011-07-26 11:11:52

+0

@Rais:這聽起來像你可能想開始一個新的問題... – 2011-07-26 11:13:44

+0

好吧我張貼我的問題,我認爲你是對的。謝謝。 – 2011-07-26 11:17:02

2

負載()的負荷,而loadXML的()直接從字符串

3

負荷您使用XmlDocument.LoadXmlDocument.LoadXml在假設right這種問題可能是由Byte Order Mark造成的。

This other question may be useful。

+0

是的,這。我剛剛發現,困難的是,在加載'XmlDocument'之前,我不應該將'byte []'轉換爲'string'(即使我知道編碼)。這是確切的原因 - 我得到BOM'd。我把'byte []'加載到'MemoryStream'中,而且一切都很好。 – 2013-11-01 15:37:28

0

該應用程序是用下面的錯誤而崩潰:「在根級別的數據是無效的1號線,位置1。」 我懷疑你的XML數據不具有根級別: 例如:

<area id="1"> 
    <candidate id="0">dataata</candidate> 
</area> 
<area id="2"> 
    <candidate id="0">dataataa</candidate> 
</area> 

您至少需要在底層級別上至少有一個根級別。 例如:

<areas> 
    <area id="1"> 
    <candidate id="0">dataata</candidate> 
    </area> 
    <area id="2"> 
    <candidate id="0">dataataa</candidate> 
    </area> 
</areas> 

所以請把一個母親你的水平的頂部,使其所有兒童

+0

1號線,位置1是文件的開始。它還沒有開始尋求結構有效性和文檔級的要素。 – 2013-11-01 15:34:59

相關問題