替换OuterXml或从InnerXml生成预期的字符串

本文关键字:字符串 OuterXml 或从 InnerXml 替换 | 更新日期: 2023-09-27 18:16:53

我有一个使用DataGridView来显示XML文件内容的UI。

如果XmlNode只包含InnerText,那就很简单了,但是我遇到了包含子节点(而不仅仅是字符串)的节点的问题。

简单

<node>value</node>

在DataGridViewCell中显示为"value"。

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

问题是InnerXml代码不是有意的,而且很难在UI中修改。

我尝试使用xmltextwwriter来"美化"字符串-它工作得很好,但是需要XmlNode(包括节点,而不仅仅是子节点),我不能将其分配回InnerXml。

我希望在UI中看到以下内容:

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

(可以稍后赋值给InnerXml)

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

(并找到如何用该字符串替换OuterXml的方法)。

谢谢你的建议。马丁

替换OuterXml或从InnerXml生成预期的字符串

您可以将OuterXml加载到XElement,然后使用String.Join()连接以换行符分隔的根节点的所有子元素(从其他角度来看,是InnerXml),例如:

XElement e = e.Parse(something.OuterXml);
var result = string.Join(
                          Environment.NewLine, 
                          e.Elements().Select(o => o.ToString())
                        );