【问题标题】:Replace OuterXml OR generate intended string from InnerXml替换 OuterXml 或从 InnerXml 生成预期的字符串
【发布时间】:2014-08-07 16:00:56
【问题描述】:

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

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

简单

<node>value</node>

在 DataGridViewCell 中显示为“值”。

复杂

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

问题在于 InnerXml 代码不是预期的,并且很难在 UI 中进行修改。

我尝试使用 XmlTextWriter 来“美化”字符串 - 它工作得很好,但是需要一个 XmlNode(包括节点,不仅包括子节点)而且我无法将它分配回 InnerXml。

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

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

(之后可以赋值给InnerXml)

或者

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

(并找到一种方法如何用这个字符串替换 OuterXml)。

感谢您的任何想法, 马丁

【问题讨论】:

  • 如何将 xml 分配给 DataGridView? node 是您 xml 的元素根吗?
  • 您好 Sergey,我将 InnerXml(可以是 XML 的简单值)作为值传递。节点不是根元素,它可以包含任何值
  • 很难说你在做什么以及你期望得到什么结果。如果您能展示一些示例 xml、将其绑定到网格的方式、您现在拥有的结果(可能是网格的屏幕截图)以及您想要的结果,那就太好了
  • 你好 Sergey,没有绑定(不幸的是结果是合并了不同的文档)。每个 DataRow 代表一个对象,每列代表一个值。该值可以是简单的字符串 value 或可以包含子元素。 XML 示例:&lt;root&gt; &lt;server&gt; &lt;name&gt;ABC&lt;/name&gt; &lt;vhds&gt; &lt;vhd&gt;1&lt;/vhd&gt; &lt;vhd&gt;2&lt;/vhd&gt; &lt;/vhds&gt; &lt;/server&gt; &lt;/root&gt; 在 DataGrid 中,它应该将 Name 显示为一列(值为 ABC),VHDs 显示为另一列(值为 12
  • 很抱歉,被取消了。那么,你有单列的 DataTable,你有一些 xml?

标签: c# xml xmltextwriter


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-07-18
    • 1970-01-01
    • 2012-10-31
    • 2015-02-22
    • 2019-08-01
    • 2020-08-18
    • 2021-06-16
    • 2016-08-16
    • 2012-06-17
    相关资源
    最近更新 更多