Il y a un fichier HTML (dont je ne contrôle pas le contenu) qui possède plusieurs éléments d’ input
, tous avec le même atsortingbut d’ id
fixe de "search_query"
. Le contenu du fichier peut changer, mais je sais que je veux toujours obtenir le deuxième élément d’ input
avec l’atsortingbut id "search_query"
.
J’ai besoin d’une expression XPath pour ce faire. J’ai essayé //input[@id="search_query"][2]
mais cela ne fonctionne pas. Voici un exemple de chaîne XML où cette requête a échoué:
Gardez à l’esprit que ce qui précède est simplement un exemple et que l’autre code HTML peut être très différent et que les éléments d’ input
peuvent apparaître n’importe où sans structure de document cohérente (sauf que je suis assuré qu’il y aura toujours au moins deux éléments d’ input
avec un identifiant) atsortingbut de "search_query"
).
Quelle est la bonne expression XPath?
Ceci est une FAQ :
//somexpression[$N]
signifie “Trouver chaque noeud sélectionné par //somexpression
qui est le $N
enfant de son parent”.
Ce que vous voulez c’est :
(//input[@id="search_query"])[2]
Rappelez – vous que l’ opérateur []
a une priorité (priorité) supérieure à l’abréviation //
.
Cela semble fonctionner:
/descendant::input[@id="search_query"][2]
Je vais à partir de “XSLT 2.0 et XPath 2.0 Programmer’s Reference, 4ème édition” de Michael Kay.
Il y a aussi une note dans la section “Syntaxe abrégée” de la spécification du langage XML Path http://www.w3.org/TR/xpath/#path-abbrev qui fournit un indice.