Загрузка документа XML и отображение его в виде дерева - PullRequest
2 голосов
/ 03 марта 2009

Мне нужно загрузить XML-документ и отобразить его в виде дерева в виде win. вот кусок кода. Скажите пожалуйста в чем ошибка.

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 ]

1 голос
/ 03 марта 2009

Ну, во-первых, в вашем рекурсивном вызове AddingNodesToTree вы не указываете ref в качестве аргументов. Не совсем понятно, почему они в первую очередь соответствуют параметрам. Ваши аргументы для рекурсивного вызова также выглядят как неправильный тип. Это на самом деле рекурсивный вызов или вы вызываете перегрузку, которую вы не показали?

Вторая очевидная проблема заключается в том, что вы не используете параметр tnode в AddingNodesToTree. Если эта строка:

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

на самом деле так:

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

Наконец, вы не сказали нам, что на самом деле не так. Ваш код не компилируется или работает не так, как вы ожидали? Если это первое, в чем ошибка компилятора? Если это последнее, просьба сообщить подробности фактического поведения в сравнении с ожидаемым поведением.

0 голосов
/ 03 марта 2009

Мое предположение: вы хотите показать атрибуты узла, поэтому итерируйте xNode.Attributes вместо xNode.ChildNodes. При необходимости очистите представление списка перед добавлением атрибутов.

0 голосов
/ 03 марта 2009

Я полагаю, у вас ошибка компилятора

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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...