【问题标题】:Xml Attribute not showing up on ListBox - C#Xml 属性未显示在 ListBox - C#
【发布时间】:2009-12-05 19:32:37
【问题描述】:

每当它尝试添加包标题信息和其他属性但属性存在并且选择了正确的包时,我都会收到一个空引用异常

代码如下:

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["title"].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;

在文件的开头

【问题讨论】:

    标签: c# xml listview listbox xmldocument


    【解决方案1】:

    嗯,第一个问题是在XmlAttribute 上调用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);
            }
        }
    }
    

    这将显示带有您提供给我们的 XML 的“Mozilla Firefox”。

    选项:

    • 您的真实 XML 实际上包含一个没有 title 属性的元素
    • 也许PackageTitle 为空?

    如果您能生成short but complete program demonstrating the problem,那将会有所帮助。理想情况下,它应该避免使用 GUI - 我在这里看不到任何可能是特定于 GUI 的东西。

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

    【讨论】:

    • 我添加了 MessageBox.Show(WWWPackages.Attributes["title"].Value);到 foreach 语句的开头,它显示在消息框“Mozilla Firefox”中,然后崩溃
    • 变量声明如下: public string[] PackageTags;公共字符串 [] 包标题;公共字符串 [] 包信息;公共字符串[] PackageDownloadUrl;
    • @Indebi:那么你有没有真正初始化这些变量?如果不是,它们将为空 - 因此问题。它与 XML 或 ListBoxes 无关——仅与处理一般变量和特别是数组有关。我实际上建议您创建一个新的 Package 类型,其中包含标题、信息、标签和下载 URL 的成员 - 然后有一个 List&lt;Package&gt; 可以添加元素。
    猜你喜欢
    • 1970-01-01
    • 2016-04-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多