¿Por qué todos miran el atributo "prop"? ¿Me he perdido algo? Solo dice obtener los primeros tres nodos.
66
Todos miran el atributo prop porque eso fue lo que se les pidió. Obtenga todos los nodos donde el accesorio contiene "Foo". Agregue <a prop="Foo5" /> y verá por qué no se trata solo de "los primeros tres nodos" ..
erlando
La pregunta en el cuerpo está mal redactada, independientemente del título. ¿Puede realmente estar en cualquier atributo de apoyo, o realmente solo quieres los primeros tres nodos?
3
Sí, consulte el título por favor (y siéntase libre de editar).
Editar: Otra cosa a tener en cuenta es que, si bien el XPath anterior devolverá la respuesta correcta para ese xml en particular, si desea garantizar que solo obtenga los elementos "a" en el elemento "bla", como otros han mencionado, también debe usar
/bla/a[contains(@prop,'Foo')]
Esto buscará todos los elementos "a" en todo su documento xml, independientemente de estar anidado en un elemento "bla"
//a[contains(@prop,'Foo')]
Agregué esto en aras de la minuciosidad y en el espíritu de stackoverflow. :)
El eje: busca a través de cada nodo debajo y el nodo en sí. A menudo es mejor decir esto que //. He encontrado algunas implementaciones donde // significa en cualquier lugar (descendiente o propio del nodo raíz). El otro usa el eje por defecto.
* or /bla/a
La etiqueta: una coincidencia de comodines, y / bla / a es una ruta absoluta.
[contains(@prop,'Foo')] or [position() <= 3]
La condición dentro de []. @prop es la abreviatura de attribute :: prop, ya que el atributo es otro eje de búsqueda. Alternativamente, puede seleccionar los primeros 3 utilizando la función position ().
Respuestas:
Funciona si uso este XML para obtener resultados.
Editar: Otra cosa a tener en cuenta es que, si bien el XPath anterior devolverá la respuesta correcta para ese xml en particular, si desea garantizar que solo obtenga los elementos "a" en el elemento "bla", como otros han mencionado, también debe usar
Esto buscará todos los elementos "a" en todo su documento xml, independientemente de estar anidado en un elemento "bla"
Agregué esto en aras de la minuciosidad y en el espíritu de stackoverflow. :)
fuente
xmlme.com
ahora redirige a otro host y no parece alojar la herramienta ni nada parecido.Este XPath le dará todos los nodos que tienen atributos que contienen 'Foo', independientemente del nombre del nodo o el nombre del atributo:
Por supuesto, si está más interesado en el contenido del atributo, y no necesariamente en su nodo principal, simplemente suelte el / ..
fuente
//@*[contains(., 'Foo')]
O:
O:
Disecado:
El eje: busca a través de cada nodo debajo y el nodo en sí. A menudo es mejor decir esto que //. He encontrado algunas implementaciones donde // significa en cualquier lugar (descendiente o propio del nodo raíz). El otro usa el eje por defecto.
La etiqueta: una coincidencia de comodines, y / bla / a es una ruta absoluta.
La condición dentro de []. @prop es la abreviatura de attribute :: prop, ya que el atributo es otro eje de búsqueda. Alternativamente, puede seleccionar los primeros 3 utilizando la función position ().
fuente
John C es el más cercano, pero XPath distingue entre mayúsculas y minúsculas, por lo que la XPath correcta sería:
fuente
¿Has probado algo como:
// a [contiene (@prop, "Foo")]
Nunca he usado la función contiene antes, pero sospecho que debería funcionar como se anuncia ...
fuente
Si también necesita hacer coincidir el contenido del enlace en sí, use text ():
//a[contains(@href,"/some_link")][text()="Click here"]
fuente
/ bla / a [contiene (@prop, "foo")]
fuente
Para el código anterior ... // * [contiene (@ prop, 'foo')]
fuente
prueba esto:
// a [contiene (@ prop, 'foo')]
eso debería funcionar para cualquier etiqueta "a" en el documento
fuente