Estamos usando dom4j 1.6.1, para analizar el XML proveniente de algún lugar. En algún momento, la baliza tiene mención del espacio de nombres (por ejemplo:) y alguna vez no(). Y hace que la llamada de Element.selectSingleNode (String s) falle.Limpiar el manejo del espacio de nombres con dom4j
Por ahora tenemos 3 soluciones, y no estamos contentos con ellos
1 - Eliminar todo ocurrencia espacio de nombres antes de hacer nada con el documento XML
xml = xml .replaceAll("xmlns=\"[^\"]*\"","");
xml = xml .replaceAll("ds:","");
xml = xml .replaceAll("etm:","");
[...] // and so on for each kind of namespace
2 - Eliminar espacio de nombres justo antes de recibir una al llamar nodo
Element.remove(Namespace ns)
Pero es sólo funciona para un nodo y el primer nivel de niño
3 - El desorden del código por
node = rootElement.selectSingleNode(NameWithoutNameSpace)
if (node == null)
node = rootElement.selectSingleNode(NameWithNameSpace)
Así que ... ¿qué te parece? ¿Una bruja es la menos peor? ¿Tienes alguna otra solución para proponer?
voy a tratar de cavar el documento sobre el espacio de nombres con el prefijo nulo. Gracias de cualquier manera. Acerca del origen del archivo XML: no hay manera de que cambien nada. Pero el archivo con o sin espacio de nombres es válido. Con los archivos, construimos objetos, que usamos en nuestro sistema. Pero nunca "escribimos" algo. (no tenemos derecho a modificar el archivo xml) –