web-dev-qa-db-fra.com

Obtenir une valeur d'un attribut par HtmlAgilityPack

Je veux obtenir une valeur d'un attribut par HtmlAgilityPack. Code HTML:

<link href="style.css">
<link href="anotherstyle.css">
<link href="anotherstyle2.css">
<link itemprop="thumbnailUrl" href="http://image.jpg">
<link href="anotherstyle5.css">
<link href="anotherstyle7.css">

Je veux obtenir le dernier attribut href.

Mon code c #:

HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument htmldoc = web.Load(Url);
htmldoc.OptionFixNestedTags = true;
var navigator = (HtmlNodeNavigator)htmldoc.CreateNavigator();
string xpath = "//link/@href";
string val = navigator.SelectSingleNode(xpath).Value;

Mais ce code retourne la première valeur href.

8
Notoric

Après XPath, sélectionne les éléments link ayant un attribut href défini. Ensuite, à partir des liens que vous sélectionnez en dernier:

var link = doc.DocumentNode.SelectNodes("//link[@href]").LastOrDefault();
// you can also check if link is not null
var href = link.Attributes["href"].Value; // "anotherstyle7.css"

Vous pouvez également utiliser l'opérateur last() XPath

var link = doc.DocumentNode.SelectSingleNode("/link[@href][last()]");
var href = link.Attributes["href"].Value;

UPDATE: Si vous voulez obtenir le dernier élément avec les attributs itemprop et href, utilisez XPath //link[@href and @itemprop][last()] ou //link[@href and @itemprop] si vous optez pour la première approche.

12
Sergey Berezovskiy

vous avez besoin de quelque chose comme ça:

HtmlWeb web = new HtmlWeb();
HtmlAgilityPack.HtmlDocument htmldoc = web.Load(Url);
htmldoc.OptionFixNestedTags = true;
var navigator = (HtmlNodeNavigator)htmldoc.CreateNavigator();
string xpath = "//link[@itemprop]/@href";
string val = navigator.SelectSingleNode(xpath).Value;
3
elyashiv

chargez la page Web en tant que Htmldocument et sélectionnez directement la dernière balise link.

        HtmlWeb web = new HtmlWeb();
        HtmlDocument doc = web.Load(Url);
        var output = doc.DocumentNode.SelectNodes("//link[@href]").LastOrDefault();
        var data = output.Attributes["href"].Value;

ou chargez la page Web en tant que Htmldocument et récupérez la collection de toutes les balises de lien sélectionnées, puis voyagez à l'aide de la boucle, puis accédez à l'attribut de la dernière balise de sélection.

        HtmlWeb web = new HtmlWeb();
        HtmlDocument doc = web.Load(Url);
        int count = 0;
        string data = "";
        var output = doc.DocumentNode.SelectNodes("//link[@href]");

        foreach (var item in output)
        {
            count++;
            if (count == output.Count)
            {
                data=item.Attributes["href"].Value;
                break;
            }
        }
1
SiwachGaurav

Ok, je suis venu à ceci:

var link = htmldoc.DocumentNode.SelectSingleNode("//link[@itemprop='thumbnailUrl']");
var href = link.Attributes["href"].Value;
0
Notoric