C# Xml属性未显示在ListBox-C上#

C# Xml属性未显示在ListBox-C上#,c#,xml,listview,listbox,xmldocument,C#,Xml,Listview,Listbox,Xmldocument,每当它试图添加包标题信息和其他属性,但这些属性存在并且选择了正确的包时,就会出现空引用异常 代码如下: private void categorylist_listview_SelectionChanged(object sender, SelectionChangedEventArgs e) { XmlDocument LoadPackageList = new XmlDocument(); //Removes the text

每当它试图添加包标题信息和其他属性,但这些属性存在并且选择了正确的包时,就会出现空引用异常

代码如下:

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]=wwpackages.Attributes[“title”].ToString()处出错

XML文件:

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


</Packages>

在文件的开头,第一个问题是对
xmldattribute
调用
ToString()
并不能实现您想要的功能。您应该使用
属性。但是,我不认为这会导致
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
    为空
如果你能拿出一份工作,那会有帮助的。理想情况下,它应该避免使用GUI-我在这里看不到任何可能是GUI特定的内容


如果您能告诉我们更多关于
PackageTitle
的信息以及它是如何初始化的,那也会有帮助。你怎么能期望它能一直扩展到你能找到的元素?或者它是一个数组,它被初始化为比您所期望的查找元素更大的大小?

我添加了MessageBox.Show(wwpackages.Attributes[“title”].Value);到foreach语句的开头,它显示在一个消息框“Mozilla Firefox”中,然后它崩溃变量声明如下:public string[]PackageTags;公共字符串[]PackageTitle;公共字符串[]PackageInfo;公共字符串[]PackageDownloadUrl@Indebi:那么你有没有初始化过这些变量?如果不是,则它们将为空-因此存在问题。它与XML或列表框无关,只是与一般的变量,特别是数组有关。实际上,我建议您创建一个新的
类型,其中包含标题、信息、标签和下载URL的成员,然后创建一个
列表
,您可以向其中添加元素。
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);
        }
    }
}