0

我正在使用 XDocument 写入 XML 文件。编写完成后,XML 不可读,因为几乎完全省略了换行符。

XDocument xmlDoc = new XDocument();
XElement xmlRoot = new XElement("root", "root");
XElement xmlEntry = new XElement("file",
   new XAttribute("name", "Example"),
   new XAttribute("hashcode", "Hashcode Example")
);
xmlRoot.Add(xmlEntry);
xmlDoc.Add(xmlRoot);
xmlDoc.Save("C:\\contents.xml");

我尝试了 xmlDoc.Save() 行的各种选项,包括:

xmlDoc.Save("...", SaveOptions.DisableFormatting);
xmlDoc.Save("...", SaveOptions.None);

请注意,我提交的代码是我的程序实际包含的简化形式;功能上是一样的。

4

1 回答 1

1

上面刚刚调用的代码xmlDoc.Save("C:\\contents.xml")是以“漂亮”格式保存 xml。它只是没有按照您期望的方式对其进行格式化。我认为问题在于您将文本值和子节点添加到同一个节点,因此解析器可能不知道如何或具体不分解这些值。

如果您修改代码以生成没有文本值的“根”元素,它将以您可能期望的方式显示 xml。我用这段代码测试过:

        XDocument xmlDoc = new XDocument();
        XElement xmlRoot = new XElement("root");
        XElement xmlEntry = new XElement("file",
           new XAttribute("name", "Example"),
           new XAttribute("hashcode", "Hashcode Example with some long string")
        );
        xmlRoot.Add(xmlEntry);
        xmlDoc.Add(xmlRoot);
        xmlDoc.Save("temp.xml");
        Console.WriteLine(System.IO.File.ReadAllText("temp.xml"));

可以与此代码一起使用生成上述内容的更简洁的方式,我发现它也更具可读性:

XDocument xmlDoc = new XDocument();
xmlDoc.Add(
    new XElement("root",
        new XElement("file",
            new XAttribute("name", "example"),
            new XAttribute("hashcode", "hashcode example")
        )
    )
);
xmlDoc.Save("temp.xml");
Console.WriteLine(System.IO.File.ReadAllText("temp.xml"));
于 2013-10-08T16:40:55.673 回答