使用xml文件填充树视图

时间:2010-05-05 07:04:32

标签: c#

我正在使用.net windows表单应用程序。我有一个xml文件。我想用xml文件中的数据填充树视图。我正在使用以下代码执行此操作。

private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            this.Cursor = System.Windows.Forms.Cursors.WaitCursor;

           //string strXPath = "languages";
            string strRootNode = "Treeview Sample";

            OpenFileDialog Dlg = new OpenFileDialog();
        Dlg.Filter = "All files(*.*)|*.*|xml file (*.xml)|*.txt";
        Dlg.CheckFileExists = true;
        string xmlfilename = "";


        if (Dlg.ShowDialog() == DialogResult.OK)
        {
            xmlfilename = Dlg.FileName;

        }



            // Load the XML file.
            //XmlDocument dom = new XmlDocument();
            //dom.Load(xmlfilename);

            XmlDocument doc = new XmlDocument();
            doc.Load(xmlfilename);
            string rootName = doc.SelectSingleNode("/*").Name;
            textBox4.Text = rootName.ToString();
            //XmlNode root = dom.LastChild;
            //textBox4.Text = root.Name.ToString();


            // Load the XML into the TreeView.
            this.treeView1.Nodes.Clear();
            this.treeView1.Nodes.Add(new TreeNode(strRootNode));
            TreeNode tNode = new TreeNode();
            tNode = this.treeView1.Nodes[0];

            XmlNodeList oNodes = doc.SelectNodes(textBox4.Text);
            XmlNode xNode = oNodes.Item(0).ParentNode;

            AddNode(ref xNode, ref tNode);

            this.treeView1.CollapseAll();
            this.treeView1.Nodes[0].Expand();
            this.Cursor = System.Windows.Forms.Cursors.Default;
        }

        catch (Exception ex)
        {
            this.Cursor = System.Windows.Forms.Cursors.Default;
            MessageBox.Show(ex.Message, "Error");
        }  
    }
    private void AddNode(ref XmlNode inXmlNode, ref TreeNode inTreeNode)
    {
        // Recursive routine to walk the XML DOM and add its nodes to a TreeView.
        XmlNode xNode;
        TreeNode tNode;
        XmlNodeList nodeList;
        int i;

        // Loop through the XML nodes until the leaf is reached.
        // Add the nodes to the TreeView during the looping process.
        if (inXmlNode.HasChildNodes)
        {
            nodeList = inXmlNode.ChildNodes;
            for (i = 0; i <= nodeList.Count - 1; i++)
            {
                xNode = inXmlNode.ChildNodes[i];
                inTreeNode.Nodes.Add(new TreeNode(xNode.Name));
                tNode = inTreeNode.Nodes[i];
                AddNode(ref xNode, ref tNode);
            }
        }
        else
        {
            inTreeNode.Text = inXmlNode.OuterXml.Trim();
        }
    }

我的xml文件是这样的:“hello.xml”

<?xml version="1.0" encoding="utf-8" ?>
<languages>
  <language>
    <key>abc</key>
    <value>hello how ru</value>
  </language>
  <language>
    <key>def</key>
    <value>i m fine</value>
  </language>
  <language>
    <key>ghi</key>
    <value>how abt u</value>
  </language>
</languages>

现在使用上面的代码后,我可以填充树视图了。但我不喜欢填充完整的xml文件。我应该只到

languages
    language
       key
       value

我不想要

abc
how are you 
etc..... 

我的意思是说叶子节点。请帮帮我

1 个答案:

答案 0 :(得分:1)

如果我理解正确的话,你不想添加的是节点的文本内容;然后,您可以检查XmlNode类的NodeType属性,如:

xNode = inXmlNode.ChildNodes[i];
if (xNode.NodeType != XmlNodeType.Text) { 
    inTreeNode.Nodes.Add(new TreeNode(xNode.Name));
    tNode = inTreeNode.Nodes[i];
    AddNode(ref xNode, ref tNode);
}