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 DOM には属性間に「テキスト ノード」がないため、XML オブジェクト内に改行を入れる方法はありません。各ノードのすべての属性は大きな unordered* テーブルにあり、「テキストのみ」の属性はありません。

XML のテキスト表現だけが、このような属性のフォーマットを持つことができます。そのような XML が DOM/reader にロードされると、属性間のすべてのフォーマットが失われることに注意してください。

できることは、必要なフォーマットで独自の XmlWriter を実装することです。

*) ほとんどの XML DOM 実装は、属性の順序をソースまたは追加順に維持しますが、そうする必要はありません。

于 2013-03-08T21:11:08.317 に答える