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>
と表示される。