使用XmlDocument保留XML格式

5

我正在使用XmlDocument处理xml。

我如何保存我的“XmlDocument”与当前的格式相同?

当前格式:

<?xml version="1.0" encoding="utf-8"?>
<root>

  <element></element>

</root>

代码:

                XmlDocument testDoc = new XmlDocument();
                testDoc.Load(@"C:\Test.xml");

                **(do reading/writing using only XmlDocument methods)**

                testDoc.Save(@"C:\Test.xml");

有一个类似的主题:XmlDocument class is removing formatting, c#, .NET 被接受的答案是PreserveWhiteSpace = true,但实际上它会删除所有空格而不是保留它们。
例子:
代码:
    XmlDocument testDoc = new XmlDocument();
    testDoc.Load(@"C:\Test.xml");
    testDoc.PreserveWhitespace = true;
    testDoc.Save(@"C:\Test.xml");

结果:

<?xml version="1.0" encoding="utf-8"?><root><element></element></root>

1
PreserveWhiteSpace = true,实际上会删除所有空格而不是保留它们。你确定吗?MSDN说:如果在调用Load或LoadXml之前PreserveWhitespace为true,则会保留空格节点;否则,如果此属性为false,则保留重要的空格,但不保留空格。 - Haris Hasan
非常感谢,我在加载后进行了保留。 - Andrey
3个回答

23

PreserveWhitespace设置为true对我有效-但你必须在加载之前这样做,以便在加载时不丢失空白:

using System;
using System.Xml;

class Test
{
    static void Main() 
    {
        XmlDocument testDoc = new XmlDocument();
        testDoc.PreserveWhitespace = true;
        testDoc.Load("Test.xml");
        testDoc.Save("Output.xml");
    }
}

我刚刚尝试过,空格被保留了。


同样的问题。也许是他在中间做了什么? - Adam
3
非常感谢,我在加载后一直在保存它们。 - Andrey
12
请注意,PreserveWhitespace 仅保留元素的缩进格式。如果您在新行中拥有属性或多行值,则它们将被重新格式化。 - foka
@raj 抱歉,我不知道。 - foka

1

在加载之前使用preservewhitespace。它将保持格式相同。

like above
var xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.LoadXml(xmlStr);

如果您在加载后使用它,它将消除之间的空白。


4
这并没有比两年前的回答提供更多信息。 - nobody

1

嗯,当使用PreserveWhiteSpace=true时,我发现空格被保留了。也许在您加载时它是false

var xmlStr = @"<?xml version=""1.0"" encoding=""utf-8""?>
<root>

  <element></element>

</root>";

var xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
xmlDoc.LoadXml(xmlStr);
xmlDoc.Save(Console.Out);

显示:

<?xml version="1.0" encoding="utf-16"?>
<root>

  <element></element>

</root> 

非常感谢,我在加载后进行了保留。 - Andrey
4
谢谢你教会我两个新东西:
  1. 转义字符 ""
  2. 如何巧妙地使用 Console.Out
- Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接