2012-04-20 105 views
93

Qué XPath puedo usar para seleccionar cualquier categoría con un atributo de nombre especificado y cualquier autor de nodo secundario con el valor especificado.XPath con varias condiciones

que he probado diferentes variaciones de la ruta siguiente sin éxito:

//quotes/category[@name='Sport' and author="James Small"] 

El XML:

<?xml version="1.0" encoding="utf-8"?> 
<quotes> 
    <category name="Sport"> 
    <author>James Small<quote date="09/02/1985">Quote One</quote><quote    date="11/02/1925">Quote nine</quote></author> 
    </category> 
    <category name="Music"> 
    <author>Stephen Swann 
<quote date="04/08/1972">Quote eleven</quote></author> 
    </category> 
    </quotes> 

Respuesta

154

Probar:
//category[@name='Sport' and ./author/text()='James Small']

+0

Para los seguidores, el mensaje de error "esperado", pero encontrado: && "significaba" utilizar la palabra clave y en lugar de && "(como especifica esta respuesta) – rogerdpack

11

pregunta no es clara, pero lo que entiendo es que necesita seleccionar una categoría que tenga un atributo de nombre y debe tener un autor secundario con el valor especificado, correcto si soy worng

que aquí hay una XPath

//category[@name='Required value'][./author[contains(.,'Required value')]] 
e.g 
//category[@name='Sport'][./author[contains(.,'James Small')]] 
15

Uso:

/category[@name='Sport' and author/text()[1]='James Small'] 

o uso:

/category[@name='Sport' and author[starts-with(.,'James Small')]] 

Es una buena regla para tratar de evitar utilizando el pseudooperador // siempre que sea posible, ya que su evaluación puede n típicamente ser muy lento.

también:

./somename 

es equivalente a:

somename 

por lo que se recomienda el uso de este último.

Cuestiones relacionadas