1

私は小さなプロジェクトに取り組んでいますが、少し問題が発生しました。助けていただければ幸いです。

特定の URL をロードしていくつかのタグを取り出す、この基本的な数行を取得しました。

var webGet2 = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = webGet2.Load(pattern);
var htmlMatches = doc.DocumentNode.SelectNodes("//li[@class=''] | //li[@class='f']");

コレクションを受け取ったら、すべてのhrefsrcリンクを取得して有効にする foreach ループを実行する必要があります。ソースをダウンロードするとき、リンクは/folder/folder/image.jpgのようになるからです。各リンクの前にhttp://www.site.com を追加したい。

私はこのプロジェクトを正規表現で構築しましたが、それを行うのに問題はありませんでしたが、HTML の敏捷性では、私の心はまっすぐになりません。

ありがとうございました!

4

1 に答える 1

4

それで、相対URLを含む特定の属性をいくつかのノードで検索し、それらを絶対URLに変更したいですか?あなたはこれを行うことができます:

static void AdjustAttributes(HtmlNode root, string baseUrl, string attrName)
{
    var query =
        from node in root.Descendants()
        let attr = node.Attributes[attrName]
        where attr != null
        select attr;
    foreach (var attr in query)
    {
        var url = GetAbsoluteUrlString(baseUrl, attr.Value);
        attr.Value = url;
    }
}

static string GetAbsoluteUrlString(string baseUrl, string url)
{
    var uri = new Uri(url, UriKind.RelativeOrAbsolute);
    if (!uri.IsAbsoluteUri)
        uri = new Uri(new Uri(baseUrl), uri);
    return uri.ToString();
}
var web = new HtmlWeb();
var doc = web.Load(pattern);
var selectedNodes = doc.DocumentNode.SelectNodes("//li[@class=''] | //li[@class='f']");
foreach (var node in selectedNodes)
{
    AdjustAttributes(node, url, "href");
    AdjustAttributes(node, url, "src");
}
于 2012-07-31T20:47:55.707 に答える