2009-03-03 18 views
2

Bir Xml belgesi yüklemem ve bir winformda ağaç görünümünde görüntülemem gerekiyor. İşte bir kod parçası. Lütfen hatayı söyleyin. Bundan sonraBir XML belgesi yükleme ve onu ağaç görünümünde görüntüleme

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 seçilen düğümün özelliklerini görüntülemek için o ağaçta düğüm seçmek:

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

WHATS olası hatayı bu kodda? Lütfen düzeltin.

cevap

1

Tek bir şey için, AddingNodesToTree numaralı özyinelemeli aramanızdaki argümanlarda ref belirtmiyorsunuz. Yine de neden ilk başta parametreler üzerinde olduklarını açık değil. Yinelemeli aramaya olan argümanlarınız da yanlış tip olarak görünmektedir. aslında özyinelemeli bir çağrı mı, yoksa daha önce göstermediğiniz bir aşırı yük mü diyorsunuz?

İkinci açık sorun, AddingNodesToTree içinde tnode parametresini kullanmamanızdır. Bu hat olmalı:

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

aslında bu be:

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

Son olarak, aslında neyin yanlış olduğunu söylemedin. Kodunuz beklemiyor mu, beklediğiniz gibi çalışmıyor mu? Eğer eskiyse, derleyici hatası nedir? Eğer ikincisiyse, lütfen gerçek davranışların ayrıntılarını beklenen davranışa göre verin.

+0

Teşekkürler Jon, bu ilk işlevde bir yazım hatasıydı. Argümanlar değişti. Derleme hatası olarak aldığım hatalar: Beklenen sınıf, temsilci, enum, arabirim veya struct Türü veya ad alanı tanımı veya dosya sonu bekleniyor –

+0

Tam dosyayı görmeden, gerçekten yardımcı olmaz çok. Her şey olabilirdi. Ayrıca "ref" parametrelerini anlamanız gerekir: http://pobox.com/~skeet/csharp/parameters.html –

+0

Özellikle, * bu derleme zamanı hatası nerede? –

0

Sana bir derleyici hatayı

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

Veya daha iyisi: ref'yi parametre listesine bırakın - gerekli değildir. –

+0

Takas edilen parametreleri hakkında konuşuyordum. Ama ref de bırakabilirsin. – Stormenet

0

Benim tahminim var sanırım: Sen düğümün özelliklerini gösterir, bu yüzden yerine xNode.ChildNodes ait xNode.Attributes üzerinde yineleme yapmak istiyorum. İsteğe bağlı olarak, öznitelikleri eklemeden önce liste görünümünü temizleyin.

+0

TreeNode n = e.Node; XmlElement c = (XmlElement) n.Tag; XmlAttributeCollection attCol = c.Attributes; foreach (attCol'daki XmlAttribute xmlatt) { listeBox1.Items.Show (xmlatt); } Bu kodu önceki kodla değiştirdim ancak hata mesajı al Beklenen sınıf, temsilci, numara, arabirim veya yapı –

İlgili konular