XML到ListView错误

时间:2011-07-28 00:47:44

标签: c# xml parsing listview xml-parsing

我一直在弄错,并且看不出我做错了什么。

这是代码

private void _FixSave_Offline_Load(object sender, EventArgs e)
{
    System.Xml.XmlDocument NewGame = new System.Xml.XmlDocument();
    NewGame.Load(Application.StartupPath + "//Files//Checks_Offline.xml");

    foreach (System.Xml.XmlNode nameNode in NewGame.SelectNodes("//Games//NewGame"))
    {
        listView1.Items.Add(nameNode.Attributes["Name"].InnerText);
    }
}

这是XML布局

<Games>
 <NewGame>
   <Name></Name>
   <Check></Check>
   <Static></Static>
   <Location></Location>
   <Start></Start>
   <Length></Length>
   <FoundBy></FoundBy>
   <Verified></Verified>
</NewGame>

这是我一直在犯的错误

Error Message

和visual studio突出显示以下代码:

listView1.Items.Add(nameNode.Attributes["Name"].InnerText);

我已经尝试过不仅使用&#34; //&#34;而且&#34; /&#34;所以任何可以解决这个问题的事情都会受到欢迎,因为我不能为我的生活看到我做错了什么。

3 个答案:

答案 0 :(得分:2)

乍一看,您正在查找名称为“Name”的属性,但示例中的任何XML元素都没有属性。

我相信你想要Name节点的内容:

foreach (System.Xml.XmlNode nameNode in NewGame.SelectNodes("//Games//NewGame/Name"))
{
    listView1.Items.Add(nameNode.Value);
}

您可能需要稍微使用XPath表达式,具体取决于XML文档的实际结构。

答案 1 :(得分:0)

由于某些原因我无法看到您的XML示例,但请确保您区分Elements and Attributes

另外,请确保属性/元素拼写为“Name”。我认为这是区分大小写的。

-

编辑:现在我能够查看您的XML,看来“名称”实际上是一个元素,而不是一个属性。

尝试使用Item属性或Value属性而不是nameNode.Attributes

答案 2 :(得分:0)

我得到了它的工作。事实证明我错误是由于virtuallist = true。蒂姆我在上面修改了你的代码,以获得我想要的结果。这是任何人用于未来参考的代码。

private void _FixSave_Offline_Load(object sender, EventArgs e)
{
   System.Xml.XmlDocument NewGame = new System.Xml.XmlDocument();
   NewGame.Load(Application.StartupPath + "//Files//Checks_Offline.xml"); 

   foreach (System.Xml.XmlNode nameNode in NewGame.SelectNodes("//Games//NewGame/Name"))
    {
       listView1.Items.Add(nameNode.InnerText);
    }

}

这里是给定结果的快速屏幕截图。

Screen Shot Of Result

希望这对其他人也有帮助。感谢上述人士对此表示赞赏,并非常感谢蒂姆。