C# 读取rss的xml文件时获取nullreference异常 试试看 { rssDoc=newxmldocument(); //将XML上下文加载到XmlDocument中 rssDoc.负载(rssReader); Show(rssDoc.ToString()); } 捕获(例外情况除外) { errorProvider1.SetError(url,“无法从此url加载RSS”); } //xmldocument中标记的循环 对于(int i=0;i

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块内。您应该首先更改它,然后使用XDocument和ForEach。再看看@Michael Kjörling写了什么

            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
。这两个都是在显示的代码段之外声明的,但是在这种情况下,
-finding
for
循环找不到匹配项是相当安全的。请仔细检查您的XML输入,或者发布完整的代码片段以及演示问题的XML。
XmlNode nodeChannel = rssDoc.SelectSingleNode("/rss/channel");