2016-03-25 2 views
0

XElementオブジェクトのコンテンツをどのように書式設定できますか?フォーマットXElementオブジェクト

私は、出力文字列が.ToString()を呼び出すときに自動的にフォーマットされることを知っていますが、オブジェクトを文字列に変換する前に空白文字ノードを追加します。

目的は、Microsoft.VisualStudio.XmlEditorクラスによって生成されたモデル内のXMLノードを書式設定することです。

+0

をあなたが私たちあなたのコードを示しすることはできますか? – J3soon

+1

*空白ノード*とは何ですか? –

+0

空白をコンテンツとして持つXTextオブジェクト。 – TWT

答えて

2

は(XTEXTとして格納されている)子要素としてテキストを追加します:ユニバーサル整形(任意のXML)の

string xml = "<a><b>b</b></a>"; 
    XElement xdoc = XElement.Parse(xml); 
    var b = xdoc.Element("b"); 
    b.AddBeforeSelf(" "); 
    b.AddAfterSelf(new XText(" ")); 
    b.Add(" "); 
    b.AddFirst(" "); 
    Console.WriteLine(xdoc.ToString(SaveOptions.DisableFormatting)); 

例:

string xml = "<a><b a=\"a\"><c><d>d</d></c></b><b a=\"a\"><c><d>d</d></c></b><e b=\"b\" a=\"a\"><f>f</f></e></a>"; 
    XElement xdoc = XElement.Parse(xml); 
    Format(xdoc, 0); 
    Console.WriteLine(xdoc.ToString(SaveOptions.DisableFormatting)); 

    static void Format(XElement x, int level) 
    { 
     foreach (var x1 in x.Elements()) 
      Format(x1, level + 1); 
     if (level > 0) 
     { 
      x.AddBeforeSelf(Environment.NewLine + new string(' ', 2 * level)); 
      if (x.Parent.LastNode == x) 
      { 
       string ending = Environment.NewLine; 
       if (level > 1) 
        ending += new string(' ', 2 * (level - 1)); 
       x.AddAfterSelf(ending); 
      } 
     } 
    } 
+0

文字列の出力ではなく、XElementオブジェクト自体に空白を追加したいとします。 – TWT

+0

xelementは空白を格納しません。それは文字列ではありません。タグの内容(inside <> ...)、属性の内容は格納されますが、<>の前後の内容は格納されません。してください、否定的な評判を与えてはいけません。ありがとう) –

+0

xelementとlookの宣言でF12を押してください。 Name、Valueプロパティ、Attributes()メソッドを持ちます。 Whitespaceプロパティはありません。 –

関連する問題