Linq to XMLの子孫と要素の違いは何ですか


181

VS IntelliSenseでこれらのキーワードの両方に遭遇しました。私はそれらの違いをグーグルで調べようとしましたが、明確な答えが得られませんでした。これらのうちどれが、中小規模の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);
}

結果:

要素:テスト1
要素:テスト3
子孫:テスト1
子孫:テスト2
子孫:テスト3

必要な要素が直接の子であることがわかっている場合、のElements代わりにを使用すると、パフォーマンスが向上しますDescendants


グレート答え、私はいつもの要素を記述するとき、あなたは常に子孫について話すとき、それはもう少しオプションであるとして単語「子孫」を使用する必要があります(あなたの説明で強調されているように二つは少し後方思っていた
Mattisdada

16

Descendants現在の要素のサブツリー全体で指定された名前を検索し(名前が指定されていない場合はツリーのフラットバージョンを返す)、Elements現在の要素の直接の子のみを検索します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.