gpt4 book ai didi

c# - 为什么XDeclaration会忽略我设置的编码参数

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:48 25 4
gpt4 key购买 nike

问题

我正在尝试使用 XDeclaration 生成一个 XML 文件这应该导致以下结果

<?xml version="1.0"?> .

当我运行我的代码时,我不断得到的是这个

<?xml version="1.0" encoding="utf-8"?> .

所以问题是,无论我如何更改 XDeclaration 的编码参数它一直在我的声明中添加编码标签。

我的问题

我想要的有可能吗?如果可以,有人可以向我解释一下吗?

我尝试过的

首先我尝试设置 OmitXmlDeclaration为真。但这完全删除了我的声明,然后我根本无法使用 XDecleration 类..

其次,当我将我的 XDecleration 设置为:

new XDeclaration("1.0", string.Empty, "yes")

我明白了

<?xml version="1.0" encoding="utf-8" standalone="yes"?>

当我将我的 XDecleration 设置为:

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");
}
}

编辑

@HimBromBeere 给我的解决方案。他给出了包含以下链接的答案。

cookcomputing.com/blog/archives/000577.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);
}
}

关于c# - 为什么XDeclaration会忽略我设置的编码参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26890573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com