Замените OuterXml ИЛИ сгенерируйте нужную строку из InnerXml

У меня есть пользовательский интерфейс, который использует DataGridView для отображения содержимого файлов XML.

Если XmlNode содержит только InnerText, это довольно просто, однако у меня проблема с узлами, которые содержат дочерние узлы (а не только строку).

просто

<node>value</node>

Отображается как "значение" в DataGridViewCell.

Сложный

<node>
    <foo>bar</foo>
    <foo2>bar</foo2>
</node> 

Проблема в том, что код InnerXml не предназначен и его очень сложно изменить в пользовательском интерфейсе.

Я попытался использовать XmlTextWriter, чтобы "украсить" строку - он работает довольно хорошо, однако требует XmlNode (включает в себя узел, а не только дочерние узлы), и я не могу назначить его обратно InnerXml.

Я хотел бы видеть следующее в пользовательском интерфейсе:

<foo>bar</foo>
<foo2>bar</foo2>

(это может быть назначено InnerXml впоследствии)

Или же

<node>
    <foo>bar</foo>
    <foo2>bar</foo2>
</node> 

(и найдите способ, как заменить OuterXml этой строкой).

Спасибо за любые идеи, Мартин

1 ответ

Вы можете загрузить OuterXml в XElementзатем используйте String.Join() объединить все дочерние элементы корневого узла (с другой InnerXml) разделены переводом строки, например:

XElement e = e.Parse(something.OuterXml);
var result = string.Join(
                          Environment.NewLine, 
                          e.Elements().Select(o => o.ToString())
                        );
Другие вопросы по тегам