2016-03-25 21 views
0

Bir XElement nesnesinin içeriğini nasıl biçimlendirebilirim?Biçim XElement nesnesi

Çıkış dizesinin .ToString() öğesini çağırırken otomatik olarak biçimlendirildiğini biliyorum, ancak nesneleri düğüm haline dönüştürmeden önce boşluk düğümlerini eklemek istiyorum.

Amaç, Microsoft.VisualStudio.XmlEditor sınıfları tarafından oluşturulan modeldeki XML düğümlerini biçimlendirmektir. (Xtext olarak depolanır) alt öğesi olarak

+0

bize kodunuzu gösterebilir: evrensel biçimlendirme (herhangi bir xml) ait

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

Örnek? – J3soon

+1

Ne diyorsunuz * beyaz boşluklar *? –

+0

XTablonu, içerik olarak boşluk ile birlikte. – TWT

cevap

2

Ekleme metni:

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

Beyaz boşlukları yerine, XElement nesnelerine beyaz boşluk eklemek istiyorum. – TWT

+0

xelement, whitespaces'ı saklamıyor. bu bir ip değil. etiketin içeriğini (<> ... içinde), özniteliklerin içeriğini depolar, ancak <> önce veya sonra bir içerik depolar. lütfen, olumsuz bir itibar vermeyin. teşekkürler) –

+0

sadece xelement üzerinde F12 tuşuna basın ve beyan görünün. Adı, Değer özellikleri, Attributes() yöntemine sahiptir. Whitespace özelliği yok. –