我目前正在编写一个非常基本的程序,首先要通过网站的html代码查找所有RSS链接,然后将RSS链接放入数组并将链接的每个内容解析为现有的XML文件。
但是,我还在学习C#,我对所有课程并不熟悉。我已经在PHP中完成了所有这些,通过使用get_file_contents()编写自己的类,并且使用cURL来完成工作。我还设法用Java来解决它。无论如何,我试图通过使用C#来完成相同的结果,但我认为我在这里做错了。
TLDR;编写正则表达式以查找网站上所有RSS链接的最佳方法是什么?
到目前为止,我的代码看起来像这样:
private List<string> getRSSLinks(string websiteUrl)
{
List<string> links = new List<string>();
MatchCollection collection = Regex.Matches(websiteUrl, @"(<link.*?>.*?</link>)", RegexOptions.Singleline);
foreach (Match singleMatch in collection)
{
string text = singleMatch.Groups[1].Value;
Match matchRSSLink = Regex.Match(text, @"type=\""(application/rss+xml)\""", RegexOptions.Singleline);
if (matchRSSLink.Success)
{
links.Add(text);
}
}
return links;
}
答案 0 :(得分:0)
不要使用Regex来解析html。使用html解析器代替this link查看说明
我更喜欢HtmlAgilityPack来解析htmls
using (var client = new WebClient())
{
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(client.DownloadString("http://www.xul.fr/en-xml-rss.html"));
var rssLinks = doc.DocumentNode.Descendants("link")
.Where(n => n.Attributes["type"] != null && n.Attributes["type"].Value == "application/rss+xml")
.Select(n => n.Attributes["href"].Value)
.ToArray();
}