Download XmlParser.java class
Online Debug: http://ideone.com/eV2NDC
Follow the following link to build xml from hashmap/array list
package xmlparser; import java.io.ByteArrayInputStream; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; /** * * @author Pritom K Mondal * @published 12th September 2013 08:04 PM */ public class XmlParser { private String xmlString = ""; private File xmlFile = null; private Document doc = null; /** * @param args the command line arguments */ public static void main(String[] args) { String xmlString = "YOUR XML STRING HERE IF YOU WANT PARSE DATA FROM STRING"; File file = new File("xml1.xml"); XmlParser xmlParser = new XmlParser(xmlString); xmlParser = new XmlParser(file); Map xmlMap = xmlParser.parseXML(); print(xmlMap, 0); } public XmlParser(String xmlString) { this.xmlString = xmlString; } public XmlParser(File xmlFile) { this.xmlFile = xmlFile; } public Map parseXML() { try { DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); if (this.xmlFile != null) { doc = dBuilder.parse(this.xmlFile); } else { doc = dBuilder.parse( new ByteArrayInputStream(xmlString.getBytes()) ); } doc.getDocumentElement().normalize(); NodeList resultNode = doc.getChildNodes(); HashMap result = new HashMap(); XmlParser.MyNodeList tempNodeList = new XmlParser.MyNodeList(); String emptyNodeName = null, emptyNodeValue = null; for(int index = 0; index < resultNode.getLength(); index ++) { Node tempNode = resultNode.item(index); if (tempNode.getNodeType() == Node.ELEMENT_NODE) { tempNodeList.addNode(tempNode); } emptyNodeName = tempNode.getNodeName(); emptyNodeValue = tempNode.getNodeValue(); } if (tempNodeList.getLength() == 0 && emptyNodeName != null && emptyNodeValue != null) { result.put(emptyNodeName, emptyNodeValue); return result; } this.parseXMLNode(tempNodeList, result); return result; } catch (Exception ex) { ex.printStackTrace(); return null; } } private void parseXMLNode(NodeList nList, HashMap result) { for (int temp = 0; temp < nList.getLength(); temp++) { Node nNode = nList.item(temp); if (nNode.getNodeType() == Node.ELEMENT_NODE && nNode.hasChildNodes() && nNode.getFirstChild() != null && (nNode.getFirstChild().getNextSibling() != null || nNode.getFirstChild().hasChildNodes())) { NodeList childNodes = nNode.getChildNodes(); XmlParser.MyNodeList tempNodeList = new XmlParser.MyNodeList(); for(int index = 0; index < childNodes.getLength(); index ++) { Node tempNode = childNodes.item(index); if (tempNode.getNodeType() == Node.ELEMENT_NODE) { tempNodeList.addNode(tempNode); } } HashMap dataHashMap = new HashMap(); if (result.containsKey(nNode.getNodeName()) && result.get(nNode.getNodeName()) instanceof List) { List mapExisting = (List) result.get(nNode.getNodeName()); mapExisting.add(dataHashMap); } else if(result.containsKey(nNode.getNodeName())) { List counterList = new ArrayList(); counterList.add(result.get(nNode.getNodeName())); counterList.add(dataHashMap); result.put(nNode.getNodeName(), counterList); } else { result.put(nNode.getNodeName(), dataHashMap); } if (nNode.getAttributes().getLength() > 0) { Map attributeMap = new HashMap(); for(int attributeCounter = 0; attributeCounter < nNode.getAttributes().getLength(); attributeCounter++) { attributeMap.put( nNode.getAttributes().item(attributeCounter).getNodeName(), nNode.getAttributes().item(attributeCounter).getNodeValue() ); } dataHashMap.put("<<attributes>>", attributeMap); } this.parseXMLNode(tempNodeList, dataHashMap); } else if (nNode.getNodeType() == Node.ELEMENT_NODE && nNode.hasChildNodes() && nNode.getFirstChild() != null && nNode.getFirstChild().getNextSibling() == null) { this.putValue(result, nNode); } else if(nNode.getNodeType() == Node.ELEMENT_NODE) { this.putValue(result, nNode); } } } private void putValue(HashMap result, Node nNode) { HashMap attributeMap = new HashMap(); Object nodeValue = null; if(nNode.getFirstChild() != null) { nodeValue = nNode.getFirstChild().getNodeValue(); if(nodeValue != null) { nodeValue = nodeValue.toString().trim(); } } HashMap nodeMap = new HashMap(); nodeMap.put("<<value>>", nodeValue); Object putNode = nodeValue; if (nNode.getAttributes().getLength() > 0) { for(int attributeCounter = 0; attributeCounter < nNode.getAttributes().getLength(); attributeCounter++) { attributeMap.put( nNode.getAttributes().item(attributeCounter).getNodeName(), nNode.getAttributes().item(attributeCounter).getNodeValue() ); } nodeMap.put("<<attributes>>", attributeMap); putNode = nodeMap; } if (result.containsKey(nNode.getNodeName()) && result.get(nNode.getNodeName()) instanceof List) { List mapExisting = (List) result.get(nNode.getNodeName()); mapExisting.add(putNode); } else if(result.containsKey(nNode.getNodeName())) { List counterList = new ArrayList(); counterList.add(result.get(nNode.getNodeName())); counterList.add(putNode); result.put(nNode.getNodeName(), counterList); } else { result.put(nNode.getNodeName(), putNode); } } class MyNodeList implements NodeList { List<Node> nodes = new ArrayList<Node>(); int length = 0; public MyNodeList() {} public void addNode(Node node) { nodes.add(node); length++; } @Override public Node item(int index) { try { return nodes.get(index); } catch (Exception ex) { ex.printStackTrace(); } return null; } @Override public int getLength() { return length; } } private static void print(Map map, Integer tab) { Iterator it = map.entrySet().iterator(); while (it.hasNext()) { Map.Entry pairs = (Map.Entry) it.next(); String key = pairs.getKey().toString(); Object value = pairs.getValue(); if (value instanceof Map) { System.out.println(getTab(tab) + key + " ==> ["); print((Map) value, tab + 1); System.out.println(getTab(tab) + "]"); } else if (value instanceof List) { System.out.println(getTab(tab) + key + " ==> ["); print((List) value, tab + 1); System.out.println(getTab(tab) + "]"); } else { System.out.println(getTab(tab) + key + " ==> " + value); } } } private static void print(List list, Integer tab) { for (Integer index = 0; index < list.size(); index++) { Object value = list.get(index); if (value instanceof Map) { System.out.println(getTab(tab) + index.toString() + ": {"); print((Map) value, tab + 1); System.out.println(getTab(tab) + "}"); } else if (value instanceof List) { print((List) value, tab + 1); } else { System.out.println(getTab(tab) + index.toString() + ": " + value); } } } public static String getTab(Integer tab) { String string = ""; for (Integer index = 0; index < tab; index++) { string += " "; } return string; } }
Xml file as follows...
<?xml version="1.0"?> <lib:library xmlns:lib="http://eric.van-der-vlist.com/ns/library" xmlns:hr="http://eric.van-der-vlist.com/ns/person"> <lib:book id="b0836217462" available="true" checkingandfind='true'> <lib:isbn>0836217462</lib:isbn> <lib:title xml:lang="en">Being a Dog Is a Full-Time Job</lib:title> <hr:author id="CMS"> <hr:name>Charles M Schulz</hr:name> <hr:born>1922-11-26</hr:born> <hr:dead>2000-02-12</hr:dead> </hr:author> <lib:character id="PP"> <hr:name>Peppermint Patty</hr:name> <hr:born>1966-08-22</hr:born> <lib:qualification>bold, brash and tomboyish</lib:qualification> </lib:character> <lib:character id="Snoopy"> <hr:name>Snoopy</hr:name> <hr:born>1950-10-04</hr:born> <lib:qualification>extroverted beagle</lib:qualification> </lib:character> <lib:character id="Schroeder"> <hr:name>Schroeder</hr:name> <hr:born>1951-05-30</hr:born> <lib:qualification>brought classical music to the Peanuts strip</lib:qualification> </lib:character> <lib:character id="Lucy"> <hr:name>Lucy</hr:name> <hr:born>1952-03-03</hr:born> <lib:qualification>bossy, crabby and selfish</lib:qualification> </lib:character> </lib:book> <Purchase> <PurchaseId>AAAAA</PurchaseId> <PurchaseType>ONLINE</PurchaseType> </Purchase> <Purchase> <PurchaseId>BBBBB</PurchaseId> <PurchaseType>OFFLINE</PurchaseType> </Purchase> <Purchase paid='True'> <Purchase> <Purchase2 nc='true'>List 1</Purchase2> <Purchase2>List 2</Purchase2> </Purchase> </Purchase> </lib:library>
Output be as follows...
lib:library ==> [ lib:book ==> [ lib:isbn ==> 0836217462 <<attributes>> ==> [ id ==> b0836217462 checkingandfind ==> true available ==> true ] lib:title ==> [ <<attributes>> ==> [ xml:lang ==> en ] <<value>> ==> Being a Dog Is a Full-Time Job ] lib:character ==> [ 0: { <<attributes>> ==> [ id ==> PP ] lib:qualification ==> bold, brash and tomboyish hr:name ==> Peppermint Patty hr:born ==> 1966-08-22 } 1: { <<attributes>> ==> [ id ==> Snoopy ] lib:qualification ==> extroverted beagle hr:name ==> Snoopy hr:born ==> 1950-10-04 } 2: { <<attributes>> ==> [ id ==> Schroeder ] lib:qualification ==> brought classical music to the Peanuts strip hr:name ==> Schroeder hr:born ==> 1951-05-30 } 3: { <<attributes>> ==> [ id ==> Lucy ] lib:qualification ==> bossy, crabby and selfish hr:name ==> Lucy hr:born ==> 1952-03-03 } ] hr:author ==> [ <<attributes>> ==> [ id ==> CMS ] hr:dead ==> 2000-02-12 hr:name ==> Charles M Schulz hr:born ==> 1922-11-26 ] ] <<attributes>> ==> [ xmlns:hr ==> http://eric.van-der-vlist.com/ns/person xmlns:lib ==> http://eric.van-der-vlist.com/ns/library ] Purchase ==> [ 0: { PurchaseId ==> AAAAA PurchaseType ==> ONLINE } 1: { PurchaseId ==> BBBBB PurchaseType ==> OFFLINE } 2: { <<attributes>> ==> [ paid ==> True ] Purchase ==> [ Purchase2 ==> [ 0: { <<attributes>> ==> [ nc ==> true ] <<value>> ==> List 1 } 1: List 2 ] ] } ] ]