Как конвертировать XML в HashMap? - PullRequest
0 голосов
/ 09 апреля 2019

У меня есть строка в качестве ввода.Строка имеет «XML-формат файла» -

<Tag1 F1="V1" F2="V2" F3="V3" F4="V4"/>

<Tag2 
   F1="V1" 
   F2="V2" 
   F3="V3" F4="V4"/>

<Tag3 
   F1="V1" 
   F2="V2" 
   F3="V3" F4="V4"
   F5="V5"
/>

Положение полей и их соответствующих значений может быть либо в одной строке, либо в другой строке .

Мне нужно написать код Java, который принимает эту строку в качестве входных данных и анализирует каждую TAG от начала до конца и сохраняет ее поле и значения в новой паре ключ-значение HashMap для каждого обнаруженного тега.

Я ожидаю вывод как -

HashMap 1 for Tag1 - 
(F1, V1), (F2, V2), (F3, V3), (F4, V4).

HashMap 2 for Tag2 - 
(F1, V1), (F2, V2), (F3, V3), (F4, V4).

HashMap 3 for Tag3 - 
(F1, V1), (F2, V2), (F3, V3), (F4, V4).

Imp - Поля и значения могут быть в разных строках.

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 09 апреля 2019

Я написал простое решение с Dom4j и Jaaxen, я также добавил корень в ваш документ, который можно удалить после обработки ввода, если вы хотите:

package com.aissaoui.iqbal.xml.utils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.Node;
public class Main {

    public static void main(String[] args) {

        StringBuilder sb = new StringBuilder();
        sb.append("<root><Tag1 F1=\"V1\" F2=\"V2\" F3=\"V3\" F4=\"V4\"/><Tag2 ");
        sb.append("   F1=\"V1\" ");
        sb.append("   F2=\"V2\" ");
        sb.append("   F3=\"V3\" F4=\"V4\"/><Tag3 ");
        sb.append("   F1=\"V1\" ");
        sb.append("   F2=\"V2\" ");
        sb.append("   F3=\"V3\" F4=\"V4\"");
        sb.append("   F5=\"V5\"");
        sb.append("/></root>");
        String text = sb.toString();
        try {
            Document document = DocumentHelper.parseText(text);
            String xPath = "/root/*";

            List<Node> list =  document.selectNodes(xPath);
            Map<String,String> map = new HashMap<>();
            for(Node n:list){
                System.out.println("Tag: " + n.getName());
                Map<String,String> hmAttributes = new HashMap<>();
                List<Attribute> lAttributes = ((Element) n).attributes();
                for(Attribute attr:lAttributes){
                    hmAttributes.put(attr.getName(), attr.getValue());
                }

                System.out.println("Attributes: " + hmAttributes.toString());

            }

        } catch (DocumentException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

}

Зависимости:

        <!-- https://mvnrepository.com/artifact/jaxen/jaxen -->
    <dependency>
        <groupId>jaxen</groupId>
        <artifactId>jaxen</artifactId>
        <version>1.1.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/dom4j/dom4j -->
    <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
    </dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...