tengo el siguiente documento XML simple:filtro xquery en el atributo y el elemento
<?xml version="1.0" encoding="UTF-8"?>
<cars>
<car>
<data attrib="Make">
<text>Volvo</text>
</data>
<data attrib="Model">
<text>855</text>
</data>
</car>
<car>
<data attrib="Make">
<text>Volvo</text>
</data>
<data attrib="Model">
<text>745</text>
</data>
</car>
<car>
<data attrib="Make">
<text>Volvo</text>
</data>
<data attrib="Model">
<text>V70R</text>
</data>
</car>
</cars>
y la siguiente XPath:
/cars/car/data[(@attrib='Model') and (text='855')]
Esto devuelve el resultado siguiente:
<data attrib="Model"><text>855</text></data>
I quiere que el XPath devuelva todo el bloque <car>
para la coincidencia.
Así retorno de datos serían así:
<cars>
<car>
<data attrib="Make">
<text>Volvo</text>
</data>
<data attrib="Model">
<text>855</text>
</data>
</car>
</cars>
¿Cómo podría modificar la expresión XPath de arriba para lograr esto?
Solo para agregar a esta respuesta: esto devolverá el elemento "automóvil" seleccionado. No envolverá esto en un elemento de "autos" según lo solicitado. Debido a que la entrada no contiene un elemento "autos" existente con un solo niño, solo puede lograr esta salida mediante la construcción de un nuevo elemento "autos", y para eso necesitará XQuery en lugar de XPath. –
Para agregar al comentario de @MichaelKay, es aún más fácil y más natural hacer tal procesamiento con XSLT que con XQuery. –
@Dimitre - Estoy de acuerdo – Utkanos