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を愛用
掲載日: 2011-01-12
iPentec all rights reserverd.