如何在不同的RSS格式中使用XmlNode.SelectSingleNode?
How to use XmlNode.SelectSingleNode in different RSS format?
我正在从新闻网站 RSS 获取数据。我从大约 20 个新闻网站得到它。但是,1 个网站的 RSS 是不同的。 20 RSS 使用相同的格式,但本网站的 RSS 不同。我如何在这个不同的 RSS 中搜索 "entry" 个节点。我在互联网上搜索这种情况,但找不到我想要的结果。你能帮助我吗 ?
这是RSS的正常格式
这是我的普通格式 RSS 代码
XmlDocument xdoc = new XmlDocument();
xdoc.Load("http://www.milliyet.com.tr/rss/rssNew/gundemRss.xml");
XmlElement el = (XmlElement)xdoc.SelectSingleNode("/rss");
if (el != null)
{
el.ParentNode.RemoveChild(el);
}
XmlNode Haberler = el.SelectSingleNode("channel");
List<Milliyet> newMilliyet = new List<Milliyet>();
foreach (XmlNode haber in Haberler.SelectNodes("item"))
{
var link = haber.SelectSingleNode("link").InnerText;
if (MilliyetHaberList.ContainsKey(link))
continue;
这是不同的格式 RSS
你的错误是错误的文件格式,这种方式不起作用,因为所有 RSS link 不是 xml 文件,有时是 rss link return application/rss+ xml 内容类型。
对于example:NTV
NTV rss link :http://www.ntv.com.tr/gundem.rss
如果你使用 postman 并得到这个 link 你会看到内容类型:application/rss+xml
你应该像这样使用 HttpRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.ntv.com.tr/gundem.rss");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader stream = new StreamReader(response.GetResponseStream());
string responseString = stream.ReadToEnd();
string xmlString = responseString.Replace("xmlns=\"http://www.w3.org/2005/Atom\"", "");
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(xmlString);
var feedNode = xdoc.LastChild;
XmlNodeList entries = feedNode.SelectNodes("entry");
List<NTV> NTVNewsList = new List<NTV>();
foreach (XmlNode entry in entries)
{
NTV NTVInstance = new NTV();
foreach (XmlNode child in entry.ChildNodes)
{
string childName = child.Name;
switch (childName)
{
case "title":
NTVInstance.Title = child.InnerText;
break;
case "summary":
NTVInstance.Description = child.InnerText;
break;
case "published":
string dateStr = child.InnerText;
NTVInstance.PubDate = Convert.ToDateTime(dateStr);
break;
case "link":
NTVInstance.Link = child.Attributes["href"].Value;
NTVInstance.Tags = GetTags(NTVInstance.Link);
break;
default:
break;
}
}
我正在从新闻网站 RSS 获取数据。我从大约 20 个新闻网站得到它。但是,1 个网站的 RSS 是不同的。 20 RSS 使用相同的格式,但本网站的 RSS 不同。我如何在这个不同的 RSS 中搜索 "entry" 个节点。我在互联网上搜索这种情况,但找不到我想要的结果。你能帮助我吗 ?
这是RSS的正常格式
这是我的普通格式 RSS 代码
XmlDocument xdoc = new XmlDocument();
xdoc.Load("http://www.milliyet.com.tr/rss/rssNew/gundemRss.xml");
XmlElement el = (XmlElement)xdoc.SelectSingleNode("/rss");
if (el != null)
{
el.ParentNode.RemoveChild(el);
}
XmlNode Haberler = el.SelectSingleNode("channel");
List<Milliyet> newMilliyet = new List<Milliyet>();
foreach (XmlNode haber in Haberler.SelectNodes("item"))
{
var link = haber.SelectSingleNode("link").InnerText;
if (MilliyetHaberList.ContainsKey(link))
continue;
这是不同的格式 RSS
你的错误是错误的文件格式,这种方式不起作用,因为所有 RSS link 不是 xml 文件,有时是 rss link return application/rss+ xml 内容类型。
对于example:NTV
NTV rss link :http://www.ntv.com.tr/gundem.rss
如果你使用 postman 并得到这个 link 你会看到内容类型:application/rss+xml
你应该像这样使用 HttpRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.ntv.com.tr/gundem.rss");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader stream = new StreamReader(response.GetResponseStream());
string responseString = stream.ReadToEnd();
string xmlString = responseString.Replace("xmlns=\"http://www.w3.org/2005/Atom\"", "");
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(xmlString);
var feedNode = xdoc.LastChild;
XmlNodeList entries = feedNode.SelectNodes("entry");
List<NTV> NTVNewsList = new List<NTV>();
foreach (XmlNode entry in entries)
{
NTV NTVInstance = new NTV();
foreach (XmlNode child in entry.ChildNodes)
{
string childName = child.Name;
switch (childName)
{
case "title":
NTVInstance.Title = child.InnerText;
break;
case "summary":
NTVInstance.Description = child.InnerText;
break;
case "published":
string dateStr = child.InnerText;
NTVInstance.PubDate = Convert.ToDateTime(dateStr);
break;
case "link":
NTVInstance.Link = child.Attributes["href"].Value;
NTVInstance.Tags = GetTags(NTVInstance.Link);
break;
default:
break;
}
}