2016-03-25 3 views
0

Как я могу отформатировать содержимое объекта XElement?Формат Объект XElement

Я знаю, что строка вывода автоматически форматируется при вызове .ToString(), но я хочу добавить узлы пробелов перед преобразованием объектов в строку.

Цель состоит в форматировании узлов XML в модели, созданной классами Microsoft.VisualStudio.XmlEditor.

+0

Можете ли вы показать нам свой код? – J3soon

+1

Что вы называете * пробельными узлами *? –

+0

Объекты XText с пробелом как содержимое. – TWT

ответ

2

Добавить текст в качестве дочернего элемента (хранится в XText):

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

Пример универсального форматированием (любой XML):

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 не хранит пробелы. это не строка. он хранит содержимое тега (внутри <> ...), содержимое атрибутов, но не содержимое до или после <>. пожалуйста, не давайте отрицательную репутацию. спасибо) –

+0

просто нажмите F12 на xelement и посмотрите объявление. Он имеет свойства Name, Value, Attributes(). Не существует свойства Whitespace. –

 Смежные вопросы

  • Нет связанных вопросов^_^