Атрибут XML не отображается в ListBox - C # - PullRequest
0 голосов
/ 05 декабря 2009

Я получаю исключение нулевой ссылки всякий раз, когда он пытается добавить информацию о заголовках пакетов и другие атрибуты, но атрибуты существуют и выбран правильный пакет

Вот код:

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;

В самом начале файла

1 Ответ

2 голосов
/ 05 декабря 2009

Ну, первая проблема в том, что вызов ToString() на XmlAttribute не будет делать то, что вы хотите. Вы должны использовать свойство 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);
        }
    }
}

Это отображает «Mozilla Firefox» с XML, который вы нам дали.

Параметры:

  • Ваш настоящий XML действительно содержит элемент без атрибута title
  • Возможно PackageTitle равно нулю?

Было бы полезно, если бы вы могли создать короткую, но полную программу, демонстрирующую проблему . В идеале следует избегать использования графического интерфейса - здесь я не вижу ничего, что, вероятно, связано с конкретным интерфейсом.

Если бы вы могли рассказать нам больше о PackageTitle и о том, как он инициализируется, это тоже помогло бы. Как вы ожидаете, что он будет продолжать расширяться на столько элементов, сколько вы найдете? Или это массив, который инициализирован с большим размером, чем вы когда-либо ожидали найти элементы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...