如何在字符串数组中存储xml节点的属性?(重构)

时间:2009-03-12 12:44:30

标签: xml winforms

how can i store the attributes of an xml node in an array of strings的副本,您应该修改原始问题。

我是新手,所以我正在重新提出先问的问题。我有一个项目,我的xmldoc是在XmlDocument类的帮助下创建的,然后在xmldoc.Load()方法的帮助下加载。在addnodes()方法的帮助下,我将节点添加到树中,因此它显示在winform中。现在当我点击树视图中的xmlnode时,它的属性会显示在列表框中。现在我已经将整个逻辑划分为UI和后端部分。现在我想要的是我的后端类包含显示单击的xml节点的属性(名称和值)的方法,这些方法存储在数组中,并作为字符串返回到treev_AfterSelect事件中的前端类。我该怎么办?我需要存储节点的属性我点击字符串数组中的winform并显示在列表框中。如何做?

2 个答案:

答案 0 :(得分:1)

这可能会使用更多细节,但我会冒险猜测:

您在TreeNode的Tag属性中保存XmlElement,对吗?然后,您希望从AfterSelect事件的Tag中获取该XmlElement,并将其传递给将返回IEnumerable属性(和值?)的方法。

这很简单,我将把细节留作“练习”,但只需循环遍历element.Attributes,并将每个属性名称和值添加到列表中。如果您愿意,可将它们格式化为“name = value”。然后,只需返回列表。

答案 1 :(得分:1)

我通过痛苦的经历发现使用Tag属性构建了脆弱的解决方案。将TreeNode映射到XmlElement的类型安全方法是创建Dictionary<TreeNode, XmlElement>。首先,它比使用Tag属性更难,但它使关联非常明确。 (我昨天刚刚修复了一个代码保存密钥到Tag属性中的对象的错误,而另一个代码期望Tag包含对象本身。)

因此,AfterSelect事件中的代码如下所示:

TreeNode n = sender as TreeNode;
if (n != null)
{
   string[] result = TreeNodeMap[n].Attributes
      .Select(x => x.Name + "=" + x.Value)
      .ToArray();
}