gpt4 book ai didi

c# - 如何使用 XDocument 保留所有 XML 格式?

转载 作者:数据小太阳 更新时间:2023-10-29 01:45:22 25 4
gpt4 key购买 nike

我正在尝试读取一个 XML 配置文件,做一些调整(查找和删除或添加一个元素)并再次保存它。我希望此编辑尽可能无干扰,因为文件将受源代码控制,我不希望无关紧要的更改导致合并冲突等。这大致就是我所得到的:

XDocument configDoc = XDocument.Load(fileName, LoadOptions.PreserveWhitespace);
// modifications to configDoc here
configDoc.Save(fileName, SaveOptions.DisableFormatting);

这里会出现一些问题:

  1. encoding="utf-8"被添加到 xml 声明中。
  2. <tag attr="val"/>更改为 <tag attr="val" />
  3. 为了可读性而分布在不同行的属性被全部推送到一行。

有什么方法可以减少对 XDocument 的干扰,还是我必须尝试进行字符串编辑才能获得我想要的内容?

最佳答案

LINQ to XML 对象模型不存储解析的元素是否标记为 <foo/><foo />因此,当保存回来时,此类信息会丢失。如果您想确保某种格式,那么您可以扩展 XmlWriter 实现并覆盖其 http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.writeendelement.aspx但那样你也不会保留输入格式,而是你会写出任何空元素为 <foo/>或者您在方法中实现的任何格式。

还有其他可能发生的变化,例如加载文件时

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<head>
<title>Example</title>
</head>
<body>
<h1>Example</h1>
</body>
</html>

保存回来结果是

<xhtml:html xmlns="http://www.w3.org/1999/xhtml" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xhtml:head>
<xhtml:title>Example</xhtml:title>
</xhtml:head>
<xhtml:body>
<xhtml:h1>Example</xhtml:h1>
</xhtml:body>
</xhtml:html>

所以不要指望在使用 XDocument/XElement 加载/保存时保留标记细节。

关于c# - 如何使用 XDocument 保留所有 XML 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8512094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com