c# - 具有自定义格式的 XML 编写器

标签 c# xml formatting

我需要创建一个人类可读的 XML 文件。 XmlWriter 似乎对此几乎是完美的,但我想插入换行符,或者通常在我想要的地方插入自定义空格。都不是WriteRaw也不WriteWhitespace似乎在元素的属性之间起作用。后者看起来应该可以工作(此方法用于手动格式化您的文档),但会抛出 InvalidOperationException(状态元素内容中的 token StartAttribute 会导致无效的 XML 文档)如果用于代替下面的注释。

XmlWriter 或支持此功能的第三方 XML 库是否有解决方法?

示例代码(LINQPad 语句就绪):

var sb = new StringBuilder();
var settings = new XmlWriterSettings {
    OmitXmlDeclaration = true,
    Indent = true,
    IndentChars = "  ",
};
using (var writer = XmlWriter.Create(sb, settings)) {
    writer.WriteStartElement("X");
    writer.WriteAttributeString("A", "1");
    // write line break
    writer.WriteAttributeString("B", "2");
    // write line break
    writer.WriteAttributeString("C", "3");
    writer.WriteEndElement();
}
Console.WriteLine(sb.ToString());

实际结果:

<X A="1" B="2" C="3" />

期望的结果(B 和 C 可能不与 A 对齐 - 没关系,/> 可以留在与 C 的行上):

<X A="1"
   B="2"
   C="3"
/>

最佳答案

您仍然有后台 StringBuilder - 使用它。 :

  var sb = new StringBuilder();
  var settings = new XmlWriterSettings {
    OmitXmlDeclaration = true,
    Indent = true,
    IndentChars = "  ",
  };
  using (var writer = XmlWriter.Create(sb, settings)) {
    writer.WriteStartElement("X");
    writer.WriteAttributeString("A", "1");
    writer.Flush();
    sb.Append("\r\n");
    writer.WriteAttributeString("B", "2");
    writer.Flush();
    sb.Append("\r\n");
    writer.WriteAttributeString("C", "3");
    writer.WriteEndElement();
  }
  Console.WriteLine(sb.ToString());

关于c# - 具有自定义格式的 XML 编写器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24009770/

相关文章:

java - Hibernate over JPA 配置 xml 文件

python - Flake8 禁用所有格式规则

regex - 删除 Notepad++ 中的第一列

c# WPF判断DataGrid默认可视化验证是否有错

c# - 出现错误 -2147220472(无法启动 Quickbooks)

c# - 用于将IQueryable <T>和IEnumerable <T>转换为ReadOnlyCollection <T>的扩展方法

xml - Flex e4x - 通过多个属性选择

android - Xml布局在改变方向时发生变化

ruby - 平整输出中的打印符号

c# - 检查字符串输入的内容