過去の内容は以下から見れます。よろしければご参照くださいませ。
今回は、LINQ to XMLにてXPathを利用する方法についてです.
場合によっては、XPathを利用した方が楽に取得できる事も多いのでやっぱり便利です。
XPathを使用する際に利用するメソッドは以下のものです。
- XPathSelectElements
- XPathEvaluate
上記メソッドは拡張メソッドとなっており、本体は以下のクラスに定義されています。
System.Xml.Linq.Extensions
XPathSelectElementsメソッドは、名前の通り合致するXElementのシーケンスを返します。
XPathEvaluateは、通常のXPath式を評価する場合と同じように利用できます。
戻り値がobjectになることに注意。
尚、利用するにはSystem.Xml.XPathをusingしておく必要があります。
以下、サンプルです。
namespace Gsf.Samples { using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Xml.Linq; using System.Xml.XPath; #region LinqSamples-82 /// <summary> /// LINQ to XMLのサンプルです. /// </summary> /// <remarks> /// XPath(System.Xml.XPath.Extensions)のサンプルです. /// LINQ to XMLとXPathの比較については /// http://msdn.microsoft.com/ja-jp/library/vstudio/bb675178.aspx /// に詳細に記載されている. /// </remarks> public class LinqSamples82 : IExecutable { public void Execute() { // // XPathSelectElements // XPath式を評価して、XElementを取得する // // LINQ to XMLには、XPath用の拡張メソッドが定義されたクラスが存在するため // それを利用する。以下のクラスである. // System.Xml.XPath.Extensions // 尚、利用するにはSystem.Xml.XPathをusingしておく必要がある. // var root = BuildSampleXml(); // XPath指定 foreach (var elem in root.XPathSelectElements("Book/Title")) { Console.WriteLine("Value:{0}, Type:{1}", elem, elem.GetType().Name); } // XPath指定 foreach (var elem in root.XPathSelectElements("//Title")) { Console.WriteLine("Value:{0}, Type:{1}", elem, elem.GetType().Name); } Console.WriteLine("====================================="); // LINQ to XML foreach (var elem in root.Elements("Book").Elements("Title")) { Console.WriteLine(elem); } // LINQ to XML foreach (var elem in root.Descendants("Title")) { Console.WriteLine(elem); } Console.WriteLine("====================================="); // // XPathEvaluate // XPath式を評価して、結果を取得する // // LINQ to XMLには、XPath用の拡張メソッドが定義されたクラスが存在するため // それを利用する。以下のクラスである. // System.Xml.XPath.Extensions // 尚、利用するにはSystem.Xml.XPathをusingしておく必要がある. // // XPathEvaluateメソッドは、戻り値がobjectになることに注意。 // root = BuildSampleXml(); // XPath指定 foreach (var elem in (IEnumerable)root.XPathEvaluate("Book[@id=\"bk102\"]/PublishDate")) { Console.WriteLine("Value:{0}, Type:{1}", elem, elem.GetType().Name); } Console.WriteLine("====================================="); // LINQ to XML var query = from book in root.Elements("Book") where book.Attribute("id").Value == "bk102" select book.Element("PublishDate"); foreach (var elem in query) { Console.WriteLine(elem); } } XElement BuildSampleXml() { // // サンプルXMLファイル // see: http://msdn.microsoft.com/ja-jp/library/vstudio/ms256479(v=vs.90).aspx // return XElement.Load(@"xml/Books.xml"); } } #endregion }
実行すると以下のようになります。
Value:XML Developer's Guide , Type:XElement Value:Midnight Rain , Type:XElement Value:XML Developer's Guide , Type:XElement Value:Midnight Rain , Type:XElement =====================================XML Developer's Guide Midnight Rain XML Developer's Guide Midnight Rain ===================================== Value:2000-12-16 , Type:XElement =====================================2000-12-16
以下、参考リソースです.
- XElement.XPathSelectElements メソッド
- XElement.XPathEvaluate メソッド
================================
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場