Enter line-breaks / carriage returns between the XAttributes in a XElement.ToString result

.net, c#, xelement

Solution

You can do it using a `XmlWriter`. Try this:

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

then

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());

produces this:

<options
  updated="U"
  color="C"
  puppies="P"
  isTrue="I"
  kitties="K" />

You can have different formatting using the various `XmlWriterSettings` properties.

Problem

Is there no way to get line-breaks to appear between attributes in the XElement.ToString resultant xml string? The following didn't work -- it kept the line-breaks, but put them below all the attributes, so there were just 4/5 empty lines: ``` 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 ?? "")), ```

Original source