我希望有人可以告诉我为什么我会把烦人的 - " 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旁边以便于访问。 然后我运行代码。
答案 0 :(得分: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();
答案 1 :(得分:1)
它不能在for循环中运行,因为标题,描述,链接和日期中的项目数分别是(在我运行时):39 38 39 37。
答案 2 :(得分:0)
我查看了http://feeds.gawker.com/kotaku/full的来源。
我所看到的 - 至少在HMTL源中 - 通道标题中也有<title>
个元素。哪个不属于任何项目。当您使用title.Count
作为for
cicle的限制时,您的代码是否可能会计算一些其他元素?
如果是这种情况,则可能在循环中的其他数组中没有足够的元素。你也检查过这个吗?