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
如果您能告诉我们更多关于
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);
}
}
}