web-dev-qa-db-fra.com

Quelle est l'expression XPath pour rechercher uniquement la première occurrence?

J'ai utilisé cette expression Xpath "//span[@class='Big']" et a obtenu tous les éléments de cette page qui sont sous <span> tag et class='Big'.

Ma question est la suivante: si je veux juste la première occurrence sur la page, pas toutes les occurrences, quelle serait l'expression correcte Xpath?

Merci, Narin

43
Narin

La bonne réponse (notez les crochets) :

(//span[@class='Big'])[1]

L'expression suivante est incorrecte dans le cas général:

//span[@class='Big'][1]

car il sélectionne chaque span élément du document, qui remplit la condition dans le premier prédicat, c'est-à-dire le premier enfant de son parent - il peut y en avoir beaucoup dans un document XML et tous seront sélectionnés.

Pour une explication plus détaillée, voir: https://stackoverflow.com/a/5818966/36305

115
Dimitre Novatchev

La réponse de Dimitre Novatchev est correcte si vous vous attendez à ce que l'attribut class soit égal àBig (sans aucune autre classe attachée à l'élément):

(//span[@class="Big"])[1]

... qui est similaire à l'expression JavaScript suivante:

document.querySelectorAll('span[class="Big"]')[0]

D'un autre côté, si vous vous attendez à ce que Big soit un nombre quelconque de classes dans l'attribut class (plutôt que dans la seule classe), vous pouvez utiliser l'expression suivante:

(//span[contains(concat(" ", normalize-space(@class), " "), " Big ")])[1]

... qui est similaire à l'expression JavaScript suivante:

document.querySelectorAll('span.Big')[0]
5
Grant Miller