Correction du lien HTML Agility Pack

c# html-agility-pack syntax

Question

Je travaille sur un petit projet et j'ai un petit problème. J'espère que vous pourrez m'aider.

J'ai quelques lignes de base qui chargent une URL donnée et en sort quelques balises:

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

Après avoir reçu la collection, je dois exécuter une boucle foreach qui peut prendre tout le lien href et src et les rendre valides, car lorsque je télécharge le code source, le lien ressemble à /folder/folder/image.jpg Je veux ajouter http://www.site.com avant chaque lien.

J'ai construit ce projet avec Regex et je n'ai eu aucun problème à le faire, mais avec l'agilité HTML, ça ne me vient pas à l'esprit.

Je vous remercie!

Réponse acceptée

Vous souhaitez donc rechercher dans certains nœuds certains attributs contenant des URL relatives et les modifier en adresses absolues? Vous pouvez faire ceci:

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi