是否无法在XElement.ToString生成的xml字符串中的属性之间显示换行符?
以下不起作用 - 它保留了换行符,但是将它们放在所有属性下面,所以只有4/5个空行:
new XElement("options", new XText("\r\n"),
new XAttribute("updated", Updated.XmlTime()), new XText("\r\n"),
new XAttribute("color", Color), new XText("\r\n"),
new XAttribute("puppies", Puppies), new XText("\r\n"),
new XAttribute("isTrue", IsTrue), new XText("\r\n"),
new XAttribute("kitties", Kitties ?? "")),
答案 0 :(得分:6)
您可以使用XmlWriter
来完成此操作。试试这个:
public static string ToStringFormatted(this XElement xml)
{
XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;
settings.NewLineOnAttributes = true;
StringBuilder result = new StringBuilder();
using (XmlWriter writer = XmlWriter.Create(result, settings)) {
xml.WriteTo(writer);
}
return result.ToString();
} // ToStringFormatted
然后
var xml =new XElement("options",
new XAttribute("updated", "U"),
new XAttribute("color", "C"),
new XAttribute("puppies", "P"),
new XAttribute("isTrue", "I"),
new XAttribute("kitties", "K")
);
Console.WriteLine(xml.ToStringFormatted());
产生这个:
<options
updated="U"
color="C"
puppies="P"
isTrue="I"
kitties="K" />
您可以使用各种XmlWriterSettings
属性进行不同的格式设置。
答案 1 :(得分:0)
由于XML DOM中的属性之间没有“文本节点”,因此无法在XML对象中添加新行。每个节点的所有属性都在大的无序*表中,并且没有“仅文本”属性。
只有XML的文本表示可以具有这种属性的格式。请注意,在DOM / reader中加载此类XML时,属性之间的所有格式都将丢失。
您可以做的是使用您想要的格式实现您自己的XmlWriter。
*)大多数XML DOM实现都按照源或顺序添加属性顺序,但没有要求这样做。