使用 XML DOCUMENT 将 XML 文件从一个位置保存到另一个位置

Saving XML file from one location to another location using XML DOCUMENT

在将现有 XML 保存到新位置时,实体从内容中转义并替换为问号

查看实体下方的快照 -(- 作为十六进制)在阅读时存在,但在保存到另一个位置后被问号替换。

同时阅读内心XML

作为内部文本阅读时

保存后 XML 文件

编辑 1 下面是我的代码

string path = @"C:\work\myxml.XML";
string pathnew = @"C:\work\myxml_new.XML";
//GetFileEncoding(path);
XmlDocument document = new XmlDocument();
XmlDeclaration xmlDeclaration = document.CreateXmlDeclaration("1.0","US-ASCII",null);
//document.CreateXmlDeclaration("1.0", null, null);
document.Load(path);
string x = document.InnerText;
document.Save(pathnew);

编辑 2 我的源文件如下所示。我需要按原样保留实体

这里的问题似乎是 XmlDocument 内部的特定 XmlWriter 实现对实体引用编码的处理。

如果您自己创建 XmlWriter,问题就会消失 - 不受支持的字符将被正确编码为实体引用。这个 XmlWriter 是一个不同的(和更新的)实现,它设置了一个 EncoderFallback 将字符编码为无法编码的字符的实体引用。根据文档中的说明,默认的回退机制是对问号进行编码。

var settings = new XmlWriterSettings
{
    Indent = true,
    Encoding = Encoding.GetEncoding("US-ASCII")
};

using (var writer = XmlWriter.Create(pathnew, settings))
{
    document.Save(writer);            
}

顺便说一句,我建议使用 LINQ to XML XDocument API,它比旧的吱吱作响的 XmlDocument API。而它的Save版本也没有这个问题!