2 Stimmen

Das Laden eines XML-Dokuments und Anzeigen in einer Baumansicht

Ich muss ein Xml-Dokument laden und in einer Baumstruktur in einem Winform anzeigen. Hier ist ein Stück Code. Bitte sagen Sie, was der Fehler ist.

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);
    }
}

danach wähle ich einen Knoten in diesem Baum aus, um die Attribute des ausgewählten Knotens anzuzeigen:

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);
        }
    }
}

Was könnte der Fehler in diesem Code sein? Bitte korrigieren.

1voto

Jon Skeet Punkte 1325502

Nun zunächst einmal, bei Ihrem rekursiven Aufruf von AddingNodesToTree geben Sie die ref-Angabe nicht in den Argumenten an. Es ist überhaupt nicht klar, warum sie überhaupt in den Parametern sind. Ihre Argumente für den rekursiven Aufruf scheinen auch vom falschen Typ zu sein. Ist es tatsächlich ein rekursiver Aufruf, oder rufen Sie eine Überladung auf, die Sie nicht gezeigt haben?

Das zweite offensichtliche Problem ist, dass Sie den tnode-Parameter innerhalb von AddingNodesToTree nicht verwenden. Sollte diese Zeile sein:

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

tatsächlich so sein:

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

Schließlich haben Sie uns nicht mitgeteilt, was tatsächlich falsch ist. Kompiliert Ihr Code nicht oder funktioniert er nicht wie erwartet? Wenn es Ersteres ist, was ist der Kompilierfehler? Wenn es Letzteres ist, geben Sie bitte Details zum tatsächlichen Verhalten im Vergleich zum erwarteten Verhalten.

0voto

Stormenet Punkte 24616

Ich vermute, du hast einen Compilerfehler

private void AddingNodesToTree(ref XmlNode xnode, ref TreeNode tnode)
{ 
    TreeNode subNode = treeNodes.Add(xnode.Name);
    subNode.Tag = xnode;
    foreach (XmlNode subElement in xnode.ChildNodes)
    {
    // Rufen Sie es mit den falschen Parametern auf?
        AddingNodesToTree(subNode.Nodes, subElement);
    //sollte sein
        AddingNodesToTree(ref subElement, ref subNode);
    }
}

0voto

Rauhotz Punkte 7594

Meine Vermutung: Du möchtest die Attribute des Knotens anzeigen, also iteriere über xNode.Attributes anstelle von xNode.ChildNodes. Optional kannst du die ListView leeren, bevor du die Attribute hinzufügst.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X