【问题标题】:Creating child node to the current node in xml treeview C#在xml treeview C#中为当前节点创建子节点
【发布时间】:2016-03-13 09:59:25
【问题描述】:

我有两个 XML 文件,然后在 Visual Studio C# 中以 treeview 格式显示。在treeviews 中,根和第一个孩子是相同的。让它显示为:

root
    child1
       children1
       children1
       children1
       children1
       children1

对于第二个树视图,我有:

root
    child1
       children2
       children2
       children2
       children2
       children2

现在我比较children 级别的两个树视图。如果它们的名称相同,那么我会留下它们,否则我想创建一个虚拟节点/子节点,但不知道如何。我写了这段代码,但它添加到root 节点而不是添加到child 节点

        XmlDocument docXml1 = new XmlDocument();
        docXml1.Load(xmlfile1);
        XmlDocument docXml2 = new XmlDocument();
        docXml2.Load(xmlfile2);
        XmlNodeList actions1 = root1.SelectNodes("/root/child1/children1");
        XmlNodeList actions2 = root2.SelectNodes("/root/child1/children2");

         if (Name_of_children1 != Name_of_children2)
            {
                var VirtualNode = "";
                treeView1.Nodes.Add(VirtualNode.Trim());                    
            }

当然会删除很多代码行以使其简短。

【问题讨论】:

  • 显示用于将 xml 节点添加到树视图的代码

标签: c# .net xml treeview


【解决方案1】:

这是一个完整的例子:

TestForm.cs:

public partial class TestForm : Form
{
    public TestForm()
    {
        InitializeComponent();
        this.Load += Test_Load;
    }

    private void Test_Load(object sender, EventArgs e)
    {
        try
        {
            XmlDocument doc1 = new XmlDocument();
            doc1.Load("file1.xml");
            XmlDocument doc2 = new XmlDocument();
            doc2.Load("file2.xml");

            trvLeft.Nodes.Clear();
            trvRight.Nodes.Clear();
            trvLeft.Nodes.Add(new TreeNode("File 1"));
            trvRight.Nodes.Add(new TreeNode("File 2"));
            TreeNode tlNode = new TreeNode();
            TreeNode trNode = new TreeNode();
            tlNode = trvLeft.Nodes[0];
            trNode = trvRight.Nodes[0];
            AddNode(doc1.DocumentElement, doc2.DocumentElement, tlNode, trNode);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }


        var childrensLeft = trvLeft.Nodes[0].Nodes[0].Nodes;
        var childrensRight = trvRight.Nodes[0].Nodes[0].Nodes;
        for (int i = 0; i < Math.Min(childrensLeft.Count, childrensRight.Count); i++)
        {
            if (childrensRight[i].Text != childrensLeft[i].Text)
            {
                //childrensLeft[i].ForeColor = Color.Red;
                //childrensRight[i].ForeColor = Color.Red;
                childrensLeft[i].Nodes.Add("Something to left");
                childrensRight[i].Nodes.Add("Something to right");
            }
        }
        trvLeft.ExpandAll();
        trvRight.ExpandAll();
    }
    private void AddNode(XmlNode leftXmlNode, XmlNode rightXmlNode, TreeNode leftNode, TreeNode rightNode)
    {
        //XmlNode xNode;
        TreeNode tlNode;
        TreeNode trNode;
        XmlNodeList lnodeList;
        XmlNodeList rnodeList;
        int i;

        if (leftXmlNode.HasChildNodes && rightXmlNode.HasChildNodes)
        {
            lnodeList = leftXmlNode.ChildNodes;
            rnodeList = rightXmlNode.ChildNodes;
            for (i = 0; i <= Math.Min(lnodeList.Count, rnodeList.Count) - 1; i++)
            {
                var lNode = leftXmlNode.ChildNodes[i];
                var rNode = rightXmlNode.ChildNodes[i];
                leftNode.Nodes.Add(new TreeNode(lNode.Name));
                tlNode = leftNode.Nodes[i];
                rightNode.Nodes.Add(new TreeNode(rNode.Name));
                trNode = rightNode.Nodes[i];
                AddNode(lNode, rNode, tlNode, trNode);
            }
        }
        else
        {
            leftNode.Text = (leftXmlNode.OuterXml).Trim();
            rightNode.Text = (rightXmlNode.OuterXml).Trim();
        }
    }
}

file1.xml

<root>
    <child1>
        <children1/>
        <children1/>
        <children1/>
        <children1/>
        <children1/>
        <children1/>
    </child1>
</root>

file2.xml

<root>
    <child1>
        <children1/>
        <children2/>
        <children1/>
        <children1/>
        <children1/>
        <children1/>
    </child1>
</root>

结果:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 1970-01-01
    • 2015-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多