1. 概要
参考サイトによれば
W3C 勧告『Extensible Markup Language (XML) 1.0』および勧告『Namespaces in XML』に準拠する XML データを格納するストリームまたはファイルを高速に、非キャッシュで、前方向に生成する方法を提供するライターを表します。
.NET Framework 2.0 以降では、代わりに XmlWriter クラスを使用することをお勧めします。
とのことで、読んだだけではなんのことかわからない。
本ページは、下記にサイトを参考にさせていただきました。
「XmlTextWriter クラス (System.Xml)」
2. Create
これ、参考サイトに記述がないんですよね。
「.NET Framework」のバージョンによるのか?
XmlWriter xw = XmlWriter.Create(ファイル名, プロパティ);
で、ファイルを作成することができます。
使い方は、次項と合わせて。
3. Formatting
参考サイトによれば、「出力の書式設定方法を示します。」とのことです。
これは、前項のプロパティ値として指定します。
まず
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.Xml;
namespace Console
{
public class myClass
{
public long i = 0;
public string s = String.Empty;
}
class Program
{
static void Main(string[] args)
{
List<myClass> list = new List<myClass>
{
new myClass { i = 1, s = "A" },
new myClass { i = 2, s = "B" },
new myClass { i = 3, s = "C" },
};
using (XmlWriter xw = XmlWriter.Create("./tmp.xml"))
{
DataContractSerializer serializer = new DataContractSerializer(typeof(List<myClass>));
serializer.WriteObject(xw, list);
}
}
}
}
てなソースを書きまして、ビルド後に実行すると、下記のような内容の「.xml」ファイルが作成されます。
<?xml version="1.0" encoding="utf-8"?><ArrayOfmyClass xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Console"><myClass><i>1</i><s>A</s></myClass><myClass><i>2</i><s>B</s></myClass><myClass><i>3</i><s>C</s></myClass></ArrayOfmyClass>
改行なしで、出力されてしまいますので、なんのこっちゃら、わからんわけです。
そこで、25行目あたりを
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.Encoding = new System.Text.UTF8Encoding(false);
using (XmlWriter xw = XmlWriter.Create("./tmp.xml", settings))
と書き換えて、ビルド、実行すると、下記のような内容の「.xml」ファイルになります。
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfmyClass xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Console">
<myClass>
<i>1</i>
<s>A</s>
</myClass>
<myClass>
<i>2</i>
<s>B</s>
</myClass>
<myClass>
<i>3</i>
<s>C</s>
</myClass>
</ArrayOfmyClass>
読めるようになっています。