[英]How do I preserve special characters when writing XML with XDocument.Save()?
[英]How do I preserve all XML formatting with XDocument?
我正在尝试读取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/>
或<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加载/保存时,不要指望保留标记详细信息。
要避免在文档的标题中声明,您可以使用以下内容
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
using (XmlWriter xw = XmlWriter.Create(fileName, settings))
{
doc.Save(xw);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.