次の形式の XML ファイルを作成しようとしています。
<NodeTag>
<Tag1>tag 1 data</Tag1>
<Tag2></Tag2>
</NodeTag>
次のような標準の XmlWriter を使用します。
XmlWriterSettings settings = new XmlWriterSettings();
settings.Encoding = Encoding.Unicode;
settings.CloseOutput = true;
settings.Indent = true;
settings.NewLineOnAttributes = false;
XmlWriter writer = XmlWriter.Create(xmlFilePath, settings);
myXmlDoc.save(writer)
次のような出力が得られます。
<NodeTag>
<Tag1>tag 1 data</Tag1>
<Tag2 />
</NodeTag>
完全な要素が書き込まれるかどうかを制御する XmlWriterSettings の設定が見つかりません。
WriteEndElement() をオーバーライドして、完全な要素を書き出すクラスを作成しようとしました。
class XmlFullElementTextWriter : XmlTextWriter
{
public XmlFullElementTextWriter(TextWriter tw) : base(tw) { }
public XmlFullElementTextWriter(Stream s, Encoding e) : base(s, e) { }
public XmlFullElementTextWriter(String s, Encoding e) : base(s, e) { }
public override void WriteEndElement()
{
base.WriteFullEndElement();
}
}
私はこれを次のように呼びます:
XmlFullElementTextWriter writer = new XmlFullElementTextWriter(xmlFilePath, Encoding.Unicode);
writer.Formatting = Formatting.Indented;
myXmlDoc.save(writer);
これは私にこれを与えます:
<NodeTag>
<Tag1>tag 1 data</Tag1>
<Tag2>
</Tag2>
</NodeTag>
さまざまな形式が同等であることは知っていますが、この方法が必要です。
注 - .NET Framework 4.5.50709 で実行されている Visual Studio 2012 を使用しています。