加载XML文档并在树视图中显示它

时间:2009-03-03 07:15:53

标签: c# xml winforms

我必须加载一个Xml文档并在winform的树视图中显示。这是一段代码。请告诉我们错误。

private void AddingNodesToTree(ref XmlNode xnode, ref TreeNode tnode)
{ 
    TreeNode subNode = treeNodes.Add(xnode.Name);
    subNode.Tag = xnode;
    foreach (XmlNode subElement in xnode.ChildNodes)
    {
        AddingNodesToTree(subNode.Nodes, subElement);
    }
}

之后我在该树中选择节点以显示所选节点的属性:

private void treeView1_AfterSelect(object sender, TreeViewEventArgs e)
{
    XmlNode xNode = e.Node.Tag as XmlNode;

    if (xNode != null)
    {
        foreach (XmlNode subNode in xNode.ChildNodes)
        {
            listBox1.Items.Add(subNode.Name);
        }
    }
}

此代码中可能出现的错误是什么?请纠正。

3 个答案:

答案 0 :(得分:1)

一方面,在您对AddingNodesToTree的递归调用中,您没有在参数上指定ref。尽管如此,他们还不清楚为什么他们会参与这些参数。您对递归调用的参数似乎也是错误的类型。是实际上是一个递归调用,还是你调用了一个你没有显示的重载?

第二个明显的问题是您没有在tnode中使用AddingNodesToTree参数。应该这一行:

TreeNode subNode = treeNodes.Add(xnode.Name);

实际上就是这样:

TreeNode subNode = tnode.Add(xnode.Name);

最后,你还没有告诉我们实际上有什么不对。您的代码是否无法编译,或者无法按预期工作?如果是前者,编译器错误是什么?如果是后者,请详细说明实际行为与预期行为的对比。

答案 1 :(得分:0)

我猜你有编译错误

private void AddingNodesToTree(ref XmlNode xnode, ref TreeNode tnode)
{ 
    TreeNode subNode = treeNodes.Add(xnode.Name);
    subNode.Tag = xnode;
    foreach (XmlNode subElement in xnode.ChildNodes)
    {
    // you call it with the wrong params?
        AddingNodesToTree(subNode.Nodes, subElement);
    //should be
        AddingNodesToTree(ref subElement, ref subNode);
    }
}

答案 2 :(得分:0)

我的猜测:您希望显示节点的属性,因此迭代xNode.Attributes而不是xNode.ChildNodes。 (可选)在添加属性之前清除列表视图。