How to remove #text from my Node parsing in Java dom xml parsing

So, I have the following code, which I pretty much copied from here . But the problem is that my text nodes do not contain any text that has only attributes. Therefore i like

<Random name="Katie" num="5"></Random>

and I use this code to analyze it:

  private void listNodes(Node node, String indent)
  {
    String nodeName = node.getNodeName();
    System.out.println(indent + " Node is: " + nodeName);

    if(node instanceof Element && node.hasAttributes())
    {
      System.out.println(indent + "Attributes are: ");
      NamedNodeMap attrs = node.getAttributes();
      for (int i = 0; i < attrs.getLength(); i++) 
      {
        Attr attribute = (Attr) attrs.item(i);
        System.out.println(indent + attribute.getName() + "=" + attribute.getValue());
      }
    }

    NodeList list = node.getChildNodes(); 

    if (list.getLength() > 0) 
    {
      for (int i = 0; i < list.getLength(); i++)
      {
        listNodes(list.item(i), indent + " "); 
      } 
    }
  }

For some reason, my empty text nodes say

Node: #text

Does anyone know how to skip empty node text when parsing an XML file?

Thank,

Josh

+5
source share
3 answers

DTD . , , "" , .

private void listNodes(Node node, String indent)
{
    if (node instanceof Text) {
        String value = node.getNodeValue().trim();
        if (value.equals("") ) {
            return;
        }
    }

    String nodeName = node.getNodeName();
    System.out.println(indent + " Node is: " + nodeName);
    ...
+8

Node.getNodeType() :

Node node;
if (node.getNodeType() == Node.ELEMENT_NODE) {
   // Your code inside this
}
+6

'# text' is the result of calling the getNodeName () method on an empty node. These empty nodes can be identified using XPath and can be deleted.

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);
}

'# text' is generated as a result of empty spaces.

+5
source

All Articles