簡體   English   中英

XElement和XDocument之間有什么區別?

[英]What's the difference between XElement and XDocument?

XElementXDocument什么區別,你什么時候使用它們?

XDocument表示整個XML文檔。 它通常由許多元素組成。

XElement表示XML元素(具有屬性,子元素等)。 它是更大文檔的一部分。

在處理XML元素時使用整個XML文檔XElement時使用XDocument。

例如 - XElement有一個HasAttributes屬性,指示元素上是否存在任何屬性,但XDocument不存在,因為這樣的屬性在整個XML文檔的上下文中是沒有意義的。

這是msdn的一個實際例子,它清楚地說明了這一點。 假設你在test.xml文件中有這個:

<Root>
    <Child1>1</Child1>
    <Child2>2</Child2>
    <Child3>3</Child3>
</Root>
  1. 使用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; 
  2. 使用XElement如果你這樣做:

     foreach (var element in XElement.Load("test.xml").Elements()) Console.WriteLine(element); 

    你得到了這個:

     <Child1>1</Child1> <Child2>2</Child2> <Child3>3</Child3> 

    要獲取Child1節點的值,您將執行以下操作:

     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

請注意,如果需要XDocument類提供的特定功能,則只需創建XDocument對象。 在許多情況下,您可以直接使用XElement。 直接使用XElement是一種更簡單的編程模型。

XDocument派生自XContainer。 因此,它可以包含子節點。 但是,XDocument對象只能有一個子XElement節點。 這反映了XML標准,即XML文檔中只能有一個根元素。

根據MSDN文章LINQ to XML vs. DOM ,在“直接使用XML元素”小標題下:

使用LINQ to XML時,僅當您要在文檔的根級別添加注釋或處理指令時才使用XDocument類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM