C#のXml書き出しのサンプル

投稿者: | 2011年7月26日

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>

と表示される。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です