C# - よく使うクラス - System.Xml - XmlTextWriter

 クラウディア
1. 概要
2. Create
3. Formatting

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>
 読めるようになっています。
earthcar(アースカー)