Maison >développement back-end >C++ >Comment éviter l'affichage d'attributs en double dans une arborescence lors de l'analyse XML ?

Comment éviter l'affichage d'attributs en double dans une arborescence lors de l'analyse XML ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-27 12:01:11993parcourir

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

Afficher les attributs XML dans TreeView pour éviter la duplication

Question :

Lors de l'utilisation d'une boucle foreach pour afficher les attributs d'un nœud XML dans un TreeView, les attributs sont affichés pour chaque nœud enfant, ce qui entraîne une duplication. L'objectif est de garantir que la propriété n'est affichée qu'une seule fois.

Exemple :

<code class="language-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></code>

Comportement attendu :

TreeView ne doit afficher les propriétés qu'une seule fois pour chaque nœud unique. Par exemple, les attributs du premier élément Host avec l'ID « aa » doivent être affichés une seule fois, plutôt que répétés dans ses nœuds d'adresse enfants.

Solution :

Le code suivant résout le problème :

<code class="language-csharp">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);
        }
    }
}</code>
  • Avant de parcourir les nœuds enfants, le code vérifie si l'attribut existe sur le nœud actuel. Si des attributs sont présents, ils ne sont ajoutés au texte du nœud qu'une seule fois.
  • Effectuez ensuite une boucle qui traverse les nœuds enfants et ajoute chaque nœud enfant au TreeView.

Autres notes :

  • Si des attributs d'espace de noms sont présents, vous devrez peut-être les gérer différemment.
  • Si vous devez afficher la déclaration XML dans le TreeView, ajoutez-la à la boucle dans la méthode DisplayTreeView.

Cette réponse révisée conserve l'image et fournit une explication plus concise et plus claire de la solution du code. Le code lui-même est inchangé, car il s'agissait déjà d'une solution correcte au problème.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn