Search code examples
javaxmldictionaryxstream

Convert XML String to Map and get the key & value pairs using Java


I have an XML String. I'm trying to convert that string into map so that I can get key & value. However its not able to convert. Here is my code

String xmlString = "<?xml version="1.0" encoding="UTF-8"?><user>
                        <kyc></kyc>
                        <address></address>
                        <resiFI></resiFI></user>"

def convertStringToDocument = {
        xmlString ->
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder;
            try {
                builder = factory.newDocumentBuilder();
                org.w3c.dom.Document doc = builder.parse(new InputSource(new StringReader(xmlString)));
                return doc;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
    }
    def populateDocProofsFromWaiversXML = {
        xmlString, mandateFlag ->

            final List<DocumentProof> documentProofs = new ArrayList<DocumentProof>();
            if (xmlString != null) {
                try {
                    HashMap<String, String> values = new HashMap<String, String>();
                    Document xml = convertStringToDocument(waiversList);
                    org.w3c.dom.Node user = xml.getFirstChild();
                    NodeList childs = user.getChildNodes();
                    org.w3c.dom.Node child;
                    for (int i = 0; i < childs.getLength(); i++) {
                        child = childs.item(i);
                        System.out.println(child.getNodeName());
                        System.out.println(child.getNodeValue());
                        values.put(child.getNodeName(), child.getNodeValue());
                    }
                }  catch (Throwable t) {
                    println "error"
                    //LOG.error("Could not set document proofs from waivers ", t);
                }
            }
            return documentProofs;
    }

I'd like to get "kyc" as key and the respective value. Any better ideas?


Solution

  • package com.test;
    
    import java.io.StringReader;
    import java.util.HashMap;
    
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    
    import org.w3c.dom.Document;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.xml.sax.InputSource;
    
    public class Random {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            HashMap<String, String> values = new HashMap<String, String>();
            String xmlString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><user><kyc>123</kyc><address>test</address><resiFI>asds</resiFI></user>";
            Document xml = convertStringToDocument(xmlString);
            Node user = xml.getFirstChild();
            NodeList childs = user.getChildNodes();
            Node child;
            for (int i = 0; i < childs.getLength(); i++) {
                child = childs.item(i);
                System.out.println(child.getNodeName());
                System.out.println(child.getTextContent());
                values.put(child.getNodeName(), child.getTextContent());
            }
    
        }
    
        private static Document convertStringToDocument(String xmlStr) {
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder;
            try {
                builder = factory.newDocumentBuilder();
                Document doc = builder.parse(new InputSource(new StringReader(
                        xmlStr)));
                return doc;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    }
    

    This will work. Please check :) You can play with DOM.