xml - online - Consulta de XPath para obtener enésima instancia de un elemento
xpath online (2)
Esto parece funcionar:
/descendant::input[@id="search_query"][2]
Voy de "XSLT 2.0 y XPath 2.0 Programmer''s Reference, 4th Edition" de Michael Kay.
También hay una nota en la sección "Sintaxis abreviada" de la especificación del lenguaje de ruta XML http://www.w3.org/TR/xpath/#path-abbrev que proporciona una pista.
Hay un archivo HTML (cuyos contenidos no controlo) que tiene varios elementos de input
, todos con el mismo atributo de id
fijo de "search_query"
. El contenido del archivo puede cambiar, pero sé que siempre quiero obtener el segundo elemento de input
con el atributo id "search_query"
.
Necesito una expresión XPath para hacer esto. Intenté //input[@id="search_query"][2]
pero eso no funciona. Aquí hay una cadena XML de ejemplo donde falló esta consulta:
<div>
<form>
<input id="search_query" />
</form>
</div>
<div>
<form>
<input id="search_query" />
</form>
</div>
<div>
<form>
<input id="search_query" />
</form>
</div>
Tenga en cuenta que lo anterior es simplemente un ejemplo y el otro código HTML puede ser bastante diferente y los elementos de input
pueden aparecer en cualquier lugar sin una estructura de documento coherente (excepto que estoy seguro de que siempre habrá al menos dos elementos de input
con un id. atributo de "search_query"
).
¿Cuál es la expresión correcta de XPath?
Esta es una pregunta frecuente :
//somexpression[$N]
significa "Buscar todos los nodos seleccionados por //somexpression
que es el $N
ésimo hijo de su padre".
Lo que quieres es :
(//input[@id="search_query"])[2]
Recuerde : El operador []
tiene mayor prioridad (prioridad) que la //
abreviatura.