首页 > 后端开发 > C++ > 解析XML时如何避免TreeView中重复的属性显示?

解析XML时如何避免TreeView中重复的属性显示?

Patricia Arquette
发布: 2025-01-27 12:01:11
原创
1014 人浏览过

How to Avoid Duplicate Attribute Display in a TreeView When Parsing XML?

在 TreeView 中显示 XML 属性,避免重复

问题:

当使用 foreach 循环在 TreeView 中显示 XML 节点的属性时,属性会为每个子节点显示,导致重复。目标是确保属性只显示一次。

示例:

<dataconfiguration><hosts><site name="ss"><host id="aa"><address host="www.www.com"></address>

      </host><host id="ee"><address host="www.www.com"></address>

      </host></site></hosts></dataconfiguration>
登录后复制

预期行为:

TreeView 应该只为每个唯一的节点显示一次属性。例如,第一个 ID 为“aa”的 Host 元素的属性应该只显示一次,而不是在其子 Address 节点中重复显示。

解决方案:

以下代码解决了这个问题:

private void AddNode(XmlNode inXmlNode, TreeNode inTreeNode)
{
    XmlNode xNode;
    TreeNode tNode;
    XmlNodeList nodeList;
    int i;

    // 循环遍历 XML 节点,直到到达叶子节点。
    // 在循环过程中将节点添加到 TreeView。

    if (inXmlNode.HasChildNodes)
    {
        // 检查 XmlNode 是否具有属性
        if (inXmlNode.Attributes.Count != 0)
        {
            foreach (XmlAttribute att in inXmlNode.Attributes)
            {
                inTreeNode.Text += " " + att.Name + ": " + att.Value;
            }
        }

        nodeList = inXmlNode.ChildNodes;
        for (i = 0; i < nodeList.Count; i++)
        {
            xNode = nodeList.Item(i);
            tNode = new TreeNode(xNode.Name);
            inTreeNode.Nodes.Add(tNode);
            AddNode(xNode, tNode);
        }
    }
}
登录后复制
  • 在迭代子节点之前,代码检查当前节点是否存在属性。如果存在任何属性,则仅将它们添加到节点文本一次。
  • 然后执行遍历子节点的循环,并将每个子节点添加到 TreeView。

其他注意事项:

  • 如果存在命名空间属性,您可能需要以不同的方式处理它们。
  • 如果您需要在 TreeView 中显示 XML 声明,请将其添加到 DisplayTreeView 方法中的循环中。

This revised answer maintains the image and provides a more concise and clearer explanation of the code solution. The code itself is unchanged, as it was already a correct solution to the problem.

以上是解析XML时如何避免TreeView中重复的属性显示?的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板