Ошибки XML в ListView - PullRequest
       35

Ошибки XML в ListView

0 голосов
/ 28 июля 2011

Я получаю ошибки с этим, и не вижу, что я делаю неправильно.

Вот код

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);

Я пытался использовать не только "//", но и "/", поэтому все, что исправит это, будет более чем приветствоваться, потому что я не могу на всю жизнь понять, что я делаю неправильно ,

Ответы [ 3 ]

2 голосов
/ 28 июля 2011

На первый взгляд, вы ищете атрибут с именем «Name», но в вашем примере нет атрибутов ни для одного из элементов XML.

Я полагаю, вы хотите получитьузел Name:

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

Возможно, вам придется немного поиграть с выражением XPath, в зависимости от фактической структуры вашего XML-документа.

0 голосов
/ 30 июля 2011

Я получил его на работу. Оказывается, у меня ошибка произошла из-за virtuallist = true. Тим Я немного изменил твой код выше, чтобы получить желаемый результат. Вот код для любого, чтобы использовать для будущей ссылки. </p> <pre>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

Надеюсь, это поможет и другим. Спасибо вышеупомянутым людям, которые прокомментировали мне это, и большое спасибо Тиму.

0 голосов
/ 28 июля 2011

По какой-то причине я не смог увидеть ваш пример XML, но убедитесь, что вы различаете Элементы и атрибуты

Также убедитесь, что для атрибута / элемента написано «Имя». Я считаю, что он чувствителен к регистру.

-

Редактировать: Теперь я могу просматривать ваш XML, кажется, что «Имя» на самом деле является элементом, а не атрибутом.

Попробуйте использовать свойство Item или свойство Value вместо nameNode.Attributes.

...