为什么XDeclaration会忽略我设置的编码参数
本文关键字:设置 编码 参数 XDeclaration 为什么 | 更新日期: 2023-09-27 18:30:12
问题
我正在尝试用XDeclaration
生成一个XML文件,该文件将产生以下
CCD_ 2。
当我运行我的代码时,我一直得到的是这个
<?xml version="1.0" encoding="utf-8"?>
。
所以问题是,无论我对XDeclaration
的编码参数做了什么更改,它都会不断地向我的声明添加一个编码标记。
我的问题
我想要的是可能的吗?如果是的话,有人能向我解释一下吗?
我尝试过的
首先,我尝试将OmitXmlDeclaration
设置为true。但这完全删除了我的声明,然后我就不能使用XDeclation类了。。
其次,当我将XDeclation设置为:
new XDeclaration("1.0", string.Empty, "yes")
我得到这个
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
当我将XDeclation设置为:
new XDeclaration("1.0", string.Empty, string.Empty)
我得到这个
<?xml version="1.0" encoding="utf-8"?>
所以我知道它确实对我输入的内容有响应,但编码部分没有。编辑:我还尝试将参数设置为null
,而不是string.Empty
。这也不起作用。
我的代码
public FileResult Download()
{
var doc = new XDocument(
new XDeclaration("1.0", string.Empty, string.Empty),
new XElement("foo",
new XAttribute("hello", "world")
)
);
using (var stream = new MemoryStream())
{
var settings = new XmlWriterSettings()
{
OmitXmlDeclaration = false,
Indent = true,
};
using (var writer = XmlWriter.Create(stream, settings))
{
doc.Save(writer);
}
stream.Position = 0;
return File(stream.ToArray(), "text/xml", "HelloWorld.xml");
}
}
编辑
De solution是@HimBromBeere给我的。他给出了一个包含以下链接的答案。
cookcomputing.com/blog/archives/00577.html。在这里您可以覆盖编码参数。这对我很有效。
默认情况下,XML保存方法将在保存Xdocument时覆盖我们通过XDeclaration提供的编码方法。最简单的方法是创建一个内存流并修补编码方法。参考以下代码片段
public static void PatchEncoding(string xmlPath, XDocument xmlDoc, string encoding = "windows-1251")
{
using (var stream = new MemoryStream())
using (XmlTextWriter xmlwriter = new XmlTextWriter(stream, Encoding.GetEncoding(encoding)))
{
xmlDoc.Save(xmlPath);
}
}