我需要创建一个人类可读的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对齐 - 很好,/&gt;可以留在C行上):
<X A="1"
B="2"
C="3"
/>
答案 0 :(得分:5)
你仍然有后台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());