Замените 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())
);