XPath para seleccionar Elemento por valor de atributo


195

Tengo el siguiente XML.

<?xml version="1.0" encoding="UTF-8"?>
<Employees>
    <Employee id="3">
        <age>40</age>
        <name>Tom</name>
        <gender>Male</gender>
        <role>Manager</role>
    </Employee>
    <Employee id="4">
        <age>25</age>
        <name>Meghna</name>
        <gender>Female</gender>
        <role>Manager</role>
    </Employee>
</Employees>

Quiero seleccionar el elemento Empleado con id = "4".

Estoy usando debajo de la expresión XPath que no devuelve nada.

//Employee/[@id='4']/text()

Lo revisé en http://chris.photobooks.com/xml/default.htm y dice xpath no válido, no estoy seguro de dónde está el problema.

Respuestas:


278

Debe eliminar el /antes de [. Los predicados (las partes en [ ]) no deberían tener barras inmediatamente antes de ellos. Además, para seleccionar el elemento Empleado en sí, debe dejarlo /text()al final o, de lo contrario, solo seleccionaría los valores de texto de espacios en blanco inmediatamente debajo del elemento Empleado.

//Employee[@id='4']

Editar: como Jens señala en los comentarios, //puede ser muy lento porque busca nodos coincidentes en todo el documento. Si la estructura de los documentos con los que está trabajando será coherente, probablemente sea mejor usar una ruta completa, por ejemplo:

/Employees/Employee[@id='4']

3
Tenga en cuenta que //selecciona y busca en todos los nodos del documento que pueden ser lentos. En cambio, si se conoce la estructura del documento, utilice una ruta adecuada, como se sugiere en la respuesta de Gilles a continuación.
Jens

@Jens Sí, eso es absolutamente cierto. He editado mi respuesta para agregar un apéndice.
JLRishe

13

Como continuación, puede seleccionar "todos los nodos con un atributo particular" como este:

//*[@id='4']

12

Intenta hacer esto:

/Employees/Employee[@id=4]/*/text()

¿xmllint carga todo el archivo xml en la memoria antes de buscar los identificadores? Tengo un archivo xml de 46 GB y estoy buscando identificadores en él
Hani Goc

Archivo XML de 46 GB : existe el problema.
Gurwinder Singh
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.