C#でxmlを書き出すにはXmlTextWriterを使う。
以下に、そのサンプルを示す。
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
// データ構造(簡略化のため、メンバ変数は自動実装プロパティ)
class BookData
{
public String Title { get; set; }
public String Author { get; set; }
public int Price { get; set; }
public void WriteXmlElement(XmlTextWriter xtw)
{
xtw.WriteStartElement("Book");
xtw.WriteElementString("Title", Title);
xtw.WriteElementString("Author", Author);
xtw.WriteElementString("Price", Price.ToString());
xtw.WriteEndElement();
}
}
private void WriteXml(XmlTextWriter w, List<BookData> bookDataList)
{
w.Formatting = Formatting.Indented;
w.WriteStartDocument();
w.WriteStartElement("Books");
bookDataList.ForEach(data => data.WriteXmlElement(w));
w.WriteEndElement();
w.WriteEndDocument();
}
// Windowsフォーム アプリケーション
// プロジェクト初期状態のフォームにボタンを一つ追加し、
// そのクリックイベントハンドラからプログラムは開始する。
private void button1_Click(object sender, EventArgs e)
{
// データ定義
List<BookData> bookDataList = new List<BookData>
{
new BookData() { Title = "C#入門", Author = "John", Price =1380 },
new BookData() { Title = "Java入門", Author = "Bob", Price =1980 },
new BookData() { Title = "たのしいAndroid入門", Author = "Tom", Price =2110 },
};
StringBuilder sb = new StringBuilder();
using (XmlTextWriter w = new XmlTextWriter(new StringWriter(sb)))
{
WriteXml(w, bookDataList);
}
Console.WriteLine(sb.ToString());
}
}
Xml書き出し処理の主となる部分は28行目のWriteXm()lメソッドである。
このサンプルでは、文字列に書き出すためXmlTextWriter生成時にStringWriterを引数に渡しているが、ファイルに書き出したいときはStreamWriterを渡せばよい。ただし、TextWriterを渡すタイプのコンストラクタでXmlTextWriterを生成すると、エンコーディングがutf-16固定となってしまうようだ。
エンコーディングを指定したいときは、Streamの継承クラスであるFileStreamやMemoryStreamを渡すタイプのコンストラクタでXmlTextWriterを生成する必要がある。
このプログラムを実行すると
<?xml version="1.0" encoding="utf-16"?>
<Books>
<Book>
<Title>C#入門</Title>
<Author>John</Author>
<Price>1380</Price>
</Book>
<Book>
<Title>Java入門</Title>
<Author>Bob</Author>
<Price>1980</Price>
</Book>
<Book>
<Title>たのしいAndroid入門</Title>
<Author>Tom</Author>
<Price>2110</Price>
</Book>
</Books>
と表示される。