【发布时间】:2017-11-10 14:48:42
【问题描述】:
我目前有一些直接实例化XmlTextWriter 对象的代码,它允许我将quote char 设置为单引号(我需要它来生成XML 以匹配遗留系统)。 EG
var fred = new XmlTextWriter(stream, encoding);
fred.QuoteChar = '\'';
但是,在 Microsoft 的 XmlTextWriter class 文档中,他们声明:
从 .NET Framework 2.0 开始,我们建议您创建 XmlWriter 实例通过使用 XmlWriter.Create 方法和 XmlWriterSettings 类以利用新功能。
XmlWriterSettings Class 允许您设置各种属性,但引号字符不是其中之一,而且 XmlWriter 类不会像 XmlTextWriter 那样暴露引号字符。
我想移到XmlWriter,因为它还解决了我遇到的一个使用XmlTextWriter 不容易解决的缩进问题,但我仍然需要设置引号字符。
如何在XmlWriter 类中设置引号字符?
从技术上讲,这是列出的问题 Can one force XMLWriter to write elements in single quotes? 的副本。但是,如果您按照唯一答案中的链接,您将获得在 XmlTextWriter 类上设置引号字符的解决方案。与我要求做的完全相反。
【问题讨论】:
-
简而言之:你没有。使用不同引号字符的能力是
XmlTextWriter独有的。XmlWriter使用的内部实现类都没有一个选项(甚至没有内部或私有开关)。免责声明:我只在我的机器(.NET 4.7)上浏览了System.Xml的反汇编,可以想象其他版本的行为可能会有所不同。 -
@JeroenMostert 这很令人沮丧。现在我必须弄清楚如何使用
XmlTextWriter在同一行上获取空元素的结束标签 -
这有点工作,但如果您对输出有极其特殊的需求(例如,与不接受所有有效 XML 形式的遗留系统保持兼容),您可能需要考虑实现 @ 987654337@你自己。当
XmlTextWriter做你想做的事情时,你可以“大部分”环绕它,而当它不做你想做的事情时,你可以做其他事情。依靠框架类为您做这些高度具体的事情(并在新版本中继续做这些事情)似乎是不明智的。 (XmlTextWriter不是sealed,因此从它派生也是一种选择,但我不确定这能让你走多远。) -
@JeroenMostert 我的旧系统很有趣。它无法识别
<tag1 /><tag2>Data</tag2>中tag1的结尾,并认为tag1包含“数据”