4

有没有办法让换行符出现在 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 ?? "")),
4

2 回答 2

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属性进行不同的格式设置。

于 2013-03-08T21:14:33.553 回答
0

无法在 XML 对象中添加新行,因为 XML DOM 中的属性之间没有“文本节点”。每个节点的所有属性都在大无序*表中,并且没有“纯文本”属性。

只有 XML 的文本表示可以具有这样的属性格式。请注意,当此类 XML 加载到 DOM/reader 中时,属性之间的所有格式都会丢失。

您可以做的是使用您想要的格式实现您自己的 XmlWriter。

*) 大多数 XML DOM 实现保持属性的顺序与源或添加它们的顺序相同,但没有要求这样做。

于 2013-03-08T21:11:08.317 回答