Saltar al contenido

¿Cómo eliminar los nodos de texto de solo espacios en blanco de un DOM antes de la serialización?

Esta división fue probado por nuestros especialistas para asegurar la veracidad de esta crónica.

Solución:

Puede encontrar nodos de texto vacíos usando XPath, luego eliminarlos mediante programación de la siguiente manera:

XPathFactory xpathFactory = XPathFactory.newInstance();
// XPath to find empty text nodes.
XPathExpression xpathExp = xpathFactory.newXPath().compile(
        "//text()[normalize-space(.) = '']");  
NodeList emptyTextNodes = (NodeList) 
        xpathExp.evaluate(doc, XPathConstants.NODESET);

// Remove each empty text node from document.
for (int i = 0; i < emptyTextNodes.getLength(); i++) 
    Node emptyTextNode = emptyTextNodes.item(i);
    emptyTextNode.getParentNode().removeChild(emptyTextNode);

Este enfoque puede ser útil si desea tener más control sobre la eliminación de nodos que el que se logra fácilmente con una plantilla XSL.

Intente usar el siguiente XSL y el strip-space elemento para serializar su DOM:



  

  

  
    
     
    
  


How do I remove whitespace from an XML Document?

El siguiente código elimina los nodos de comentarios y los nodos de texto con todos los espacios vacíos. Si el nodo de texto tiene algún valor, el valor se recortará

public static void clean(Node node)

  NodeList childNodes = node.getChildNodes();

  for (int n = childNodes.getLength() - 1; n >= 0; n--)
  
     Node child = childNodes.item(n);
     short nodeType = child.getNodeType();

     if (nodeType == Node.ELEMENT_NODE)
        clean(child);
     else if (nodeType == Node.TEXT_NODE)
     
        String trimmedNodeVal = child.getNodeValue().trim();
        if (trimmedNodeVal.length() == 0)
           node.removeChild(child);
        else
           child.setNodeValue(trimmedNodeVal);
     
     else if (nodeType == Node.COMMENT_NODE)
        node.removeChild(child);
  

Ref: http://www.sitepoint.com/removing-useless-nodes-from-the-dom/

Reseñas y calificaciones

Recuerda que puedes mostrar este enunciado si te valió la pena.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *