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 在解析它时会“很好地”格式化 xml(使用 .Parse()),但它似乎没有一种方法可以显式地漂亮地打印其内容。这实际上是对 .net 框架的一个很好的补充。

您指定的 hack 虽然效率不高,但它是一种快速的方法:

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

结果是有效的 XML。换行和缩进在 XML 中无关紧要。

如果您需要漂亮的打印,您可以在完成对 XML 的操作之后执行此操作。

于 2010-01-26T16:12:44.243 回答