كيفية عرض treenodes قبل العقد ملزم في treeview إلى العقد وثيقة XML

StackOverflow https://stackoverflow.com/questions/602495

  •  03-07-2019
  •  | 
  •  

سؤال

ولدي تريفيف حيث على اختيار عقدة الصفات والقيم وليتم عرضها في مربع القائمة.
في treeView1_AfterSelect، يعتمد توزيع التعليمات البرمجية النص على تمثيل نصية للعقدة في عرض شجرة، والتي يمكن تغييرها في أي وقت وكسر كل منطق عرض القائمة. ينبغي القضاء على هذه التبعية القوية بين عرض شجرة وعرض القائمة حسب العقد ملزمة في treeview إلى العقد وثيقة XML، بحيث يمكن استخدام بيانات XML الخام لعرض النص في list.What أن أكتب هنا؟

private static void AddingNodesToTree(XmlNode xmlNode,TreeNode tnode)  
        {  
            //Adding nodes to tree while looping through the entire XML file  
            if (xmlNode.HasChildNodes)  
            {  
                XmlNodeList nodeList = xmlNode.ChildNodes;                 
                for (int i = 0; i <= nodeList.Count - 1; i++)  
                {  
                    XmlNode xmladdtreeNode = xmlNode.ChildNodes[i];  
                    String nodetype = "" + xmladdtreeNode.NodeType;  
                    if (nodetype.Equals("Text") || nodetype.Equals("Comment"))    
                    {  
                    tnode.Nodes.Add(new TreeNode(xmladdtreeNode.InnerText));           
                    }  
                    else                                                    
                    {  
                        String name = "<" + xmladdtreeNode.Name;  
                        XmlAttributeCollection attCol = xmladdtreeNode.Attributes; 
                        foreach (XmlAttribute xmlatt in attCol)  
                        {  
                        name += " " + xmlatt.Name + "=\"" + xmlatt.Value + "\"";  
                        }  
                        name +=  ">";  
                        TreeNode tn = new TreeNode(xmladdtreeNode.Name);  
                        tn.Text = name;  
                        tnode.Nodes.Add(tn);  
                        TreeNode treeNode = tnode.Nodes[i];  
                        AddingNodesToTree(xmladdtreeNode,treeNode);   
                        }  
                }//for  
            }//if  
          else 
            {  
                tnode.Text = xmlNode.OuterXml.Trim();
            }//else   
        }//AddingNodesToTree  
        //To show Attributes and values of selected Nodes.  
        private void treeView1_AfterSelect(object sender,TreeViewEventArgs e)  
        {  
            TreeNode treenode = e.Node;   //Node selected in Treeview            
            String text = treenode.Text;  
            String relevent = text;  
            Boolean flag = true;  
            while (flag)  
            {  
                int SpaceIndex = relevent.IndexOf(" ");  
                if (SpaceIndex != -1)  
                {  
                    int indexofEqual = relevent.IndexOf('=', SpaceIndex);  
                    if (indexofEqual != -1)  
                    {  
                        int indexOFValue = relevent.IndexOf("\"", indexofEqual + 2);  
                        if (indexOFValue != -1)  
                        {  
  String attribute = relevent.Substring(SpaceIndex + 1, indexofEqual - SpaceIndex - 1);   
  String value = relevent.Substring(indexofEqual + 2, indexOFValue - indexofEqual - 2);   
  listBox1.Items.Add("Attribute : " + attribute + "   Value : " + value);                 
                            relevent = relevent.Substring(indexOFValue);
                        }
                        else
                        {
                         listBox1.Items.Add("Bad format of the xml file for this node");
                         flag = false;
                        }
                    }
                    else
                    {
                        flag = false;
                    }
                }
                else
                {
                    flag = false;
                }
            }
        }//AfterSelect()

والشكر ....

هل كانت مفيدة؟

المحلول

إذا فهمت السؤال بشكل صحيح كنت ترغب في الحصول على العودة إلى XmlNode عند تحديد TreeNode. الحل المعتاد هو لتخزين XmlNode في خاصية العلامات:

TreeNode tn = new TreeNode();  
tn.Text = name;  
tn.Tag = xmladdtreeNode;

ووفي AfterSelect

TreeNode treenode = e.Node; 
XmlNode xmlNode = (XmlNode) treeNode.Tag;

نصائح أخرى

وحاولت ذلك ولكن حصلت على NullRefrenceException في هذا الخط على foreach (XmlAttribute xmlatt في attCol) على attcol

وهذا هو رمز كنت قد كتبت ..

private void treeView1_AfterSelect(object sender, System.Windows.Forms.TreeViewEventArgs e)
    {
        listBox1.Items.Clear();
        XmlNode xNode = e.Node.Tag as XmlNode;
        XmlAttributeCollection attCol = xNode.Attributes; 
        foreach (XmlAttribute xmlatt in attCol)
        {
            listBox1.Items.Add(xmlatt.Name);
            listBox1.Items.Add(xmlatt.Value);

        }
    } //AfterSelect()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top