0

次の形式の 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 を使用しています。

4

0 に答える 0