HTMLアジリティパックリンクの修正

c# html-agility-pack syntax

質問

私は小さなプロジェクトに取り組んでいます。少し問題があります。あなたが私を助けてくれることを願っています。

私は与えられたURLを読み込んでいくつかのタグを取り出すこの基本的な行を得ました:

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

私がコレクションを受け取った後、ソースをダウンロードすると、リンクは/folder/folder/image.jpgのように見えるので、 hrefsrcのリンクをすべて取って有効にするforeachループを実行する必要があります各リンクの前に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();
}
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");
}


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ