If you want to use the DOM, I suggest you start by writing some helper classes to make your work easier. Here is one that I wrote recently for personal use.
Let's start with the helper classes in the xml.utils package
XmlException.java
package xml.utils; public class XmlException extends Exception { private static final long serialVersionUID = 1L; public XmlException(String message, Throwable cause) { super(message, cause); } public XmlException(String message) { super(message); } public XmlException(Throwable cause) { super(cause); } }
XmlDocument.java
package xml.utils; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.Writer; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.SAXException; public class XmlDocument { private Document document; public XmlNode parse(InputStream is) throws XmlException { try { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); document = dBuilder.parse(is); document.getDocumentElement().normalize(); XmlNode node = new XmlNode(document.getDocumentElement()); return node; } catch (ParserConfigurationException e) { throw new XmlException("Error in configuration of XML parser", e); } catch (SAXException e) { throw new XmlException("Error in parsing XML document", e); } catch (IOException e) { throw new XmlException("Error in reading InputStream", e); } } public XmlNode parse(String uri) throws XmlException { try { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); document = dBuilder.parse(uri); document.getDocumentElement().normalize(); XmlNode node = new XmlNode(document.getDocumentElement()); return node; } catch (ParserConfigurationException e) { throw new XmlException("Error in configuration of XML parser", e); } catch (SAXException e) { throw new XmlException("Error in parsing XML document", e); } catch (IOException e) { throw new XmlException("Error in opening URI", e); } } public XmlNode parse(File file) throws XmlException { try { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); document = dBuilder.parse(file); document.getDocumentElement().normalize(); XmlNode node = new XmlNode(document.getDocumentElement()); return node; } catch (ParserConfigurationException e) { throw new XmlException("Error in configuration of XML parser", e); } catch (SAXException e) { throw new XmlException("Error in parsing XML document", e); } catch (IOException e) { throw new XmlException("Error in opening file", e); } } public void write(OutputStream os, XmlNode node) throws XmlException { try { if (document == null) { document = createNewDocument(); } document.appendChild(node.getNode());
XmlNode.java
package xml.utils; import java.util.ArrayList; import java.util.List; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public class XmlNode { private Element node; private XmlDocument parent; XmlNode(Element node) { this.node = node; this.parent = null; } XmlNode(XmlDocument parent, Element node) { this.node = node; this.parent = parent; } Node getNode() { return node; } public String getNodeValue() { return node.getTextContent(); } public XmlDocument getParent() { return parent; } public void setParent(XmlDocument parent) { this.parent = parent; } public List<XmlNode> getChildNodes() { List<XmlNode> list = new ArrayList<XmlNode>(); NodeList nodeList = node.getChildNodes(); for (int i = 0; i < nodeList.getLength(); i++) { Node n = nodeList.item(i); if (n.getNodeType() == Node.ELEMENT_NODE) { list.add(new XmlNode((Element) n)); } } return list; } public XmlNode getFirstChild() { return getChildNodes().get(0); } public XmlNode getLastChild() { List<XmlNode> childs = getChildNodes(); if (childs.size() == 0) return null; return childs.get(childs.size() - 1); } public List<XmlNode> getNodesByTagName(String tagName) { List<XmlNode> list = new ArrayList<XmlNode>(); NodeList nodeList = node.getElementsByTagName(tagName); for (int i = 0; i < nodeList.getLength(); i++) { Node n = nodeList.item(i); if (n.getNodeType() == Node.ELEMENT_NODE) { list.add(new XmlNode((Element) n)); } } return list; } public XmlNode getFirstNodeByTagName(String tagName) { return getNodesByTagName(tagName).get(0); } public String getTagValue(String tagName) throws XmlException { NodeList tagList = node.getElementsByTagName(tagName); if (tagList.getLength() == 0) throw new XmlException("Tag: '" + tagName + "' not present"); NodeList nlList = tagList.item(0).getChildNodes(); Node nValue = (Node) nlList.item(0); return nValue.getNodeValue(); } public String getAttributeValue(String attributeName) { return node.getAttribute(attributeName); } public String getNodeName() { return node.getTagName(); } public void setAttribute(String name, String value) throws XmlException { if (parent == null) throw new XmlException("Parent node not present."); node.setAttribute(name, value); } public void setTag(String name, String value) throws XmlException { if (parent == null) throw new XmlException("Parent node not present."); XmlNode xmlNode = parent.createNode(name, value); node.appendChild(xmlNode.node); } public void addChildNode(XmlNode xmlNode) throws XmlException { if (parent == null) throw new XmlException("Parent node not present."); node.appendChild(xmlNode.node); } public XmlNode addChildNode(String nodeName) throws XmlException { if (parent == null) throw new XmlException("Parent node not present."); XmlNode child = parent.createNode(nodeName); node.appendChild(child.getNode()); return child; } }
Now DataSet.java and Main.java look like this:
Dataset.java
package tests; import java.io.File; import java.util.ArrayList; import java.util.List; import xml.utils.XmlDocument; import xml.utils.XmlException; import xml.utils.XmlNode; public class DataSet { private int weekNumber; private List<Float> employeeRatesLevelA; private List<Float> employeeRatesLevelB; public DataSet(File xml) throws XmlException { employeeRatesLevelA = new ArrayList<Float>(); employeeRatesLevelB = new ArrayList<Float>(); loadFromXml(xml); } private void loadFromXml(File xml) throws XmlException { XmlDocument document = new XmlDocument(); XmlNode root = document.parse(xml); weekNumber = Integer.parseInt(root.getTagValue("WeekNumber")); XmlNode ratesLevelNode = root.getNodesByTagName("EmployeeRatesLevelA").get(0); List<XmlNode> rates = ratesLevelNode.getNodesByTagName("Rate"); for (XmlNode xmlNode : rates) { employeeRatesLevelA.add(Float.parseFloat(xmlNode.getNodeValue())); } ratesLevelNode = root.getNodesByTagName("EmployeeRatesLevelB").get(0); rates = ratesLevelNode.getNodesByTagName("Rate"); for (XmlNode xmlNode : rates) { employeeRatesLevelB.add(Float.parseFloat(xmlNode.getNodeValue())); } } public void display() { System.out.println("WeekNumber: " + weekNumber); System.out.println("Level A"); for (Float rate : employeeRatesLevelA) { System.out.println("\tRate: " + rate); } System.out.println("Level B"); for (Float rate : employeeRatesLevelB) { System.out.println("\tRate: " + rate); } } }
Main.java
package tests; import java.io.File; import java.io.IOException; import org.xml.sax.SAXException; import xml.utils.XmlException; public class Main { public static void main(String[] args) throws SAXException, IOException, XmlException { File dataFile = new File("/home/jomit/data.xml"); DataSet dataSet = new DataSet(dataFile); dataSet.display(); } }