我需要创建一个人类可读的 XML 文件。 XmlWriter 似乎对此几乎是完美的,但我想在我想要的地方插入换行符或一般情况下的自定义空白。两者都不WriteRaw http://msdn.microsoft.com/library/0755ytay.aspx nor 写入空白 http://msdn.microsoft.com/library/system.xml.xmlwriter.writewhitespace.aspx似乎在元素中的属性之间起作用。后者看起来应该可以工作(此方法用于手动格式化您的文档),但抛出InvalidOperationException
(状态元素内容中的令牌 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());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)