none
C#读取RSS中的疑问? RRS feed

  • 问题

  • 我读取RSS中的Description部分的内容:

    例如:网易新闻或者新浪新闻 RSS中的Description部分的内容:

                string rss = "http://rss.sina.com.cn/news/china/hktaiwan15.xml";//RSS地址
    
                XmlDocument doc = new XmlDocument();//创建文档对象
                try
                {
                    doc.Load(rss);//加载XML 包括HTTP:// 和本地
                }
                catch (Exception ex)
                {
    
                }
    
                XmlNodeList channel = doc.GetElementsByTagName("channel"); //获得项  
                foreach (XmlNode node in channel) //循环每一项
                {
                    XmlElement ele = (XmlElement)node;
                    string title = ele.GetElementsByTagName("title")[0].InnerText;//获得标题
                    Console.WriteLine("新闻头条: " + title);
    
                    Console.WriteLine();
                }
    
    
                XmlNodeList list = doc.GetElementsByTagName("item"); //获得项           
                foreach (XmlNode node in list) //循环每一项
                {
                    XmlElement ele = (XmlElement)node;
                    string title = ele.GetElementsByTagName("title")[0].InnerText;//获得标题
                    string link = ele.GetElementsByTagName("link")[0].InnerText;//获得联接
                    string description = ele.GetElementsByTagName("description")[0].InnerText;//获得联接
    
                    Console.WriteLine("标题: " + title);
                    Console.WriteLine("描述: " + description);
                    Console.WriteLine();
                }
    
                Console.Read();

    在新浪新闻中读取很正常,可是对于网易新闻的Description部分读取出来却有问题:

    http://news.163.com/special/00011K6L/rss_newstop.xml

    以上是网易RSS内容部分测试的地址

    请对比下就可以知道;

    我该如何做才能针对不同的Description部分做出处理然后正确的读取到内容呢?

    感激不尽,请比较主要的部分用代码给我看看,我能更好的理解,感谢感谢!!!


    2013年3月7日 3:56

答案

  • 首先肯定你的代码没有问题,原因在于网易的节点中包含了图片链接。

    除非你使用正则去判断读取,譬如读取的结尾最好是中文:

    class Program
        {
           static void Main(string[] args)
            {
                string rss = "http://rss.sina.com.cn/news/china/hktaiwan15.xml";
     
                XmlDocument doc = new XmlDocument();//创建文档对象
                try
                {
                    Regex reg = new Regex("[\u3400-\u9FFF].*[\u3400-\u9FFF]");
     
                    doc.Load(rss);//加载XML 包括HTTP:// 和本地
                    XmlNodeList channel = doc.GetElementsByTagName("channel"); //获得项  
                    foreach (XmlNode node in channel//循环每一项
                    {
                        XmlElement ele = (XmlElement)node;
                        string title = ele.GetElementsByTagName("title")[0].InnerText;//获得标题
                        Console.WriteLine("新闻头条: " + title);
     
                        Console.WriteLine();
                    }
     
     
                    XmlNodeList list = doc.GetElementsByTagName("item"); //获得项           
                    foreach (XmlNode node in list//循环每一项
                    {
                        XmlElement ele = (XmlElement)node;
                        string title = ele.GetElementsByTagName("title")[0].InnerText;//获得标题
                        string link = ele.GetElementsByTagName("link")[0].InnerText;//获得联接
                        string description = ele.GetElementsByTagName("description")[0].InnerText.Trim();//获得联接
     
                        Console.WriteLine("标题: " + title);
                        Console.WriteLine("描述: " + reg.Match(description.Trim()).Value);
                        Console.WriteLine();
                    }
     
                    Console.Read();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
     
            }
     
        }

    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats

    • 已标记为答案 Wayne1900 2013年3月7日 4:56
    2013年3月7日 4:48
    版主

全部回复

  • 首先肯定你的代码没有问题,原因在于网易的节点中包含了图片链接。

    除非你使用正则去判断读取,譬如读取的结尾最好是中文:

    class Program
        {
           static void Main(string[] args)
            {
                string rss = "http://rss.sina.com.cn/news/china/hktaiwan15.xml";
     
                XmlDocument doc = new XmlDocument();//创建文档对象
                try
                {
                    Regex reg = new Regex("[\u3400-\u9FFF].*[\u3400-\u9FFF]");
     
                    doc.Load(rss);//加载XML 包括HTTP:// 和本地
                    XmlNodeList channel = doc.GetElementsByTagName("channel"); //获得项  
                    foreach (XmlNode node in channel//循环每一项
                    {
                        XmlElement ele = (XmlElement)node;
                        string title = ele.GetElementsByTagName("title")[0].InnerText;//获得标题
                        Console.WriteLine("新闻头条: " + title);
     
                        Console.WriteLine();
                    }
     
     
                    XmlNodeList list = doc.GetElementsByTagName("item"); //获得项           
                    foreach (XmlNode node in list//循环每一项
                    {
                        XmlElement ele = (XmlElement)node;
                        string title = ele.GetElementsByTagName("title")[0].InnerText;//获得标题
                        string link = ele.GetElementsByTagName("link")[0].InnerText;//获得联接
                        string description = ele.GetElementsByTagName("description")[0].InnerText.Trim();//获得联接
     
                        Console.WriteLine("标题: " + title);
                        Console.WriteLine("描述: " + reg.Match(description.Trim()).Value);
                        Console.WriteLine();
                    }
     
                    Console.Read();
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.ToString());
                }
     
            }
     
        }

    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats

    • 已标记为答案 Wayne1900 2013年3月7日 4:56
    2013年3月7日 4:48
    版主
  • 谢谢您详细的解答,在网易与新浪的RSS文档内容读取正确;

    通过正则去判断读取,譬如读取的结尾最好是中文

    若RSS文档是全英文的话若使用这个方法可能就依然会出现问题;

    是么?感谢您的详细解答!

    2013年3月7日 4:56
  • 是的,每个RSS貌似结构都不一样,要统一很难。所以建议截取部分中文为妙。

    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats

    2013年3月7日 4:57
    版主
  • 附:若使用正则表达式读取的结尾至"..."这样的正则表达式如何表示呢?是否能解决问题呢?是否依然会有其他的问题可能存在的?
    2013年3月7日 5:01
  • 那你完全可以:

    1)读取全部的内容,

    2)使用SubString方法截取字符串(用IndexOf("...")获取省略号的索引)。

    但是,如果你正文中有省略号就不好办了。


    If you think one reply solves your problem, please mark it as An Answer, if you think someone's reply helps you, please mark it as a Proposed Answer

    Help by clicking:
    Click here to donate your rice to the poor
    Click to Donate
    Click to feed Dogs & Cats

    2013年3月7日 8:48
    版主