0

「xmlオブジェクト参照がインスタンスに設定されていません..」というエラーが発生する理由について、誰かが教えてくれることを願っています。

私が探している要素(ノード?)は存在しているようで、スペルを間違えたこともありません:[

私はここで愚かなことをしているかもしれませんが、どんな助けでも大歓迎です。

私のコード:

   private void button1_Click(object sender, RoutedEventArgs e)
{

    XmlDocument reader = new XmlDocument();
    reader.Load("Kotaku - powered by FeedBurner.xml");
    XmlNodeList titles = reader.GetElementsByTagName("title");
    XmlNodeList dates = reader.GetElementsByTagName("pubDate"); 
    XmlNodeList descriptions = reader.GetElementsByTagName("description");
    XmlNodeList links = reader.GetElementsByTagName("link"); 
    for (int i = 0; i < titles.Count; i++)
    {
        textBox1.AppendText(Environment.NewLine + titles[i].InnerText);
        textBox1.AppendText(Environment.NewLine + descriptions[i].InnerText); //<<-- Throws Object Ref Null Exception
        textBox1.AppendText(Environment.NewLine + links[i].InnerText);
        textBox1.AppendText(Environment.NewLine + dates[i].InnerText); //<<-- Throws Object Ref Null Exception

    }  

}

私が使用しているXMLは、次の場所から保存されたXMLページです:http://feeds.gawker.com/kotaku/full

現在作業している方法は次のとおりです。上記のリンク(XMLページ)からページを保存し、アクセスしやすいようにEXEの横に配置しました。次に、コードを実行します。

4

3 に答える 3

4

RSSの読み方が間違っています。最初にすべてのアイテムを取得し、各アイテムをループしてテキストを作成します。StringBuilder使用して最終的に文字列に変換できるとよいでしょう。オブジェクトのプロパティにアクセスする前に、nullをチェックできます。

XmlDocument RSSXml = new XmlDocument();
RSSXml.Load("Kotaku - powered by FeedBurner.xml");
XmlNodeList RSSNodeList = RSSXml.SelectNodes("rss/channel/item");
StringBuilder sb = new StringBuilder();
foreach (XmlNode RSSNode in RSSNodeList)
{
    XmlNode RSSSubNode;
    RSSSubNode = RSSNode.SelectSingleNode("title");
    string title = RSSSubNode != null ? RSSSubNode.InnerText : "";
    RSSSubNode = RSSNode.SelectSingleNode("link");
    string link = RSSSubNode != null ? RSSSubNode.InnerText : "";
    RSSSubNode = RSSNode.SelectSingleNode("description");
    string desc = RSSSubNode != null ? RSSSubNode.InnerText : "";
    RSSSubNode = RSSNode.SelectSingleNode("pubDate");
    string pubDate = RSSSubNode != null ? RSSSubNode.InnerText : "";
    sb.Append("<font face='arial'><p><b><a href='");
    sb.Append(link);
    sb.Append("'>");
    sb.Append(title);
    sb.Append("</a></b><br/>");
    sb.Append(desc);
    sb.Append(pubDate);
    sb.Append("</p></font>");
}
textBox1.Text = sb.ToString();
于 2012-06-19T09:21:59.887 に答える
1

タイトル、説明、リンク、日付の項目数がそれぞれ(実行した時点で)39 38 39 37であったため、forループで実行できません。

于 2012-06-19T09:19:24.260 に答える
0

http://feeds.gawker.com/kotaku/fullのソースを確認しました。

私が見ているのは、少なくともHMTLソースでは<title>、チャネルヘッダーにも要素があります。まだどのアイテムにも属していないもの。あなたがあなたのシクルtitle.Countの限界として使うとき、あなたのコードがこのようないくつかの追加の要素を数えることは可能ではありませんか?for

その場合、ループ内の他の配列に十分な要素がない可能性があります。これもチェックしましたか?

于 2012-06-19T09:13:30.657 に答える