Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
swdev:java:files:xml_file_routines [2017/10/03 08:12]
smayr created
swdev:java:files:xml_file_routines [2017/10/03 08:22] (current)
smayr
Line 21: Line 21:
 </company> </company>
 </code> </code>
 +
 +Read the list of items found in XML file:
 +<code java>
 +package com.acme.myproj;
 +
 +import javax.xml.parsers.DocumentBuilderFactory;
 +import javax.xml.parsers.DocumentBuilder;
 +import org.w3c.dom.Document;
 +import org.w3c.dom.NodeList;
 +import org.w3c.dom.Node;
 +import org.w3c.dom.Element;
 +import java.io.File;
 +
 +public class XmlFileUtils {
 +
 +  public static void ReadXmlFile(String aFileName) {
 +
 +    try {
 +
 + File fXmlFile = new File(aFileName); // Eg: "/Users/mkyong/staff.xml"
 + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
 + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
 + Document doc = dBuilder.parse(fXmlFile);
 +
 + // Optional, but recommended
 + // Read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work
 + doc.getDocumentElement().normalize();
 +
 + System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
 +
 + NodeList nList = doc.getElementsByTagName("staff");
 +
 + System.out.println("----------------------------");
 +
 + for (int temp = 0; temp < nList.getLength(); temp++) {
 +
 + Node nNode = nList.item(temp);
 +
 + System.out.println("\nCurrent Element :" + nNode.getNodeName());
 +
 + if (nNode.getNodeType() == Node.ELEMENT_NODE) {
 +
 + Element eElement = (Element) nNode;
 +
 + System.out.println("Staff id : " + eElement.getAttribute("id"));
 + System.out.println("First Name : " + eElement.getElementsByTagName("firstname").item(0).getTextContent());
 + System.out.println("Last Name : " + eElement.getElementsByTagName("lastname").item(0).getTextContent());
 + System.out.println("Nick Name : " + eElement.getElementsByTagName("nickname").item(0).getTextContent());
 + System.out.println("Salary : " + eElement.getElementsByTagName("salary").item(0).getTextContent());
 +
 + }
 + }
 +    } catch (Exception e) {
 + e.printStackTrace();
 +    }
 +  }
 +
 +}
 +</code>
 +
 +To read the list of items and their children in XML file, loop through the nodes:
 +<code java>
 +package com.acme.myproj;
 +
 +import java.io.File;
 +import javax.xml.parsers.DocumentBuilder;
 +import javax.xml.parsers.DocumentBuilderFactory;
 +import org.w3c.dom.Document;
 +import org.w3c.dom.NamedNodeMap;
 +import org.w3c.dom.Node;
 +import org.w3c.dom.NodeList;
 +
 +public class XmlFileUtils 
 +{
 +
 +  public static void ReadAllNodes(String aFileName)
 +  {
 +
 +    try {
 +
 + File file = new File(aFileName);  // Eg. "/Users/mkyong/staff.xml"
 +
 + DocumentBuilder dBuilder = DocumentBuilderFactory.newInstance()
 +                             .newDocumentBuilder();
 +
 + Document doc = dBuilder.parse(file);
 +
 + System.out.println("Root element :" + doc.getDocumentElement().getNodeName());
 +
 + if (doc.hasChildNodes()) {
 +
 + printNote(doc.getChildNodes());
 +
 + }
 +
 +    } catch (Exception e) {
 + System.out.println(e.getMessage());
 +    }
 +
 +  }
 +
 +  private static void printNote(NodeList nodeList) 
 +  {
 +
 +    for (int count = 0; count < nodeList.getLength(); count++) {
 +
 + Node tempNode = nodeList.item(count);
 +
 + // make sure it's element node.
 + if (tempNode.getNodeType() == Node.ELEMENT_NODE) {
 +
 + // get node name and value
 + System.out.println("\nNode Name =" + tempNode.getNodeName() + " [OPEN]");
 + System.out.println("Node Value =" + tempNode.getTextContent());
 +
 + if (tempNode.hasAttributes()) {
 + // get attributes names and values
 + NamedNodeMap nodeMap = tempNode.getAttributes();
 +
 + for (int i = 0; i < nodeMap.getLength(); i++) {
 +
 + Node node = nodeMap.item(i);
 + System.out.println("attr name : " + node.getNodeName());
 + System.out.println("attr value : " + node.getNodeValue());
 + }
 + }
 +
 + if (tempNode.hasChildNodes()) {
 + // loop again if has child nodes
 + printNote(tempNode.getChildNodes());
 +
 + }
 +
 + System.out.println("Node Name =" + tempNode.getNodeName() + " [CLOSE]");
 +
 + }
 +
 +    }
 +
 +  }
 +
 +}
 +</code>
 +
 +From other code, call routines as follows:
 +<code java>
 +private void OpenXmlDataFile() 
 +{
 +    Path pth = Paths.get(System.getProperty("user.dir") + "/src/com/acme/myproj/data/", "staff.xml");
 +    XmlFileUtils.ReadAllNodes(pth.toString());
 +}
 +</code>    
  
 References:  [[https://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/]] References:  [[https://www.mkyong.com/java/how-to-read-xml-file-in-java-dom-parser/]]