2009-03-03 10 views
2

XML文書を読み込んでツリー形式でwinformに表示する必要があります。ここにコードがあります。エラーが何であるか教えてください。この後XML文書を読み込んでツリービューで表示

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

iは、選択したノードの属性を表示するには、そのツリー内のノードを選択します。

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

いただきました可能性のあるエラーを、このコードでは?是正してください。

答えて

1

もう1つは、AddingNodesToTreeへの再帰呼び出しでは、引数にrefを指定していません。しかし、彼らがなぜ最初の場所にいるのかは明らかではありません。再帰呼び出しの引数も間違った型に見えます。 実際には再帰呼び出しですか、表示していないオーバーロードを呼び出していますか?

tnodeパラメータをAddingNodesToTreeの範囲で使用していないというのは明らかな2番目の問題です。この行する必要があります

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

は、実際にはこのこと:

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

は最後に、あなたが実際に何が間違っている私たちに語っていません。あなたのコードはコンパイルされませんか、または期待通りに動作しませんか?それが前者なら、コンパイラのエラーは何ですか?後者の場合は、実際の動作と期待される動作の詳細をお知らせください。

+0

ありがとうございましたJon、それは最初の機能のタイプミスでした。議論が交換されました。コンパイルエラーとして表示されるエラーは、次のとおりです。クラス、デリゲート、列挙型、インターフェイス、または構造体が予期されています。 型または名前空間の定義、またはファイルの末尾が予想されます –

+0

ファイル全体が表示されない場合は、多く。それは何でもかまいません。また、 "ref"パラメータの理解を確認する必要があります:http://pobox.com/~skeet/csharp/parameters.html –

+0

特に、*は*コンパイル時エラーですか? –

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

またはそれ以上:refをパラメータリストにドロップします。必要ありません。 –

+0

私は、スワップされた彼のパラメータについて話していました。しかし、あなたも参照をドロップすることができます。 – Stormenet

0

を持っていると思います:あなたはノードの属性を表示するので、xNode.Attributes代わりのxNode.ChildNodesを反復します。必要に応じて、属性を追加する前にリストビューをクリアします。

+0

TreeNode n = e.Node; XmlElement c =(XmlElement)n.Tag; XmlAttributeCollection attCol = c.Attributes; foreach(attColのXmlAttribute xmlatt) { listBox1.Items.Show(xmlatt); } これを以前のコードに置き換えましたが、gettinエラー 予想されるクラス、デリゲート、列挙型、インターフェイス、または構造体 –