dom4j, xpath y namespaces
Por Luis Peralta
Por si a alguien le sirve, que a mí me ha traído de cabeza últimamente… Al utilizar expresiones XPath con dom4j, si éstas tienen namespaces (espacios de nombres, xmlns=“xmpp:xxx” …), hay que usar siempre los prefijos o no funcionarán las búsquedas (al contrario que si usamos DOM pelado).
Para hacerlo tenemos que declarar antes los namespaces y luego usar los prefijos asignados:
Map namespaces = new TreeMap();
namespaces.put("x", "https://xmpp.org/namespaces/xxxx");
DocumentFactory.getInstance().setXPathNamespaceURIs(namespaces);
Y luego tendremos que prefijar todos los elementos de la búsqueda XPath que estén dentro de ese espacio de nombres:
String saan = elem.valueOf("//x:SubAdministrativeAreaName");