【发布时间】:2014-07-23 11:17:15
【问题描述】:
我需要创建一个人类可读的 XML 文件。 XmlWriter 似乎对此几乎是完美的,但我想在我想要的地方插入换行符,或者一般来说,自定义空格。 WriteRaw 和 WriteWhitespace 似乎都不能在元素的属性之间工作。后者看起来应该可以工作(此方法用于手动格式化文档),但会抛出 InvalidOperationException(状态元素内容中的令牌 StartAttribute 会导致 XML 文档无效 em>) 如果用于代替下面的 cmets。
是否有针对 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"
/>
【问题讨论】:
-
human-readable XML file: 闻起来像规格蠕变! -
@Rawling,忘了提 - 我不希望它们都在新行上,只是在上下文中有意义的地方(即仅手动添加)
-
哦,我明白你的意思了! (只是没有及时避免将我的评论变成答案......)
标签: c# xml formatting