xml - name - ¿Cuál es el XPath correcto para elegir los atributos que contienen "foo"?
xpath value (9)
¿Has probado algo como esto?
// a [contiene (@prop, "Foo")]
Nunca he usado la función contains antes, pero sospecho que debería funcionar como se anuncia ...
Dado este XML, qué XPath devuelve todos los elementos cuyo atributo prop
contiene Foo
(los tres primeros nodos):
<bla>
<a prop="Foo1"/>
<a prop="Foo2"/>
<a prop="3Foo"/>
<a prop="Bar"/>
</bla>
/ bla / a [contiene (@prop, "foo")]
Este XPath le dará todos los nodos que tienen atributos que contienen ''Foo'' independientemente del nombre de nodo o nombre de atributo:
//attribute::*[contains(., ''Foo'')]/..
Por supuesto, si está más interesado en los contenidos del atributo en sí, y no necesariamente en su nodo padre, simplemente suelte el / ...
//attribute::*[contains(., ''Foo'')]
John C es el más cercano, pero XPath distingue entre mayúsculas y minúsculas, por lo que el XPath correcto sería:
/bla/a[contains(@prop, ''Foo'')]
Para el código anterior ... // * [contains (@ prop, ''foo'')]
Si también necesita hacer coincidir el contenido del enlace, use el texto ():
//a[contains(@href,"/some_link")][text()="Click here"]
prueba esto:
// a [contiene (@ prop, ''foo'')]
eso debería funcionar para cualquier etiqueta "a" en el documento
//a[contains(@prop,''Foo'')]
Funciona si uso este XML para recuperar los resultados.
<bla>
<a prop="Foo1">a</a>
<a prop="Foo2">b</a>
<a prop="3Foo">c</a>
<a prop="Bar">a</a>
</bla>
Este sitio es ideal para probar este tipo de cosas
http://www.xmlme.com/XpathTool.aspx
Editar: Otra cosa a tener en cuenta es que mientras el XPath anterior devolverá la respuesta correcta para ese xml particular, si quiere garantizar que solo obtenga los elementos "a" en el elemento "blah", debe como otros han mencionado también usar
/bla/a[contains(@prop,''Foo'')]
Esto buscará todos los elementos "a" en su documento xml completo, independientemente de estar anidado en un elemento "blah"
//a[contains(@prop,''Foo'')]
Agregué esto en aras de la minuciosidad y en el espíritu de . :)
descendant-or-self::*[contains(@prop,''Foo'')]
O:
/bla/a[contains(@prop,''Foo'')]
O:
/bla/a[position() <= 3]
Disecado:
descendant-or-self::
El Eje: busca a través de cada nodo debajo y del nodo en sí. A menudo es mejor decir esto que //. He encontrado algunas implementaciones donde // significa en cualquier lugar (descendente o propio del nodo raíz). El otro usa el eje predeterminado.
* or /bla/a
La etiqueta: una coincidencia de comodín 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 usando la función de posición ().