如何在没有 XML Prolog 的情况下保存 XmlDocument?

How can I save an XmlDocument without the XML Prolog?

在保存后以某种方式将 csproj 文件作为 xml 文件 (xmlDocument) 处理时,编码从 UTF-8 更改为 ASCII。我想出的唯一解决方案是将 StreamWriter 与声明的编码一起使用。但这会向文件添加 header。 问题: 1. 你知道这个问题的其他解决方案吗? 2. 我可以保留更改的 csproj 吗?

StreamReader sr = new StreamReader(projectFilePath, Encoding.UTF8);
XmlDocument xmlCsproj = new XmlDocument();
xmlCsproj.Load(sr);
sr.Close();

// Working on XML nodes (replace references paths)

StreamWriter sw= new StreamWriter(projectFilePath, false, Encoding.UTF8);
xmlCsproj.Save(sw);
sw.Close();

这应该有用吗?

var writer = new XmlTextWriter(projectFilePath, Encoding.UTF8)
{
    Formatting = Formatting.Indented
};
xmlCsproj.WriteContentTo(writer);
writer.Close();

首先,UTF8 字符值与 0-127 范围内的 US-ASCII 值相同。无法确定 csproj 文件是保存为 US-ASCII 还是 UTF8,除非该文件包含非英语文本,例如非英语文件路径。那是这里发生的事吗?即便如此,XmlDocument.Save 应该默认使用 UTF8。

您可以控制如何使用 XmlWriter 和 XmlWriterSettings 将 XmlDocument 写入流或文件。在这种情况下,您需要设置 OmitXmlDeclaration :

XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;

var writer = XmlWriter.Create(projectFilePath, settings);
xmlCsproj.Save(sw);
sw.Close();

默认编码为UTF8。要更改它,您可以将 XmlWriterSettings.Encoding 设置为不同的值