XMLファイルを作成して出力する (DOM方式 XmlDocumentを利用) - C#
DOM方式でXMLファイルを作成して出力する方法を紹介します。DOM方式でXMLファイルを作成する場合はXMLファイルをパーシングするときと同じXmlDocumentクラスを用います。
概要
XMLファイルを出力するにはXmlDocumentオブジェクトを作成し、出力したいXmlNode等の要素を追加しxmlDocument.Save()メソッドを呼び出しXMLをディスクに保存します。
コード例
/*
using System.Xml;
を追加
*/
private void button6_Click(object sender, EventArgs e)
{
XmlDocument xmlDocument = new XmlDocument();
XmlElement elem = xmlDocument.CreateElement("root");
xmlDocument.AppendChild(elem);
//1つめのitemノード
XmlElement item_elem = xmlDocument.CreateElement("item");
item_elem.SetAttribute("code", "CD-C-032");
elem.AppendChild(item_elem);
XmlElement name_elem = xmlDocument.CreateElement("name");
item_elem.AppendChild(name_elem);
XmlNode name_node = xmlDocument.CreateNode(XmlNodeType.Text, "", "");
name_node.Value = "Penguin Cookie";
name_elem.AppendChild(name_node);
XmlElement price_elem = xmlDocument.CreateElement("price");
item_elem.AppendChild(price_elem);
XmlNode price_node = xmlDocument.CreateNode(XmlNodeType.Text, "", "");
price_node.Value = "520";
price_elem.AppendChild(price_node);
//2つめのitemノード
item_elem = xmlDocument.CreateElement("item");
item_elem.SetAttribute("code", "CD-C-018");
elem.AppendChild(item_elem);
name_node = xmlDocument.CreateNode(XmlNodeType.Element, "name", "");
name_node.InnerText = "Whale Candy";
item_elem.AppendChild(name_node);
price_node = xmlDocument.CreateNode(XmlNodeType.Element, "price", "");
price_node.InnerText = "185";
item_elem.AppendChild(price_node);
//
//3つめのitemノード
item_elem = xmlDocument.CreateElement("item");
item_elem.SetAttribute("code", "CD-C-042");
elem.AppendChild(item_elem);
name_elem = xmlDocument.CreateElement("name");
name_elem.InnerText = "Dorphin Cookie";
item_elem.AppendChild(name_elem);
price_elem = xmlDocument.CreateElement("price");
price_elem.InnerText = "220";
item_elem.AppendChild(price_elem);
//
xmlDocument.Save(textBox3.Text);
textBox4.Text += "Write Complete!";
}
解説
XmlDocumentクラスのインスタンスを作成します。
XmlDocument xmlDocument = new XmlDocument();
XmlDocument.CreateElement()メソッドを用いてルート要素を作成しXmlDocument.AppendChild()メソッドを用いルート要素として追加します。
XmlElement elem = xmlDocument.CreateElement("root");
xmlDocument.AppendChild(elem);
1つ目のitem要素
ルート要素"root"以下にitem要素を追加します。XmlDocument.CreateElement()メソッドを用いてitem要素を作成し、ルート要素"root"の子要素として追加します。また、XmlElement.SetAttribute()メソッドを用い"code"属性とその値を設定します。
XmlElement item_elem = xmlDocument.CreateElement("item");
item_elem.SetAttribute("code", "CD-C-032");
elem.AppendChild(item_elem);
item要素以下に配置するname要素を作成します。作成した要素はitem要素の子要素として追加します。
XmlElement name_elem = xmlDocument.CreateElement("name");
item_elem.AppendChild(name_elem);
name要素の値を作成します。Valueプロパティに値を代入します。値の要素はname要素の子要素として追加します。
XmlNode name_node = xmlDocument.CreateNode(XmlNodeType.Text, "", "");
name_node.Value = "Penguin Cookie";
name_elem.AppendChild(name_node);
item要素以下に配置するprice要素を作成します。作成した要素はitem要素の子要素として追加します。
XmlElement price_elem = xmlDocument.CreateElement("price");
item_elem.AppendChild(price_elem);
price要素の値を作成します。Valueプロパティに値を代入します。値の要素はprice要素の子要素として追加します。
XmlNode price_node = xmlDocument.CreateNode(XmlNodeType.Text, "", "");
price_node.Value = "520";
price_elem.AppendChild(price_node);
2つ目のitem要素
ルート要素"root"以下にitem要素を追加します。XmlDocument.CreateElement()メソッドを用いてitem要素を作成し、ルート要素"root"の子要素として追加します。また、XmlElement.SetAttribute()メソッドを用い"code"属性とその値を設定します。
item_elem = xmlDocument.CreateElement("item");
item_elem.SetAttribute("code", "CD-C-018");
elem.AppendChild(item_elem);
item要素以下に配置するnameノードを作成します。作成したノードはitem要素の子要素として追加します。また、name要素の値をInnerTextプロパティに設定します。
name_node = xmlDocument.CreateNode(XmlNodeType.Element, "name", "");
name_node.InnerText = "Whale Candy";
item_elem.AppendChild(name_node);
item要素以下に配置するpriceノードを作成します。作成したノードはitem要素の子要素として追加します。また、price要素の値をInnerTextプロパティに設定します。
price_node = xmlDocument.CreateNode(XmlNodeType.Element, "price", "");
price_node.InnerText = "185";
item_elem.AppendChild(price_node);
3つ目のitem要素
ルート要素"root"以下にitem要素を追加します。XmlDocument.CreateElement()メソッドを用いてitem要素を作成し、ルート要素"root"の子要素として追加します。また、XmlElement.SetAttribute()メソッドを用い"code"属性とその値を設定します。
item_elem = xmlDocument.CreateElement("item");
item_elem.SetAttribute("code", "CD-C-042");
elem.AppendChild(item_elem);
item要素以下に配置するname要素を作成します。作成した要素はitem要素の子要素として追加します。また、name要素の値をInnerTextプロパティに設定します。
name_elem = xmlDocument.CreateElement("name");
name_elem.InnerText = "Dorphin Cookie";
item_elem.AppendChild(name_elem);
item要素以下に配置するprice要素を作成します。作成した要素はitem要素の子要素として追加します。また、price要素の値をInnerTextプロパティに設定します。
price_elem = xmlDocument.CreateElement("price");
price_elem.InnerText = "220";
item_elem.AppendChild(price_elem);
出力結果
XML内のitem要素の書き出しの書式は1番目、2番目、3番目の3つとも異なりますが、結果は以下の通り同じ形式で出力されます。
<root>
<item code="CD-C-032">
<name>Penguin Cookie</name>
<price>520</price>
</item>
<item code="CD-C-018">
<name>Whale Candy</name>
<price>185</price>
</item>
<item code="CD-C-042">
<name>Dorphin Cookie</name>
<price>220</price>
</item>
</root>
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用