Correzione del link HTML Agility Pack

c# html-agility-pack syntax

Domanda

Sto lavorando a un piccolo progetto e ho avuto un piccolo problema, spero che tu possa aiutarmi.

Ho alcune righe di base che caricano un determinato URL e ritira alcuni tag:

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

Dopo aver ricevuto la raccolta, ho bisogno di eseguire un ciclo foreach che possa prendere tutti i link href e src e renderli validi, perché quando sto scaricando il sorgente, il link sembra /folder/folder/image.jpg Voglio aggiungere http://www.site.com prima di ogni collegamento.

Ho costruito questo progetto con Regex e non ho avuto problemi a farlo, ma con l'agilità HTML non è stato corretto con la mia mente.

Grazie!

Risposta accettata

Quindi vuoi cercare alcuni nodi per determinati attributi che contengono url relativi e cambiarli in url assoluti? Potresti fare questo:

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();
}



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché