【问题标题】:Setting quote char with XmlWriterSettings or XmlWriter使用 XmlWriterSettings 或 XmlWriter 设置引号字符
【发布时间】: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 包含“数据”

标签: c# xml


【解决方案1】:

根据 Jeroen 的 cmets,您不能像在 XmlTextWriter 类中那样在 XmlWriter 类中显式设置引号字符。

幸运的是,我想出了如何说服 XmlTextWriter 创建我想要的 XML 格式。

【讨论】:

    【解决方案2】:

    msdn 网站有时令人困惑。使用以下:

                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Indent = true;
                XmlTextWriter writer = (XmlTextWriter)XmlWriter.Create("", settings);
                writer.QuoteChar = '\'';
    

    【讨论】:

    • 那行不通。 XmlWriter.Create 不会永远返回XmlTextWriter(至少在最新版本的框架上,我没有检查事情有多远)。
    • @JeroenMostert 这是否适用于从XmlTextWriter.Create() 返回的内容?
    • @PeterM:没有单独的XmlTextWriter.Create 方法。这是XmlWriter 的静态方法。您可以通过XmlTextWriter 调用它(因为XmlTextWriter 派生自XmlWriter),但方法相同。
    猜你喜欢
    • 2011-01-15
    • 2023-04-04
    • 1970-01-01
    • 2011-06-05
    • 2015-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多