在XElement.ToString结果中的XAttributes之间输入换行符/回车符

时间:2013-03-08 20:51:20

标签: c# .net xelement

是否无法在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 ?? "")),

2 个答案:

答案 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实现都按照源或顺序添加属性顺序,但没有要求这样做。