C#で簡単にXMLを解析してみる
2012年10月12日
XMLで一部の値だけが欲しいときに、なるべく簡単にできる方法を試してみました。
単純な例です。
<doc>
<head>
<title>タイトル</title>
</head>
<body>
<line>一行目</line>
<line>二行目</line>
<line>三行目</line>
</body>
</doc>
このようなXMLの場合、以下のように解析します。
XmlDocument doc = new XmlDocument();
doc.Load(new StringReader(textBox1.Text));
XmlNodeList nodeList;
XmlNode root = doc.DocumentElement;
// タイトル表示
Console.WriteLine(root.SelectSingleNode("head/title").InnerText);
// 行選択
nodeList = root.SelectNodes("body/line");
foreach (XmlNode nd in nodeList)
{
// 行表示
Console.WriteLine(nd.InnerText);
}
XMLはファイルではなく、文字列で読み込んでいます。
SelextNodes/SelectSingleNodeでXPathを使って直接その要素を指定しています。
エラー処理は行っていませんので、ご注意ください。
ちょっと複雑な次の例です。
<doc>
<head>
<title>タイトル</title>
</head>
<body>
<text>
<font>ゴシック</font>
<text>あああ</text>
</text>
<text>
<font>明朝</font>
<text>いいい</text>
</text>
</body>
</doc>
あえてtextの中にtextを配置しています。
この場合は、
XmlDocument doc = new XmlDocument();
doc.Load(new StringReader(textBox1.Text));
XmlNodeList nodeList;
XmlNode root = doc.DocumentElement;
// タイトル表示
Console.WriteLine(root.SelectSingleNode("head/title").InnerText);
nodeList = root.SelectNodes("body/text");
//Change the price on the books.
foreach (XmlNode nd in nodeList)
{
// フォント
Console.WriteLine(nd.SelectSingleNode("font").InnerText);
// テキスト
Console.WriteLine(nd.SelectSingleNode("text").InnerText);
}
という感じになります。
簡単に取り出すということを目的としていますので、巨大なXMLの場合のは考慮していません。
名前空間がある場合は、XmlNamespaceManagerを使ったりします。
また、属性(attribute)指定をしたい場合は、XPathに追加で記述します。