【发布时间】:2011-11-03 00:52:05
【问题描述】:
我正在为一个脑残的企业 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 等),编码属性都会神奇地返回那里。
有没有人有更好的方法来做到这一点,还是我的代码永远注定要在可怕的字符串替换上方的 cmets 中有一段咆哮?
【问题讨论】:
标签: c# asp.net linq-to-xml