2011-06-08 32 views
18

He XML siguiente:consulta XPath para filtrar los valores de ciertos atributos solamente

<Library> 
<Item> 
    <Field Name="Name">smooth</Field> 
    <Field Name="File Type">mid</Field> 
    <Field Name="File Size">60026</Field> 
</Item> 
<Item> 
    <Field Name="Name">mid</Field> 
    <Field Name="File Type">mp3</Field> 
    <Field Name="File Size">4584972</Field> 
</Item> 
</Library> 

me gustaría obtener todos los nombres de elemento de artículos del tipo de archivo "medio". Mi consulta XPATH se ve como

/Library/Item/Field 
    [ 
    @Name="Name" and 
    (../Field[@Name="File Type" and ../Field[.="mid"]]) 
    ] 

Pero lamentablemente ambos elementos son devueltos por esa consulta.

smooth 
mid 

parece que la última condición no se compara con los campos con el atributo "Tipo de archivo" solamente, sino todos los campos. Lo que resulta en una devolución del nombre "medio", incluso si este elemento es del tipo de archivo "mp3".

¿Cómo puedo restringir la comparación con "medio" al valor del campo con el atributo Nombre = "Tipo de archivo"?

¿Alguien puede sugerirme una sintaxis de XPATH que funciona como se esperaba?

Respuesta

22

predicados XPath se pueden aplicar en cualquier lugar, esto sería más recta hacia adelante:

/Library/Item[Field[@Name="File Type"] = "mid"]/Field[@Name="Name"] 

su propia expresión correcta sería como

/Library/Item/Field[ 
    @Name="Name" 
    and ../Field[@Name="File Type"] = "mid" 
] 
+1

que era una respuesta bastante rápida, gracias! – klzlk

Cuestiones relacionadas