2010-10-07 9 views
25

XElement और XDocument के बीच क्या अंतर है और आप प्रत्येक का उपयोग कब करते हैं?XElement और XDocument के बीच क्या अंतर है?

+2

[यह एमएसडीएन लिंक] (http://msdn.microsoft.com/en-us/library/bb675196.aspx) हमें XDocument बनाम XDocument बनाम क्वेरी करने के बारे में स्पष्ट जानकारी देता है। – CSharp

उत्तर

29

XDocument एक संपूर्ण XML दस्तावेज़ का प्रतिनिधित्व करता है। यह आमतौर पर कई तत्वों से बना होता है।

XElement एक एक्सएमएल तत्व (गुणों, बच्चों आदि के साथ) का प्रतिनिधित्व करता है। यह एक बड़े दस्तावेज़ का हिस्सा है।

एक्सएमएल तत्व का उपयोग करते समय एक्सएमएलमेंट का उपयोग करें जब एक्सएमएल तत्व के साथ काम करते हैं।

उदाहरण के लिए - XElement एक HasAttributes संपत्ति यह बताते हैं कि कोई गुण तत्व पर मौजूद है, लेकिन के रूप में इस तरह के एक संपत्ति एक पूरी एक्सएमएल दस्तावेज़ के संदर्भ में कोई मतलब नहीं है एक XDocument, नहीं करता है।

+1

_XElement में कोई लोड विधि नहीं है: गलत लगता है, [लोड (स्ट्रिंग)] देखें (http://msdn.microsoft.com/en-us/library/bb298435.aspx) और [अन्य लोडिंग विधियों को ओवरलोड करना] (http: //msdn.microsoft.com/en-us/library/system.xml.linq.xelement.aspx)। – bluish

+0

@bluish - सुधार के लिए धन्यवाद। उत्तर अपडेट किया गया। – Oded

14

MSDN से:

ध्यान दें कि आप केवल यदि आप विशिष्ट XDocument वर्ग द्वारा प्रदान की कार्यक्षमता की आवश्यकता होती है XDocument वस्तुओं को बनाने के लिए है। कई परिस्थितियों में, आप XElement के साथ सीधे पर काम कर सकते हैं। XElement के साथ सीधे काम करना एक सरल प्रोग्रामिंग मॉडल है।

XDocument XContainer से निकला है। इसलिए, इसमें बाल नोड्स हो सकते हैं। हालांकि, XDocument ऑब्जेक्ट्स में केवल एक बच्चा XElement नोड हो सकता है। यह XML मान को दर्शाता है कि XML दस्तावेज़ में केवल एक मूल तत्व हो सकता है।

16

यहां msdn से एक व्यावहारिक उदाहरण है जो इसे स्पष्ट करता है। मान लें कि आपके पास यह परीक्षण है।एक्सएमएल फ़ाइल:

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

आप इस वापस पाने:

<Root> 
    <Child1>1</Child1> 
    <Child2>2</Child2> 
    <Child3>3</Child3> 
</Root> 
  1. XDocument साथ आप ऐसा करते हैं, तो

    <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 साथ अगर आप ऐसा करते हैं:

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

    पर मूल्य प्राप्त करने के लिए:

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

    आप इस वापस मिल 0 नोड, आप क्या करेंगे:

    var child1 = XElement.Load("test.xml").Element("Child1").Value; 
    

संक्षेप में, XElement रूट नोड जबकि XDocument does not को ध्यान नहीं देता। लगभग, XDocument.Root = XElement, या XDocument.Root.Elements() = XElement.Elements()। दोनों XContainer से निकले हैं। एक और मामूली अंतर यह है कि XElementIXmlSerializable लागू करता है जो मैं ज्यादातर मामलों को नहीं सोचता। XElement उन अधिकांश मामलों के लिए पर्याप्त होगा जहां आप उप नोड्स से पूछना चाहते हैं। नाम मुझे भ्रमित करता है, इसलिए मैं XDocument का उपयोग करना पसंद करता हूं।

0
MSDN लेख LINQ to XML vs. DOM, उपशीर्षक के तहत "एक्सएमएल तत्वों के साथ प्रत्यक्ष रूप से कार्य" के अनुसार

:

एक्सएमएल के लिए LINQ का उपयोग करते समय, आप XDocument क्लास का उपयोग आप एक टिप्पणी या प्रोसेसिंग निर्देश जोड़ना चाहते हैं, तो केवल दस्तावेज़ के मूल स्तर पर।

संबंधित मुद्दे