Requête XPATH, HtmlAgilityPack et extraction de texte

c# html html-agility-pack xpath

Question

J'avais essayé d'extraire des liens d'une classe appelée "tim_new". On m'a aussi donné une solution.

La solution, l'extrait de code et les informations nécessaires sont donnés ici

La dite requête XPATH était "//a[@class='tim_new'] , ma question est de savoir comment cette requête différencie la première ligne de l'extrait de code (indiquée dans le lien ci-dessus et la seconde ligne de l'extrait de code).

Plus précisément, quelle est la traduction littérale (en anglais) de cette requête XPATH.


De plus, je veux écrire quelques lignes de code pour extraire le texte écrit en NSE:

<div class="FL gL_12 PL10 PT15">BSE: 523395 &nbsp;&nbsp;|&nbsp;&nbsp; NSE: 3MINDIA &nbsp;&nbsp;|&nbsp;&nbsp; ISIN: INE470A01017</div>

J'apprécierais de l'aide pour former la requête de sélection nécessaire.

Mon code est écrit comme:

IEnumerable<string> NSECODE = doc.DocumentNode.SelectSingleNode("//div[@NSE:]");

Mais cela ne semble pas correct. J'apprécierais un peu d'aide.

Réponse populaire

Le XPath dans la première sélection lit "sélectionne tous les éléments de document ayant un attribut nommé class avec une valeur de tim_new". Les éléments entre parenthèses ne correspondent pas à ce que vous retournez, mais aux critères que vous appliquez à la recherche.

Je n'ai pas le pack HTML Agility, mais si vous essayez d'interroger les div qui ont pour texte "NSE:", votre XPath pour la deuxième requête doit simplement être "// div", alors vous voudrez filtrer. en utilisant LINQ.

Quelque chose comme

var nodes = 
    doc.DocumentNode.SelectNodes("//div[text()]").Where(a => a.InnerText.IndexOf("NSE:") > -1);

Ainsi, en anglais, "Renvoyez tous les éléments div qui contiennent immédiatement du texte à LINQ, puis vérifiez que la valeur de texte interne contient NSE:". Encore une fois, je ne suis pas sûr que la syntaxe soit parfaite, mais c'est l'idée.

Le XPath "// div [@NSE:]" renverrait tous les div ayant un attribut nommé, NSE :, ce qui serait illégal de toute façon car ":" n'est pas autorisé dans un nom d'attribut. Vous recherchez le texte de l'élément, pas l'un de ses attributs.

J'espère que cela pourra aider.'

Remarque: Si vous avez des div imbriqués contenant du texte, comme dans <div>NSE: some text<div>NSE: more text</div></div> vous obtiendrez des résultats en double.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow