ネームスペースを指定してXMLファイルを作成して出力する (SAX方式 XmlWriterを利用) - C#
SAX方式で、ネームスペースを指定してXMLファイルを作成して出力するコードを紹介します。
概要
こちらの記事ではXMLWriterを用いたXMLファイルの書き出し方法を紹介しました。今回は、XMLWriterを用いネームスペースを指定してXMLファイルを書き出す場合のコードを紹介します。
コード
private void button3_Click(object sender, EventArgs e)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " ";
settings.Encoding = Encoding.UTF8;
XmlWriter xmlWriter = XmlWriter.Create(textBox1.Text, settings);
xmlWriter.WriteStartElement("xs", "root", "http://www.ipentec.com/ns/data/001");
xmlWriter.WriteStartElement("item", "http://www.ipentec.com/ns/data/001");
xmlWriter.WriteStartAttribute("code");
xmlWriter.WriteValue("CA-C-0012");
xmlWriter.WriteEndAttribute();
xmlWriter.WriteStartElement("name", "http://www.ipentec.com/ns/data/001");
xmlWriter.WriteValue("Penguin Cookie");
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("price", "http://www.ipentec.com/ns/data/001");
xmlWriter.WriteValue("450");
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
//
xmlWriter.WriteStartElement("item", "http://www.ipentec.com/ns/data/001");
xmlWriter.WriteStartAttribute("code");
xmlWriter.WriteValue("CA-C-0023");
xmlWriter.WriteEndAttribute();
xmlWriter.WriteStartElement("name", "http://www.ipentec.com/ns/data/001");
xmlWriter.WriteValue("Dorphin Cookie");
xmlWriter.WriteEndElement();
xmlWriter.WriteStartElement("price", "http://www.ipentec.com/ns/data/001");
xmlWriter.WriteValue("250");
xmlWriter.WriteEndElement();
xmlWriter.WriteEndElement();
//
xmlWriter.WriteEndElement();
xmlWriter.Flush();
textBox2.Text += "Write Complete!";
}
解説
XMLWriterSettingsクラスのインスタンスを作成し、書き出すXMLの設定をします。
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.IndentChars = " ";
settings.Encoding = Encoding.UTF8;
XMLWriterクラスのインスタンスを作成します。
XmlWriter xmlWriter = XmlWriter.Create(textBox1.Text, settings);
エレメントを書き込みます。ネームスペースを指定する場合は第一引数にネームスペースのプリフィックスを、第二引数にエレメントの名前、第三引数にネームスペースのURIを指定します。
xmlWriter.WriteStartElement("xs", "root", "http://www.ipentec.com/ns/data/001");
上記のようにネームスペースのプリフィックスを与えないWriteStartElement()メソッドもあります。
xmlWriter.WriteStartElement("item", "http://www.ipentec.com/ns/data/001");
属性にもネームスペースを指定して書き込めます。
xmlWriter.WriteStartAttribute("code", "http://www.ipentec.com/ns/data/001");
値はネームスペースを指定しない場合と同じように書き込めます。
xmlWriter.WriteValue("CA-C-0012");
xmlWriter.WriteEndAttribute();
実行結果
URIを指定していた部分がすべてプリフィックスに置換されていることがわかります。
<?xml version="1.0" encoding="utf-8"?>
<xs:root xmlns:xs="http://www.ipentec.com/ns/data/001">
<xs:item xs:code="CA-C-0012">
<xs:name>Penguin Cookie</xs:name>
<xs:price>450</xs:price>
</xs:item>
<xs:item xs:code="CA-C-0023">
<xs:name>Dorphin Cookie</xs:name>
<xs:price>250</xs:price>
</xs:item>
</xs:root>
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用