gpt4 book ai didi

c# - XDocument 到字符串 : How to omit encoding in declaration?

转载 作者:太空狗 更新时间:2023-10-29 22:28:02 27 4
gpt4 key购买 nike

我正在为脑残的企业 XML API 编写包装器。我有一个需要转换为字符串的 XDocument。由于他们的 XML 解析器非常挑剔,甚至无法处理 XML 节点之间的空格,因此文档声明必须完全正确:

<?xml version="1.0"?>

但是,XDocument.Save() 方法总是在该声明中添加一个编码属性:

<?xml version="1.0" encoding="utf-16"?>

过去一小时在 Google 和 Stack 上寻找生成 XML 字符串的最佳方法,我能做的最好的是:

string result = xmlStringBuilder.ToString().Replace(@"encoding=""utf-16"", string.Empty));

我试过了

xdoc.Declaration = new XDeclaration("1.0", null, null);

这确实成功地按照我想要的方式在 XDocument 中设置了声明;然而,当我调用 Save() 方法时,编码属性会神奇地返回到那里,无论我走什么路线(使用 TextWriter、添加 XmlWriterSettings 等)。

有没有人有更好的方法来做到这一点,或者我的代码永远注定要在可怕的字符串替换上方的评论中有一段咆哮?

最佳答案

好吧,接收端应该被固定为使用 XML 解析器,而不是破坏 XML 语法的东西,但如果你想在发布时使用 XML 声明创建一个字符串,那么使用 .NET 以下方法对我有用:

public class MyStringWriter : StringWriter
{
public override Encoding Encoding
{
get
{
return null;
}
}
}

然后

    XDocument doc = new XDocument(
new XDeclaration("1.0", null, null),
new XElement("root", "test")
);

string xml;

using (StringWriter msw = new MyStringWriter())
{
doc.Save(msw);
xml = msw.ToString();
}

Console.WriteLine(xml);

输出

<?xml version="1.0"?>
<root>test</root>

关于c# - XDocument 到字符串 : How to omit encoding in declaration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7983953/

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