2009-03-03 81 views
17

.Net框架現在有(至少)四種不同的讀取Xml字符串的方法。我已經使用了XmlDocument,XmlReader,XPath和XElement中的每一個,但是在編碼或執行過程中哪個最有效?每個人都是爲不同的任務而設計的,有什麼優點和缺點?解析XML的最有效方法


更新: 使用的XmlReader看似以讀取XML,這聽起來合理的,我最快捷的方式,但有它的侷限性。我想知道XmlDocument和XLinq之間是否存在任何性能差別,用於非順序訪問xml。


更新: 我發現一些職位比較加載XML文檔的不同方法。 XmlReader是最快的,XmlDocument和LINQ to XML之間的差異是微不足道的,直到您加載一個具有10,000+節點的文檔,其中LINQ to XML出現在前面。

回答

12

三種最常見的方法來讀取是:

的XmlDocument 它讀取一個樹狀結構,然後可以使用XPath訪問或通過瀏覽所有節點的整個文件。由於整個XML結構必須加載到內存中,因此它需要大量內存來存放非常大的文件。對於較小的文件使用非常好並且簡單(少於幾個兆字節)。

XmlReader 快速,但也是一個真正的痛苦,因爲它是順序的。如果你需要回去,你不能,而且XML結構通常很容易出現無序的訂單。另外,如果你從一個不結束的XML流中讀取數據,這可能是唯一的出路。

XML串行器 這基本上爲您做了一切,您提供了模型的根對象,併爲您創建和讀取XML。然而,你幾乎不能控制結構,閱讀你的對象的舊版本是一件痛苦的事情。所以這對於堅持不會很好。

XDocument和LINQ to XML 正如Daniel Straight指出的那樣。但我不太足以評論。我邀請任何人編輯帖子並添加缺失的信息。


現在寫作是另一回事。維護一個XmlDocument和一個XmlWriter是一件很容易使用的事情。

根據我的經驗,我會說,最好的組合是使用XmlWriter編寫並使用XmlDocument進行讀取。

4

最快的領域之一將是XmlTextReader。來自MSDN:

「表示提供對XML數據的快速,非緩存,只進的 訪問權限的讀取器。」

這裏更多:XmlTextReader Class

雖然它實際上取決於問題的決定哪些「法」將是最apropriate使用。如果您只需要讀取一次XML文件(例如:讀取和緩存某些全局應用設置等),則XmlTextReader就是贏家。但請記住,它是隻讀閱讀器。如果您需要搜索/修改整個XML,那麼您應該使用XmlDocument Class

+0

-1:不應該直接使用`XmlTextReader`。使用`XmlReader.Create`來創建一個`XmlReader`。 – 2011-10-08 00:26:55

5

還有XDocument和LINQ to XML,在編程時間方面,我認爲這是迄今爲止最高效的。

+0

與XmlDocument相比XDocument如何執行? – bstoney 2009-03-03 13:58:54