[C#] ネームスペースを指定してXMLファイルを作成して出力する (DOM方式 XmlDocumentを利用)
このページのタグ:[C#] [XML] [DOM] [XML名前空間]
こちらの記事ではXMLDocumentを用いて、XMLファイルを出力する方法を紹介しました。今回は、XMLDocumentを用い、ネームスペースを指定したXMLファイルを書き出す方法を紹介します。

コード


private void button9_Click(object sender, EventArgs e)
{
  XmlDocument xmlDocument = new XmlDocument();

  XmlElement elem = xmlDocument.CreateElement(
    "xns", "root", "http://www.ipentec.com/xmlns/sample/data01");
  xmlDocument.AppendChild(elem);

  //1つめのitemノード
  XmlElement item_elem = xmlDocument.CreateElement(
    "xns", "item", "http://www.ipentec.com/xmlns/sample/data01");
  item_elem.SetAttribute("code", "http://www.ipentec.com/xmlns/sample/data01", "CD-C-032");
  elem.AppendChild(item_elem);

  XmlElement name_elem = xmlDocument.CreateElement(
    "xns:name", "http://www.ipentec.com/xmlns/sample/data01");
  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(
    "xns", "price", "http://www.ipentec.com/xmlns/sample/data01");
  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(
    "xns:item", "http://www.ipentec.com/xmlns/sample/data01");
  item_elem.SetAttribute("code", "http://www.ipentec.com/xmlns/sample/data01", "CD-C-018");
  elem.AppendChild(item_elem);

  name_node = xmlDocument.CreateNode(
    XmlNodeType.Element, "xns:name", "http://www.ipentec.com/xmlns/sample/data01");
  name_node.InnerText = "Whale Candy";
  item_elem.AppendChild(name_node);

  price_node = xmlDocument.CreateNode(
    XmlNodeType.Element, "xns", "price", "http://www.ipentec.com/xmlns/sample/data01");
  price_node.InnerText = "185";
  item_elem.AppendChild(price_node);
  //

  //3つめのitemノード
  item_elem = xmlDocument.CreateElement(
    "xns", "item", "http://www.ipentec.com/xmlns/sample/data01");
  item_elem.SetAttribute("code", "http://www.ipentec.com/xmlns/sample/data01", "CD-C-042");
  elem.AppendChild(item_elem);

  name_elem = xmlDocument.CreateElement(
    "xns", "name", "http://www.ipentec.com/xmlns/sample/data01");
  name_elem.InnerText = "Dorphin Cookie";
  item_elem.AppendChild(name_elem);

  price_elem = xmlDocument.CreateElement(
    "xns:price", "http://www.ipentec.com/xmlns/sample/data01");
  price_elem.InnerText = "220";
  item_elem.AppendChild(price_elem);
  //

  xmlDocument.Save(textBox3.Text);

  textBox4.Text += "Write Complete!";
}

解説

XmlDocument xmlDocument = new XmlDocument();
XMLDocumentクラスのインスタンスを作成します。

XmlElement elem = xmlDocument.CreateElement(
  "xns", "root", "http://www.ipentec.com/xmlns/sample/data01");
ノードとなるXmlElementクラスのインスタンスを作成します。XMLの名前空間を指定する場合には、CreateElement()メソッドの引数にXML名前空間のプリフィックスとXMLネームスペースのURIを渡します。

xmlDocument.AppendChild(elem);
AppendChlidメソッドで子要素を追加します。ここは名前空間を指定しない場合と同様です。

XmlElement item_elem = xmlDocument.CreateElement(
  "xns", "item", "http://www.ipentec.com/xmlns/sample/data01");
item_elem.SetAttribute("code", "http://www.ipentec.com/xmlns/sample/data01", "CD-C-032");
elem.AppendChild(item_elem);
子ノードの作成時も同様にCreateElementメソッドの引数に名前空間のプリフィックスとURIを指定します。属性値の作成をするSetAttribute()メソッドの場合も同様に名前空間のURIを引数に渡します。

XmlElement name_elem = xmlDocument.CreateElement(
  "xns:name", "http://www.ipentec.com/xmlns/sample/data01");
item_elem.AppendChild(name_elem);
CreateElement()メソッドでは名前空間プリフィックスとURIを分けて与える引数の与え方以外に、名前空間プリフィックスを含めた名前とURIを引数に渡すCreateElement()メソッドの呼び出し方法も用意されています。

2つ目、3つ目のitemノードも同じ要領で作成します。

出力結果

出力結果は以下になります。それぞれのXmlElkementにURIを指定していましたが、出力結果では省略されプリフィックス名のみがノードの名称に負荷されていることがわかります。


<xns:root xmlns:xns="http://www.ipentec.com/xmlns/sample/data01">
  <xns:item xns:code="CD-C-032">
    <xns:name>Penguin Cookie</xns:name>
    <xns:price>520</xns:price>
  </xns:item>
  <xns:item xns:code="CD-C-018">
    <xns:name>Whale Candy</xns:name>
    <xns:price>185</xns:price>
  </xns:item>
  <xns:item xns:code="CD-C-042">
    <xns:name>Dorphin Cookie</xns:name>
    <xns:price>220</xns:price>
  </xns:item>
</xns:root>

登録日 :2011-01-16    最終更新日 :2011-02-20
このページのタグ:[C#] [XML] [DOM] [XML名前空間]
Japanese
プライバシー    iPentecについて
iPentec all rights reserverd. (ISDC)