2009-12-05 77 views
0

我得到一個空引用異常時,它會嘗試添加的包標題信息和其他屬性,但屬性存在,適當的包裝選擇XML屬性沒有出現在列表框 - C#

繼承人的代碼:

private void categorylist_listview_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      XmlDocument LoadPackageList = new XmlDocument(); 
      //Removes the text "Select A Category" and refrehes the form 
      packagelist_listbox.Items.Remove(SelectaCategory_listbox); 

      if (categorylist_listview.SelectedItem == WWW_listviewitem) 
      { 
       LoadPackageList.Load("www.xml"); 
       XmlNodeList WWWPackageList = LoadPackageList.SelectNodes("/Packages/*"); 
       int countthenodes = 0; 
       foreach (XmlNode WWWPackages in WWWPackageList) 
       { 
        //Cycles through all the packages and assings them to a string then adds it to the packagelist 
        countthenodes++; 
        PackageTitle[countthenodes] = WWWPackages.Attributes["title"].ToString(); 
        PackageInfo[countthenodes] = WWWPackages.Attributes["info"].ToString(); 
        PackageDownloadUrl[countthenodes] = WWWPackages.Attributes["downloadurl"].ToString(); 
        PackageTags[countthenodes] = WWWPackages.Attributes["tags"].ToString(); 
        packagelist_listbox.Items.Add(PackageTitle[countthenodes]); 
       } 
       Refresh(packagelist_listbox); 

      } 
     } 

它錯誤列於PackageTitle [countthenodes] = WWWPackages.Attributes [ 「標題」]的ToString();

XML文件:

<Packages> 
    <Firefox title="Mozilla Firefox" tags="www firefox web browser mozilla" info="http://google.com" downloadurl="http://firefox.com"></Firefox> 


</Packages> 

的變量聲明

 public string[] PackageTags; 
     public string[] PackageTitle; 
     public string[] PackageInfo; 
     public string[] PackageDownloadUrl; 

在文件

回答

2

那麼一開始,第一個問題是,在一個XmlAttribute ISN」呼籲ToString()不會做你想做的事。您應該使用Value屬性。但是,我不相信這會導致NullReferenceException,除非數據不像您顯示的那樣。這是一個簡短但完整的程序,它工作正常:

using System; 
using System.Xml; 

class Test 
{ 
    static void Main() 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.Load("test.xml");   
     XmlNodeList list = doc.SelectNodes("/Packages/*"); 
     foreach (XmlNode node in list) 
     { 
      Console.WriteLine(node.Attributes["title"].Value); 
     } 
    } 
} 

顯示「Mozilla Firefox」與您給我們的XML。

選項:

  • 真實XML實際上包含一個元素沒有title屬性
  • 也許PackageTitle爲空?

如果您能生產short but complete program demonstrating the problem,這將有所幫助。理想情況下,它應該避免使用GUI - 我無法在此處看到任何可能是GUI特定的任何內容。

如果您可以告訴我們更多關於PackageTitle以及它如何被初始化的信息,那也會有幫助。你如何期望它能夠繼續擴展儘可能多的元素?或者它是一個數組,它被初始化爲比您期望的元素更大的尺寸?

+0

我加了MessageBox.Show(WWWPackages.Attributes [「title」]。Value);到foreach語句的開頭,它顯示在一個消息框「Mozilla Firefox」中,然後崩潰 –

+0

變量聲明如下: public string [] PackageTags; public string [] PackageTitle; public string [] PackageInfo; public string [] PackageDownloadUrl; –

+0

@Indebi:那麼你有沒有實際*初始化*這些變量?如果沒有,他們將是空的 - 因此這個問題。這與XML或ListBox無關 - 只能處理一般的變量和特定的數組。我實際上建議你爲標題,信息,標籤和下載URL創建一個新的'Package'類型,然後有一個'List '你可以添加元素。 –