Seleccionar elemento en un espacio de nombres con XPath
-
02-07-2019 - |
Pregunta
Quiero seleccionar el elemento superior en un documento que tiene un espacio de nombres determinado (prefijo).
Más específicamente:Tengo documentos XML que comienzan con /html/body (en el espacio de nombres XHTML) o con uno de varios elementos en un espacio de nombres particular.Efectivamente quiero eliminar /html/body y simplemente devolver el contenido del cuerpo O todo el elemento raíz con espacio de nombres.
Solución
En XPath 2.0 y XQuery 1.0 puede realizar pruebas con el prefijo del espacio de nombres utilizando el prefijos dentro del alcance () funcionar en un predicado.p.ej.
//*[in-scope-prefixes(.)='html']
Si no puede usar v2, en XPath 1.0 puede usar el espacio de nombres-uri() función para probar con el propio espacio de nombres.p.ej.
//*[namespace-uri()='http://www.w3c.org/1999/xhtml']
Otros consejos
La expresión XPath que quiero es:
/html:html/html:body/node()|/foo:*
Donde el prefijo "html" está asignado al espacio de nombres XHTML y el prefijo "foo" está asignado a mi espacio de nombres de destino.