0

ReplaceWith() を使用してノードを置き換えようとしていますが、結果として不適切な形式の XML (改行やインデントの欠落) が発生することに気付きました。

誰もこの問題に遭遇したことがありますか?


コードスニペット:

[Test]
public void Test()
{
    XDocument document;

    using (var reader = XmlReader.Create("C:\\test.xml"))
    {
        // *** Running this line results in new lines OMITTED ***
        document = XDocument.Load(reader);

        // *** Running this line results in proper formatting ***
        //document = XDocument.Parse(XDocument.Load(reader).ToString());

    }

    var newNode = new XElement("Node", new XElement("SubNode"));

    document.Root.Element("Node").ReplaceWith(newNode);

    Console.Out.WriteLine("document = {0}", document);
}

再現する手順:

1) 以下を使用して C:\test.xml を作成します。

<Test>
    <Node/>
<Test>

2) 上記のコード スニペットを実行します。

これにより、一部の不適切な形式の XML が生成されます。

<Test>
    <Node><SubNode /></Node>
</Test>

3) 次の行のコメントを外します。

document = XDocument.Parse(XDocument.Load(reader).ToString());

4) スニペットを再度実行します。

結果は適切にフォーマットされます。

<Test>
  <Node>
    <SubNode />
  </Node>
</Test>
4

2 に答える 2

1

XElement / XDocument は、(.Parse() を使用して) 解析中に xml を暗黙的に「適切に」フォーマットしますが、コンテンツを明示的にきれいに印刷する方法はないようです。これは実際には、.net フレームワークへの優れた追加機能となります。

あなたが指定したハックは、あまり効率的ではありませんが、それを行う簡単な方法です:

XDocument.Parse(XDocument.Load(reader).ToString());
于 2012-09-27T17:37:46.000 に答える
0

結果は有効な XML です。XML では、改行とインデントは重要ではありません。

きれいに印刷する必要がある場合は、XML の操作が完了してから行います。

于 2010-01-26T16:12:44.243 に答える