Вопрос по xml, map, java – Как преобразовать строку xml в Map <String, String>

2

Как я могу преобразовать все значения элемента и атрибутов xml в Map of string? Есть ли библиотека, которая может это сделать? Я нашел библиотеку xStream, но не знаю, как ее настроить.

@hudi: Это потому, что ваш вопрос слишком расплывчатый. skaffman
Кроме того, вы можете посмотретьstackoverflow.com/questions/8296126/… как это дает хороший пример того, как это сделать. Ewald
возможно повторитьstackoverflow.com/questions/1537207/… isvforall
Нет извините, ни один из этих ответов не может мне помочь hudi

Ваш Ответ

3   ответа
0

try {
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document doc = db.parse("C://logs//XML.xml");
    NodeList nodeList = doc.getChildNodes();
    for (int i = 0; i < nodeList.getLength(); i++) {
        Node textChild = nodeList.item(i);
        NodeList childNodes = textChild.getChildNodes();
        for (int j = 0; j < childNodes.getLength(); j++) {
            Node grantChild = childNodes.item(j);
            NodeList grantChildNodes = grantChild.getChildNodes();
            for (int k = 0; k < grantChildNodes.getLength(); k++) {
                if(!StrUtl.isEmptyTrimmed( grantChildNodes.item(k).getTextContent() ) ) {
                    Map<String, String> map = new HashMap<String, String>();
                            map.put(grantChildNodes.item(k).getNodeName() , grantChildNodes.item(k).getTextContent());
                            System.out.println(map);
                }
            }
        }
    }
}catch (Exception e){
        e.printStackTrace();
}
6

public static Map<String, String> convertNodesFromXml(String xml) throws Exception {

    InputStream is = new ByteArrayInputStream(xml.getBytes());
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true);
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document document = db.parse(is);
    return createMap(document.getDocumentElement());
}

public static Map<String, String> createMap(Node node) {
    Map<String, String> map = new HashMap<String, String>();
    NodeList nodeList = node.getChildNodes();
    for (int i = 0; i < nodeList.getLength(); i++) {
        Node currentNode = nodeList.item(i);
        if (currentNode.hasAttributes()) {
            for (int j = 0; j < currentNode.getAttributes().getLength(); j++) {
                Node item = currentNode.getAttributes().item(i);
                map.put(item.getNodeName(), item.getTextContent());
            }
        }
        if (node.getFirstChild() != null && node.getFirstChild().getNodeType() == Node.ELEMENT_NODE) {
            map.putAll(createMap(currentNode));
        } else if (node.getFirstChild().getNodeType() == Node.TEXT_NODE) {
            map.put(node.getLocalName(), node.getTextContent());
        }
    }
    return map;
}
Возможно, это работает каким-то образом, но не забудьте исправить: Node item = currentNode.getAttributes (). Item (j); (J вместо меня). Кроме того, он не собирает одинаковые теги, как это видно наstackoverflow.com/a/31245219/2914140 (это решение также имеет ошибки).
0

Подчеркиваем-ява Библиотека может конвертировать HashMap в XML и наоборот. Я поддерживаю проект.

Пример кода:

import com.github.underscore.lodash.U;
import java.util.*;

public class Main {

    @SuppressWarnings("unchecked")    
    public static void main(String[] args) {

        Map<String, Object> map = new LinkedHashMap<String, Object>();
        map.put("name", "chris");
        map.put("island", "faranga");

        System.out.println(U.toXml(map));

        Map<String, Object> newMap = (Map<String, Object>) U.fromXml($.toXml(map));

        System.out.println(newMap.get("name"));
    }
}

Похожие вопросы