html-agility-pack extraire une image de fond

html-agility-pack xpath

Question

Comment puis-je extraire l'URL du code HTML suivant?

c'est à dire. extrait:

http://media.somesite.com.au/img-101x76.jpg

de:

<div class="media-img">
    <div class=" searched-img" style="background-image: url(http://media.somesite.com.au/img-101x76.jpg);"></div>
</div>

Réponse acceptée

Dans XPath 1.0 en général, vous pouvez utiliser une combinaison de fonctions substring-after() et substring-before() pour extraire une partie d'un texte. Mais les SelectNodes() et SelectSingleNode() HAP ne peuvent pas retourner d'autre noeud que des noeuds, donc ces fonctions XPath ne vont pas vous aider.

Une approche possible consiste à obtenir la valeur entière de l'attribut style utilisant XPath & HAP, puis à traiter la valeur plus loin de .NET, en utilisant regex par exemple:

var html = @"<div class='media-img'>
    <div class=' searched-img' style='background-image: url(http://media.somesite.com.au/img-101x76.jpg);'></div>
</div>";
var doc = new HtmlDocument();
doc.LoadHtml(html);
var div = doc.DocumentNode.SelectSingleNode("//div[contains(@class,'searched-img')]");
var url = Regex.Match(div.GetAttributeValue("style", ""), @"(?<=url\()(.*)(?=\))").Groups[1].Value;
Console.WriteLine(url);

Démo .NET Fiddle

sortie:

http://media.somesite.com.au/img-101x76.jpg


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