やりたいこと
次のようなXMLファイルから、animalsやfishesなどを無視して、nameタグで囲われた要素を一括で取得したいとします。
この場合、Descendantsメソッドが使用できます。
test.xml
<?xml version="1.0" encoding="utf-8"?>
<example>
<animals>
<animal>
<name>cat</name>
</animal>
<animal>
<name>dog</name>
</animal>
</animals>
<fishes>
<fish>
<name>tuna</name>
</fish>
<fish>
<name>salmon</name>
</fish>
</fishes>
</example>
例
次のコードのように、Descendants("name")とすることで、XMLの子孫要素からnameを検索し、IEnumerable<XElement>として一括取得できます。
Program.cs
using System;
using System.Collections.Generic;
using System.Xml.Linq;
namespace test
{
class Program
{
static void Main(string[] args)
{
XDocument doc = XDocument.Load(@"test.xml");
IEnumerable<XElement> elems = doc.Descendants("name");
foreach (XElement elem in elems)
{
Console.WriteLine(elem.Value);
}
}
}
}
上記のコードは、取得したあとにforeachで各要素をコンソールに出力しています。出力結果は次のようになります。
cat
dog
tuna
salmon