HTML Agility Pack Linkkorrektur

c# html-agility-pack syntax

Frage

Ich arbeite an einem kleinen Projekt und ich habe ein kleines Problem, hoffe, du könntest mir helfen.

Ich habe diese grundlegenden paar Zeilen, die eine gegebene URL laden und einige Tags herausnehmen:

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

Nachdem ich die Sammlung erhalten habe, muss ich eine foreach-Schleife ausführen, die alle href- und src- Links aufnehmen kann und sie gültig macht, denn wenn ich die Quelle herunterlade, sieht der Link wie /folder/folder/image.jpg aus Ich möchte http://www.site.com vor jedem Link hinzufügen.

Ich habe dieses Projekt mit Regex erstellt und hatte kein Problem damit, aber mit HTML-Agilität kommt es mir nicht direkt in den Sinn.

Vielen Dank!

Akzeptierte Antwort

Sie möchten also einige Knoten nach bestimmten Attributen suchen, die relative URLs enthalten, und sie zu absoluten URLs ändern? Du könntest das tun:

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


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum