我正在尝试读取 XML 配置文件,进行一些调整(查找并删除或添加元素)并再次保存它。我希望此编辑尽可能不具有侵入性,因为文件将受到源代码控制,并且我不希望无关紧要的更改导致合并冲突等。这大致是我所得到的:
XDocument configDoc = XDocument.Load(fileName, LoadOptions.PreserveWhitespace);
// modifications to configDoc here
configDoc.Save(fileName, SaveOptions.DisableFormatting);
这里出现了一些问题:
-
encoding="utf-8"
被添加到 xml 声明中。
-
<tag attr="val"/>
更改为<tag attr="val" />
- 为了便于阅读而分散在不同行上的属性被全部推到一行上。
有什么方法可以减少对 XDocument 的干扰,还是我必须尝试进行字符串编辑才能获得我想要的内容?
LINQ to XML 对象模型不存储解析的元素是否标记为<foo/>
or <foo />
因此,当保存回来时,这些信息就会丢失。如果您想确保某种格式,那么您可以扩展 XmlWriter 实现并覆盖其http://msdn.microsoft.com/en-us/library/system.xml.xmlwriter.writeendelement.aspx 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 加载/保存时保留标记详细信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)