具有自定义格式的XML编写器
本文关键字:XML 自定义 格式 | 更新日期: 2023-09-27 18:06:27
我需要创建一个人类可读的XML文件。XmlWriter在这方面似乎几乎是完美的,但是我想在需要的地方插入换行符,或者通常是自定义空白。WriteRaw和WriteWhitespace似乎都不能在元素的属性之间工作。后者看起来应该可以工作(此方法用于手动格式化文档),但是如果使用InvalidOperationException
(Token StartAttribute in state Element Content将导致无效的XML文档)来代替下面的注释。
是否有XmlWriter或支持此功能的第三方XML库的解决方案?
示例代码(LINQPad-statements ready):
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());