XPathを使って指定した属性値を持つノードを選択する - C#
XPath式を使って指定した属性値を持つノードを検索するコードを紹介します。
概要
XPath式を使って指定した属性値を持つノードを検索します。
指定した属性値を持つノードを検索する場合は次の書式を用います。
また、次の書式を利用するとルートノード以下にある(ノード名)という名前を持つノードすべてが選択対象となります。
下記の書式でも記述できます。
コード例
private void button10_Click(object sender, EventArgs e)
{
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(textBox1.Text);
XmlNodeList nodeList = xmlDocument.SelectNodes(@"/root/node[@code='A002']");
/*
//下記XPath式はルートノード以下にあるnodeノードを対象とする
XmlNodeList nodeList = xmlDocument.SelectNodes(@"//node[@code='A002']");
*/
for (int i=0; i < nodeList.Count; i++) {
textBox2.Text += "NodeType: " + nodeList[i].NodeType + "\r\n";
textBox2.Text += "Name: " + nodeList[i].Name + "\r\n";
textBox2.Text += "LocalName: " + nodeList[i].LocalName + "\r\n";
textBox2.Text += "Value: " + nodeList[i].Value + "\r\n";
textBox2.Text += "InnerText: " + nodeList[i].InnerText + "\r\n";
textBox2.Text += "\r\n";
if (nodeList[i].HasChildNodes == true) {
for (int j=0; j < nodeList[i].ChildNodes.Count; j++) {
textBox2.Text += "NodeType: " + nodeList[i].ChildNodes[j].NodeType + "\r\n";
textBox2.Text += "Name: " + nodeList[i].ChildNodes[j].Name + "\r\n";
textBox2.Text += "LocalName: " + nodeList[i].ChildNodes[j].LocalName + "\r\n";
textBox2.Text += "Value: " + nodeList[i].ChildNodes[j].Value + "\r\n";
textBox2.Text += "InnerText: " + nodeList[i].ChildNodes[j].InnerText + "\r\n";
}
}
textBox2.Text += "\r\n";
}
}
解説
XmlDocumentクラスのインスタンスを作成しXMLファイルを読み込みます。
XmlDocument xmlDocument = new XmlDocument();
xmlDocument.Load(textBox1.Text);
選択するノードのXPath式を与えてノードを選択します。
上記の例では /root/node のパスを持つノードで、"node"ノードの属性"code"が"A002"であるノードを選択するXPath式になります。
XmlNodeList nodeList = xmlDocument.SelectNodes(@"/root/node[@code='A002']");
下記コードはルートノード以下にある、"node"ノードで属性"code"が"A002"であるノードを選択するXPath式です。
XmlNodeList nodeList = xmlDocument.SelectNodes(@"//node[@code='A002']");
以下選択したノードの内容をtextBox2に表示するコードとなります。
入力XMLファイル
<?xml version="1.0" encoding="UTF-8"?>
<root>
<node code="A001">
<data type="text">データ1です</data>
</node>
<node code="A002">
<data type="text">データ2です</data>
</node>
<node code="A003">
<data type="text">データ3です</data>
</node>
</root>
実行結果
codeの属性値がA002である2番目のノードを選択して表示する結果が得られます。
NodeType: Element
Name: node
LocalName: node
Value:
InnerText: データ2です
NodeType: Element
Name: data
LocalName: data
Value:
InnerText: データ2です
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用