0

私は現在、最初にウェブサイトのhtmlコードを調べてすべてのRSSリンクを見つけ、その後RSSリンクを配列に入れ、リンクの各コンテンツを既存のXMLファイルに解析する非常に基本的なプログラムを書いています。

ただし、私はまだ C# を学んでおり、まだすべてのクラスに精通しているわけではありません。get_file_contents() を使用して独自のクラスを作成し、cURLを使用して作業を行うことにより、PHPでこれらすべてを実行しました。私はJavaでもそれを回避することができました。とにかく、C# を使用して同じ結果を達成しようとしていますが、ここで何か間違っていると思います。

TLDR; Web サイト上のすべての 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;
    }
4

1 に答える 1

0

htmlの解析に正規表現を使用しないでください。代わりにhtmlパーサーを使用してください説明については、このリンクを参照してください

HTMLを解析するよりもHtmlAgilityPackの方が好きです

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();
}
于 2012-05-27T17:00:03.523 に答える