2009-03-03 3 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); 
    } 
} 

는 내가 선택한 노드의 속성을 표시하는 트리에서 노드를 선택 :

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

글쎄, 한 가지는 재귀 호출 AddingNodesToTreeref을 지정하지 않았습니다. 그것은 왜 그들이 처음에 매개 변수에 있는지 분명하지 않습니다. 재귀 호출에 대한 인수도 잘못된 형식으로 나타납니다. 실제로 재귀 호출입니까, 아니면 표시하지 않은 오버로드를 호출하고 있습니까?

두 번째 명백한 문제는 tnode 매개 변수를 AddingNodesToTree 내에 사용하고 있지 않다는 것입니다. 이 라인은해야 :

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

실제로이 될 :

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

마지막으로, 당신은 실제로 무엇이 잘못되었는지 우리에게 말하지 않았다. 코드가 컴파일되지 않거나 예상대로 작동하지 않습니까? 그것이 전자의 경우 컴파일러 오류가 무엇입니까? 후자 인 경우 실제 동작 대 예상 동작의 세부 정보를 제공하십시오.

+0

감사합니다. Jon은 첫 번째 기능에서 오타였습니다. 인수가 교환되었습니다. 컴파일 오류로 인해 발생하는 오류는 다음과 같습니다. 예상 클래스, 델리게이트, enum, 인터페이스 또는 구조체 형식 또는 네임 스페이스 정의 또는 파일 끝 예상 –

+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

이상 : 매개 변수 목록에서 참조를 삭제하십시오. 필요하지 않습니다. –

+0

나는 스왑 된 그의 매개 변수에 대해 이야기하고있었습니다. 그러나 당신은 너무 심판을 떨어 뜨릴 수 있습니다. – Stormenet

0

내 생각을 추측 : 당신은 노드의 속성을 보여, 그래서 대신 xNode.ChildNodes의 xNode.Attributes를 반복하고 싶습니다. 선택적으로 속성을 추가하기 전에 목록보기를 지우십시오.

+0

TreeNode n = e.Node; XmlElement c = (XmlElement) n.Tag; XmlAttributeCollection attCol = c.Attributes; foreach (attCol의 XmlAttribute xmlatt) { listBox1.Items.Show (xmlatt); } 이것을 이전 코드로 바꿨지 만 gettin 오류 Expected class, delegate, enum, interface 또는 struct –