我正在使用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);
请注意,我提交的代码是我的程序实际包含的缩小形式;在功能上它是一样的。
答案 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"));