Java HTML / XML How to - Check Node Type using DOM parser








Question

We would like to know how to check Node Type using DOM parser.

Answer

import java.io.ByteArrayInputStream;
//from w  w  w .ja v  a2 s . com
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.InputSource;

public class Main {

  public static void main(String[] args) throws Exception {
    String xml = "<Services><service name='qwerty' id=''><File rootProfile='abcd' extension='acd'><Columns>"
        + "<name id='0' profileName='DATE' type='java'></name><name id='1' profileName='DATE' type='java'></name>"
        + "</Columns></File><File rootProfile='efg' extension='ghi'><Columns><name id='a' profileName='DATE' type='java'></name>"
        + "<name id='b' profileName='DATE' type='java'></name></Columns></File></service></Services>";
    DocumentBuilderFactory documentFactory = DocumentBuilderFactory
        .newInstance();
    DocumentBuilder documentBuilder = null;

    documentBuilder = documentFactory.newDocumentBuilder();

    org.w3c.dom.Document doc = documentBuilder.parse(new InputSource(
        new ByteArrayInputStream(xml.getBytes())));

    doc.getDocumentElement().normalize();
    NodeList nodeList0 = doc.getElementsByTagName("service");
    NodeList nodeList1 = null;
    NodeList nodeList2 = null;
    System.out.println("Root element :"
        + doc.getDocumentElement().getNodeName());

    for (int temp0 = 0; temp0 < nodeList0.getLength(); temp0++) {
      Node node0 = nodeList0.item(temp0);

      System.out.println("\nElement type :" + node0.getNodeName());
      Element Service = (Element) node0;

      if (node0.getNodeType() != Node.ELEMENT_NODE) {
        continue;
      }
      System.out.println("name : " + Service.getAttribute("name"));
      System.out.println("id : " + Service.getAttribute("id"));
      nodeList1 = Service.getChildNodes();
      for (int temp = 0; temp < nodeList1.getLength(); temp++) {
        Node node1 = nodeList1.item(temp);

        System.out.println("\nElement type :" + node1.getNodeName());

        Element File = (Element) node1;

        if (node1.getNodeType() != Node.ELEMENT_NODE) {
          continue;
        }
        System.out.println("rootProfile:" + File.getAttribute("rootProfile"));
        System.out.println("extension  : " + File.getAttribute("extension"));

        nodeList2 = File.getChildNodes();// colums
        for (int temp1 = 0; temp1 < nodeList2.getLength(); temp1++) {
          Element column = (Element) nodeList2.item(temp1);
          NodeList nodeList4 = column.getChildNodes();
          for (int temp3 = 0; temp3 < nodeList4.getLength(); temp3++) {
            Element name = (Element) nodeList4.item(temp3);
            if (name.getNodeType() != Node.ELEMENT_NODE) {
              continue;
            }
            System.out.println("id:" + name.getAttribute("id"));
            System.out.println("profileName  : "
                + name.getAttribute("profileName"));
            System.out.println("type  : " + name.getAttribute("type"));
          }
        }
      }
    }
  }

}