XDocument保存没有换行符

时间:2013-10-08 16:21:12

标签: c# .net xml linq-to-xml

我正在使用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);

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

1 个答案:

答案 0 :(得分:1)

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

如果您修改代码以生成没有文本值的“root”元素,它将以您可能期望的方式显示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"));