Преобразование строки XML в карту и получение пар ключ-значение с помощью Java

У меня есть строка XML. Я пытаюсь преобразовать эту строку в карту, чтобы получить ключ и значение. Однако его не удается преобразовать. Вот мой код

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;
    }

Я хотел бы получить «kyc» в качестве ключа и соответствующее значение. Есть идеи получше?


person Syed    schedule 23.09.2015    source источник
comment
возможный дубликат здесь: stackoverflow.com/questions/1537207/   -  person antoniodvr    schedule 23.09.2015
comment
попробуйте использовать парсер dom xml   -  person virendrao    schedule 23.09.2015
comment
@virendrao, можете ли вы привести фрагмент примера?   -  person Syed    schedule 23.09.2015
comment
@Nizam проверьте ниже ответ   -  person virendrao    schedule 23.09.2015


Ответы (1)


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;
    }
}

Это сработает. Пожалуйста, проверьте :) Вы можете играть с DOM.

person virendrao    schedule 23.09.2015
comment
В нем говорится, что не удалось найти соответствующий конструктор для: java.io.StringReader(com.pramati.org.apache.xerces.dom.DeferredElementImpl) в этой строке Document doc = builder.parse(new InputSource(new StringReader( - person Syed; 23.09.2015
comment
@Nizam - это импорт того же класса для StringReader? какая у тебя версия джавы? у меня этот код работает на 1.5 - person virendrao; 23.09.2015
comment
Я использую версию Java 1.7. - person Syed; 23.09.2015
comment
правильный ли импорт в коде, который я разместил, и что вы используете? вы можете просто скопировать и вставить приведенный выше код в ide и попробовать запустить - person virendrao; 23.09.2015
comment
Пожалуйста, отправьте свой адрес электронной почты. Я отправлю вам код там. - person Syed; 23.09.2015
comment
Давайте продолжим обсуждение в чате. - person virendrao; 23.09.2015
comment
Я пропинговал вас. Не могли бы вы ответить там - person Syed; 23.09.2015
comment
Я получаю ключ и значения как Node:panVerifiedFlag Value:null Node:#text Value: - person Syed; 23.09.2015
comment
@Nizam, потому что значение вашего узла для тега равно null - person virendrao; 23.09.2015
comment
Я пропинговал вас. Можем ли мы обсудить в чате - person Syed; 23.09.2015