C# 读取rss的xml文件时获取nullreference异常 试试看 { rssDoc=newxmldocument(); //将XML上下文加载到XmlDocument中 rssDoc.负载(rssReader); Show(rssDoc.ToString()); } 捕获(例外情况除外) { errorProvider1.SetError(url,“无法从此url加载RSS”); } //xmldocument中标记的循环 对于(int i=0;i
循环代码不在try块内。您应该首先更改它,然后使用XDocument和ForEach。再看看@Michael Kjörling写了什么C# 读取rss的xml文件时获取nullreference异常 试试看 { rssDoc=newxmldocument(); //将XML上下文加载到XmlDocument中 rssDoc.负载(rssReader); Show(rssDoc.ToString()); } 捕获(例外情况除外) { errorProvider1.SetError(url,“无法从此url加载RSS”); } //xmldocument中标记的循环 对于(int i=0;i,c#,xml,C#,Xml,循环代码不在try块内。您应该首先更改它,然后使用XDocument和ForEach。再看看@Michael Kjörling写了什么 try { rssDoc = new XmlDocument(); // Load the XML context into XmlDocument rssDoc.Load(rssReader);
try
{
rssDoc = new XmlDocument();
// Load the XML context into XmlDocument
rssDoc.Load(rssReader);
MessageBox.Show(rssDoc.ToString());
}
catch (Exception ex)
{
errorProvider1.SetError(url, "Cannot load the RSS from this url");
}
// Loop for <rss> tag in xmldocument
for (int i = 0; i < rssDoc.ChildNodes.Count; i++)
{
// If <rss> tag found
if (rssDoc.ChildNodes[i].Name == "rss")
{
// assign the <rss> tag node to nodeRSS
nodeRss = rssDoc.ChildNodes[i];
}
}
//Loop for the <channel> tag in side <rss> tag stored in nodeRss
for (int i = 0; i < nodeRss.ChildNodes.Count; i++) <<<<<<EXCEPTION
{
// <channel> node found
if (nodeRss.ChildNodes[i].Name == "channel")
{
//assign the <channel> tag to nodeChannel
nodeChannel = nodeRss.ChildNodes[i];
}
}
为什么要重新发明轮子
try
{
XDocument rssDoc = new XDocument(rssReader);
foreach(var ele in rssDoc.Elemtens["rss"])
{
}
foreach(var ele in rssDoc.Elemtens["channel"])
{
}
}
catch (Exception ex)
{
errorProvider1.SetError(url, "Cannot load the RSS from this url");
}
…应该这样做。(我很确定RSS只允许根
RSS
元素中的一个频道
元素。否则,请查看而不是SelectSingleNode()
)与问题没有实际关系,但为什么不使用foreach
循环呢?它更容易阅读。NullReferenceException
具体发生在哪一行?在循环体中还是在循环头本身的某个语句中?当抛出NullReferenceException
时,找出错误的一个良好开端是逐步解析链接引用,例如nodeRss.ChildNodes[i].Name
,并将所有中间值保存在变量中-这样,您可以确定nodeRss
,nodeRss.ChildNodes
,nodeRss.ChildNodes[i]
和nodeRss.ChildNodes[i].Name
分别为null
。我猜计算结果是nodeRss
或nodeRss.ChildNodes
。这两个都是在显示的代码段之外声明的,但是在这种情况下,
-findingfor
循环找不到匹配项是相当安全的。请仔细检查您的XML输入,或者发布完整的代码片段以及演示问题的XML。
XmlNode nodeChannel = rssDoc.SelectSingleNode("/rss/channel");