XElement
和XDocument
之間的區別是什麼,你什麼時候使用每一個?XElement和XDocument有什麼區別?
回答
XDocument代表一個完整的XML文檔。它通常由一些元素組成。
代表一個XML元素(帶有屬性,子元素等)。它是更大文檔的一部分。
處理整個XML文檔時使用XDocument,使用XML元素時使用XElement。
例如 - XElement
具有HasAttributes
屬性指示是否在元件上存在的任何屬性,但一個XDocument
沒有,因爲這樣的屬性是一個整體的XML文檔的上下文中無意義。
從MSDN:
請注意,您只需要創建 的XDocument對象,如果你需要得到 的XDocument類提供的 特定功能。在許多 的情況下,您可以直接使用XElement工作 。直接使用 XElement是一個更簡單的編程 模型。
XDocument派生自XContainer。 因此,它可以包含子節點。 但是,XDocument對象只能有 一個子XElement節點。此 反映了XML標準,其中 可能只是XML 文檔中的一個根元素。
下面是msdn的一個實例,它清楚地表明瞭這一點。假設你在測試中有這個。XML文件:
<Root>
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>
</Root>
用的XDocument如果你這樣做:
foreach (var element in XDocument.Load("test.xml").Elements()) Console.WriteLine(element);
你把它恢復:
<Root> <Child1>1</Child1> <Child2>2</Child2> <Child3>3</Child3> </Root>
要在
Child1
節點獲得的價值,你將不得不:var child1 = XDocument.Load("test.xml").Element("Root").Element("Child1").Value;
或者
var child1 = XDocument.Load("test.xml").Root.Element("Child1").Value;
用的XElement如果你這樣做:
foreach (var element in XElement.Load("test.xml").Elements()) Console.WriteLine(element);
你把它恢復:
<Child1>1</Child1> <Child2>2</Child2> <Child3>3</Child3>
要在獲取值0點,你會做什麼:
var child1 = XElement.Load("test.xml").Element("Child1").Value;
總之,XElement
忽略而XDocument
犯規根節點。粗略地,XDocument.Root = XElement
或XDocument.Root.Elements() = XElement.Elements()
。兩者都來自XContainer
。另一個微小的區別是,XElement
實施IXmlSerializable
,我不認爲主要問題。 XElement
對於絕大多數只想查詢子節點的情況就足夠了。這個名字讓我感到困惑,所以我更喜歡使用XDocument
。
根據MSDN文章LINQ to XML vs. DOM,副標題「與XML元素直接工作」:
當使用LINQ to XML,您使用的XDocument類唯一的,如果你想添加註釋或處理指令在文檔的根級別。
- 1. XElement Nodes()vs Elements()有什麼區別?
- 2. 有什麼區別`和$(Bash中有什麼區別?
- 3. 有什麼區別? :和||
- 4. &&和||有什麼區別?
- 5. 「/」和「/ *」有什麼區別?
- 6. 有什麼區別:。!和:r!?
- 7. ==和===有什麼區別?
- 8. Appender和〜有什麼區別?
- 9. $ @和$ *有什麼區別?
- 10. is和=有什麼區別?
- 11. #.00和#。##有什麼區別?
- 12. `==`和`is`有什麼區別?
- 13. '=='和'==='有什麼區別?
- 14. /和/#/有什麼區別?
- 15. | 0和~~有什麼區別?
- 16. `&`和`ref`有什麼區別?
- 17. ==和===有什麼區別?
- 18. ==和===有什麼區別?
- 19. `{}`和`[]`有什麼區別?
- 20. JavaScript和=== ===有什麼區別?
- 21. difftime和' - '有什麼區別?
- 22. =和==有什麼區別?
- 23. xtype和別名有什麼區別?
- 24. Mixpanel:識別()和people.identify()有什麼區別?
- 25. 有什麼區別
- 26. 有什麼區別
- 27. 有什麼區別?
- 28. 有什麼區別?
- 29. 有什麼區別?
- 30. 有什麼區別
[此MSDN鏈接](http://msdn.microsoft.com/zh-cn/library/bb675196.aspx)爲我們提供了有關查詢XDocument與查詢XElement的明確想法。 – CSharp 2013-03-06 07:23:24