使用 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
版本也没有这个问题!
在将现有 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
版本也没有这个问题!