0

パッケージのタイトル情報やその他の属性を追加しようとすると、null 参照例外が発生しますが、属性が存在し、適切なパッケージが選択されています

コードは次のとおりです。

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;

ファイルの先頭に

4

1 に答える 1

2

最初の問題は、 を呼び出す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);
        }
    }
}

提供された XML で "Mozilla Firefox" が表示されます。

オプション:

  • 実際の XML には、実際にはtitle属性のない要素が含まれています
  • おそらくPackageTitleヌルですか?

問題を説明する短いが完全なプログラムを作成していただけると助かります。理想的には、GUI を使用しないようにする必要があります。ここでは、GUI 固有のものと思われるものは何も表示されません。

初期化の方法と詳細について教えていただければPackageTitle、それも役に立ちます。見つけた要素の数だけ拡大し続けることをどのように期待していますか? それとも、要素を見つけると予想されるよりも大きなサイズに初期化された配列ですか?

于 2009-12-05T19:37:56.680 に答える