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

本文关键字:回车 ToString 结果 换行 输入 XElement 中的 xattribute 之间 | 更新日期: 2023-09-27 18:03:07

是否没有办法在XElement的属性之间出现换行符?生成的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 ?? "")),

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

您可以使用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属性来设置不同的格式

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

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

你可以用你想要的格式实现你自己的XmlWriter。

*)大多数XML DOM实现保持属性在源中的顺序或它们被添加的顺序,但没有必要这样做。