LINQ To XML とXPathを利用したXMLドキュメント検索

入力XMLデータ

入力するXMLデータを紹介します。

<?xml version="1.0" encoding="UTF-8"?>
<root>
  <Items>
    <Item code="PAA-03291">
      <Name>Penguin Cookie</Name>
      <Price>250</Price>
    </Item>
    <Item code="PAA-05180">
      <Name>Whale Candy</Name>
      <Price>80</Price>
    </Item>
  </Items>
</root>

コード

/*
先頭に
using System.Xml.Linq;
using System.Xml.XPath;
を追加します。
*/
private void button9_Click(object sender, EventArgs e)
{
  XDocument doc = XDocument.Load(textBox1.Text);
  IEnumerable<XElement> elemSelect = from item 
    in doc.XPathSelectElements("/root/Items/Item/Name") select item;

  foreach (XElement elem in elemSelect) {
    textBox2.Text += "Name:" + elem.Value + "\r\n";
  }
}

実行結果

Penguin Cookie
Whale Candy
---------- 

解説

XDocumentクラスを宣言し、LoadメソッドでXMLファイルを読み込みます。

XDocument doc = XDocument.Load(textBox1.Text);


Linq文を記述します。in の後ろの部分でXDocument.XPathSelectElementsメソッドを呼び出しています。XPathSelectElementsメソッドを使うとElementの選択条件にXPath式を使えます。
XPath式には/root/Items/Item/Nameを与え、Nameノードを選択対象とします。

IEnumerable<XElement> elemSelect = from item 
  in doc.XPathSelectElements("/root/Items/Item/Name") select item;

foreachループでelemSelectのデータにアクセスしますelemSelectはXElement 型のIEnumratableですのでValueプロパティの内容をTextBox2に表示します。elemSelectはNameノードが選択されて代入されているため、実行結果として"Penguin Cookie"といった文字列が出力されます。

foreach (XElement elem in elemSelect) {
  textBox2.Text += "Name:" + elem.Value + "\r\n";
}


AuthorPortraitAlt
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
作成日: 2011-01-11
Copyright © 1995–2025 iPentec all rights reserverd.