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

时间:2016-05-10 13:32:51

标签: c# xml xml-encoding

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

在阅读时看到实体下面的按扣 - ( - 作为十六进制)但在保存到另一个位置后用问号替换。

阅读内部XML

following

读作内心文字

While Reading as inner XML

保存XML文件

While Reading as inner Text

编辑1 以下是我的代码

@Interceptor 
@Loggable 
@Priority(100)
public class FileLogger {}

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

After Saving XML

1 个答案:

答案 0 :(得分:3)

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

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

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也没有这个问题!