1. ホーム
  2. c#

[解決済み] Linq to XML DescendantsとElementsの違いは何ですか?

2022-04-19 20:42:06

質問

VSのインテリセンスで、この2つのキーワードを見かけたことがあります。両者の違いをググってみましたが、明確な答えは得られませんでした。小中規模のXMLファイルであれば、どちらのキーワードが一番パフォーマンスが良いのでしょうか?ありがとうございます。

解決方法は?

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 .