繁体   English   中英

在读取rss的xml文件时获取nullreference异常

[英]Getting a nullreference exception while reading a xml file of a rss

            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];
                }
            }

上面的代码对于大多数rss feed都可以正常工作,但是在进行最后一个循环时,我收到了nullrefrence异常。 我应该怎么做才能使其正常工作?

您的循环代码不在try块内。 您应该先更改此设置,然后再使用XDocument和ForEach。 还可以看看@MichaelKjörling撰写的内容。

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");
}

为什么要重新发明轮子?

XmlNode nodeChannel = rssDoc.SelectSingleNode("/rss/channel");

...应该可以解决问题 (我很确定RSS只能在根rss元素内允许单个channel元素。否则,请查看SelectNodes()而不是SelectSingleNode() 。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM