如何将XML转换为HashMap?

时间:2019-04-08 21:22:35

标签: java xml parsing

我有一个字符串作为输入。字符串为“ 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键值对中,以用于遇到的每个Tag。

我希望输出为-

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 :(得分:0)

我用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>