【问题标题】:How to convert an XML into HashMap?如何将 XML 转换为 HashMap?
【发布时间】:2019-04-08 21:22:34
【问题描述】:

我有一个字符串作为输入。字符串为“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 - 字段和值可以位于不同的行中。

任何帮助将不胜感激。

【问题讨论】:

  • &lt; 后面的空格在 XML 中是不允许的。
  • 你需要使用 XML 解析器,想到 JDOM 和 SAX

标签: java xml parsing


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2020-06-11
    • 1970-01-01
    相关资源
    最近更新 更多