使用 XElement 保存 XML 文件时,文件中的对齐方式也会发生变化,如何避免?

Posted

技术标签:

【中文标题】使用 XElement 保存 XML 文件时,文件中的对齐方式也会发生变化,如何避免?【英文标题】:When saving XML file with XElement, alignment in file changes as well, how to avoid? 【发布时间】:2013-04-15 20:25:39 【问题描述】:

我正在使用

XElement root = XElement.Load(filepath);

加载 XML 文件,然后找到我需要的东西。

IEnumerable<XElement> commands = from command in MyCommands
                                 where (string) command.Attribute("Number") == Number
                                 select command;

foreach (XElement command in commands)

     command.SetAttributeValue("Group", GroupFound);

完成更改后,我使用以下代码保存文件。

root.Save(filepath);

保存文件时,我的 XML 文件中的所有行都会受到影响。 Visual Studio默认对齐所有行,但我需要保存原始文件格式。

我不能更改文档的任何部分,除了 Group 属性值。

command.SetAttributeValue("Group") attributes.

【问题讨论】:

【参考方案1】:

你需要这样做:

XElement root = XElement.Load(filepath, LoadOptions.PreserveWhitespace);

然后做:

root.Save(filepath, SaveOptions.DisableFormatting);

这将通过使用LoadOptions 和SaveOptions 保留您的原始空白。

【讨论】:

【参考方案2】:

您要保留的信息在 XDocument 中开始丢失。

XDocument 不在乎你的元素前面是否有制表符或空格,以及属性之间是否有多个空格等。如果你想依赖 Save() 方法,你必须放弃这个想法您可以保留格式。

要保留格式,您需要添加自定义处理并确定要在何处进行更改。或者,如果您的 XML 来自机器而不是人工编辑,您可以调整保存选项以匹配您的格式

【讨论】:

我的 XML 文件有 10000 行,最好的方法是什么?不确定自定义格式是否是一个选项 我不知道您要达到什么目的 - 您是在构建 XML 编辑器还是在尝试完全匹配某些 Web 服务输出?源格式是否可靠且一致,还是可以一直更改(甚至一次)?您是否希望保留所有格式,例如属性之间的空格? 上面的答案是我一直在寻找的,留下空格但不要碰对齐

以上是关于使用 XElement 保存 XML 文件时,文件中的对齐方式也会发生变化,如何避免?的主要内容,如果未能解决你的问题,请参考以下文章

XElement 保存问题

c#对xml的操作

在 C# 中使用 XElement 获取 XML 的元素节点值

使用格式化和缩进将 XElement 添加到 XML 文件

如何将 Dictionary<XElement,XElement> 转换为 xml 文件?

VB.NET:使用 XDocument 在 XML 文件中添加/编辑/删除 XElement