Linq से XML Descendants और Elements में क्या अंतर है


181

मैं इन दोनों खोजशब्दों को वी.एस. इंटेलीजेंसी में ले आया हूँ। मैंने उनके बीच के अंतर को समझने की कोशिश की और उन्हें स्पष्ट जवाब नहीं मिला। इनमें से किसमें छोटे से मध्यम XML फ़ाइलों के साथ सर्वश्रेष्ठ प्रदर्शन है। धन्यवाद

जवाबों:


292

Elementsकेवल उन तत्वों को खोजता है जो प्रत्यक्ष वंशज हैं, अर्थात तत्काल बच्चे।

Descendants बच्चों को किसी भी स्तर पर पाया जाता है, अर्थात बच्चे, ग्रैंड-चिल्ड्रेन, आदि ...


यहाँ एक उदाहरण है जो अंतर प्रदर्शित करता है:

<?xml version="1.0" encoding="utf-8" ?>
<foo>
    <bar>Test 1</bar>
    <baz>
        <bar>Test 2</bar>
    </baz>
    <bar>Test 3</bar>
</foo>

कोड:

XDocument doc = XDocument.Load("input.xml");
XElement root = doc.Root;

foreach (XElement e in root.Elements("bar"))
{
    Console.WriteLine("Elements : " + e.Value);
}

foreach (XElement e in root.Descendants("bar"))
{
    Console.WriteLine("Descendants : " + e.Value);
}

परिणाम:

तत्व: टेस्ट १
तत्व: टेस्ट 3
वंशज: टेस्ट १
उतर: टेस्ट २
उतर: टेस्ट 3

यदि आप जानते हैं कि आप चाहते हैं कि तत्व तत्काल बच्चे हैं, तो आप बेहतर प्रदर्शन करेंगे यदि आप Elementsइसके बजाय उपयोग करते हैं Descendants


महान जवाब, मैं हमेशा सोचा था कि के रूप में अपने विवरण में प्रकाश डाला दो एक छोटे से पीछे की ओर थे (जब तत्वों का वर्णन, आप हमेशा शब्द "वंश" के रूप में उसे कुछ अतिरिक्त वैकल्पिक है जहां जब वंशज बारे में बात कर उपयोग करने की आवश्यकता
Mattisdada

16

Descendantsनिर्दिष्ट नाम के लिए वर्तमान तत्व के पूरे उपशीर्षक को खोजेगा (या यदि कोई नाम नहीं दिया गया है तो पेड़ का एक चपटा संस्करण लौटाएगा), जबकि Elementsवर्तमान तत्व के केवल तत्काल बच्चों की खोज करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.