xmlを読む方法が良いのはどれ

C#ではDOMパーサーでパーシングする場合はXmlDocumentクラスだそうです。メモメモ
using System.Xml;

var reader = new StreamReader(“config.xml”);
var xmlDoc = new XmlDocument();
xmlDoc.Load(reader);/span>Load(reader);

一気にメモリに読み込むのは以下の方法が簡単らしいのだが、ノードや中に入っている属性の説明が入っていればいいが、殆ど無い。

XmlDocument.Load(TextReader)で一気にメモリに読み込む。
そこから値を取得する場合、例えばルートのタグがresponseであれば、

var res = xmlDoc.GetElementsByTagName(“response”);

var associate = new Dictionary<string, string>();
foreach (XmlNode node in res[0].ChildNodes)
{
associate.Add(node.Name, node.InnerText);
}

その解説なるものを見つけたのでこれもなくなって欲しく無いのでメモメモ

解説

XmlDocument xmlDocument = new XmlDocument();

にてXmlDocumentの宣言とインスタンスの作成をします。

xmlDocument.Load(textBox1.Text);

にて、Load()メソッドでXMLファイルを読み込みます。

XmlElement elem = xmlDocument.DocumentElement;

XmlDocumentのルートノードのにはxmlDocument.DocumentElementプロパティでアクセスできます。

textBox2.Text += “NodeType; ” + elem.NodeType.ToString() + “\r\n”;
textBox2.Text += “LocalName; ” + elem.LocalName + “\r\n”;
textBox2.Text += “Name; ” + elem.Name + “\r\n”;
textBox2.Text += “\r\n”;

ルートノードの内容をtextBox2に表示しします。今回はNodeType, LocalName, Nameの値をテキストボックスに表示します。

if (elem.HasChildNodes == true) {

ルートノードに子ノードがある場合は、子ノードを読み込みます。

XmlNode childNode = elem.FirstChild;

FirstChildプロパティを用いることで最初の子ノードにアクセスできます。

textBox2.Text += “NodeType; ” + childNode.NodeType.ToString() + “\r\n”;
textBox2.Text += “LocalName; ” + childNode.LocalName + “\r\n”;
textBox2.Text += “Name; ” + childNode.Name + “\r\n”;
textBox2.Text += “\r\n”;

子ノードのタグ名をtextBox2に表示します。

if (childNode.HasChildNodes == true) {

ノードがさらに子ノードを持っているか確認します。

for (int i=0; i < childNode.ChildNodes.Count; i++) {
XmlNode dataNode= childNode.ChildNodes[i];

子ノードがあれば、子ノードの個数分だけループします。ループ内でi番目の子ノードを取得します。

textBox2.Text += “NodeType; ” + dataNode.NodeType.ToString() + “\r\n”;
textBox2.Text += “LocalName; ” + dataNode.LocalName + “\r\n”;
textBox2.Text += “Name; ” + dataNode.Name + “\r\n”;

取得したノードのタグ名をtextBox2に表示します。

for (int j=0; j < dataNode.Attributes.Count; j++) {
XmlAttribute xmlAttr = dataNode.Attributes[j];
textBox2.Text += “LocalName; ” + xmlAttr.LocalName + “\r\n”;
textBox2.Text += “Name; ” + xmlAttr.Name + “\r\n”;
textBox2.Text += “Value; ” + xmlAttr.Value + “\r\n”;
}

にて、ノードの属性を取得し属性の名前と値をtextBox2に表示します。

if (dataNode.HasChildNodes == true) {
XmlNode valueNode = dataNode.ChildNodes[0];
textBox2.Text += “NodeType; ” + valueNode.NodeType.ToString() + “\r\n”;
textBox2.Text += “LocalName; ” + valueNode.LocalName + “\r\n”;
textBox2.Text += “Name; ” + valueNode.LocalName + “\r\n”;
textBox2.Text += “Value; ” + valueNode.Value + “\r\n”;
textBox2.Text += “\r\n”;
}

さらに子ノードがあるか確認し、子ノードがあれば、そのタグ名と値をtextBox2に表示します。

childNode = childNode.NextSibling;

にて、次の兄弟ノードを選択します。この処理をすべての兄弟ノードについて繰り返しています。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です