0

我希望有人能告诉我为什么我会得到恼人的 - “xml object reference not set to an instance ..”错误。

我正在寻找的元素(节点?)似乎存在,而且我也没有拼错:[

我可能在这里做一些愚蠢的事情,但任何帮助都将不胜感激。

我的代码:

   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

它不能在 for 循环中运行,因为标题、描述、链接和日期中的项目数(在我运行它时)分别为:39 38 39 37。

于 2012-06-19T09:19:24.260 回答
0

我检查了http://feeds.gawker.com/kotaku/full的来源。

我所看到的 - 至少在 HMTL 源代码中 -<title>频道标题中也有一个元素。尚不属于任何项目。当您用作cicletitle.Count的限制时,您的代码是否可能会计算一些像这样的额外元素?for

如果是这种情况,则可能是循环中的其他数组中没有足够的元素。你也检查过这个吗?

于 2012-06-19T09:13:30.657 回答