HTML Agility Pack鏈接更正


我正在做一個小項目,我遇到了一個問題,希望你能幫助我。

我得到了這幾個基本的幾行來加載一個給定的URL並取出一些標籤:

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

在我收到集合之後,我需要運行一個foreach循環,它可以獲取所有hrefsrc鏈接並使它們有效,因為當我下載源代碼時,鏈接看起來像/folder/folder/image.jpg我想在每個鏈接之前添加http://www.site.com

我用Regex構建了這個項目並沒有遇到任何問題,但是憑藉HTML敏捷性,它並沒有讓我的思緒直截了當。

謝謝!

一般承認的答案

所以你想在某些節點中搜索包含相對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();
}
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();
}




許可下: CC-BY-SA
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因