Siéntete en la libertad de compartir nuestro espacio y códigos con otro, necesitamos de tu ayuda para hacer crecer nuestra comunidad.
Solución:
Primero, una explicación de por qué sucede esto, lo que podría estar un poco fuera de lugar ya que no incluyó el código que se usa para cargar el archivo XML en un objeto DOM.
Cuando lee un documento XML de un archivo, los espacios en blanco entre las etiquetas en realidad constituyen nodos DOM válidos, de acuerdo con la especificación DOM. Por lo tanto, el analizador XML trata cada secuencia de espacios en blanco como un nodo DOM (de tipo TEXT
);
Para deshacerme de él, hay tres enfoques en los que puedo pensar:
-
Asocie el XML con un esquema y luego use
setValidating(true)
junto consetIgnoringElementContentWhitespace(true)
sobre elDocumentBuilderFactory
.(Nota:
setIgnoringElementContentWhitespace
solo funcionará si el analizador está en modo de validación, por lo que debe usarsetValidating(true)
) - Escriba un XSL para procesar todos los nodos, filtrando solo los espacios en blanco
TEXT
nodos. -
Use el código Java para hacer esto: use XPath para encontrar todos los espacios en blanco
TEXT
nodos, itere a través de ellos y elimine cada uno de su padre (usandogetParentNode().removeChild()
). Algo como esto haría (doc
sería su objeto de documento DOM):XPath xp = XPathFactory.newInstance().newXPath(); NodeList nl = (NodeList) xp.evaluate("//text()[normalize-space(.)='']", doc, XPathConstants.NODESET); for (int i=0; i < nl.getLength(); ++i) Node node = nl.item(i); node.getParentNode().removeChild(node);
Pude arreglar esto usando este código después de eliminar todos los nodos de "ruta" antiguos:
while( pathsElement.hasChildNodes() )
pathsElement.removeChild( pathsElement.getFirstChild() );
Esto eliminará todos los espacios vacíos generados en el archivo XML.
Un agradecimiento especial a MadProgrammer por comentar con el enlace útil mencionado anteriormente.
Aquí tienes las reseñas y valoraciones
Recuerda que puedes dar visibilidad a este enunciado si te valió la pena.