You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何读取XML的指定字段值并存储到HashMap中

实现方案总览

从XML中提取指定字段存入Java HashMap的方案主要分为两类:JDK原生API实现(无额外依赖)、第三方依赖实现(API更简洁),以下分别给出可直接运行的示例:


方案1:JDK原生DOM解析(无额外依赖,适合小体积XML)

DOM解析会将整个XML加载到内存生成树形结构,不需要引入第三方依赖,适合你当前的简单小XML场景,对初学者友好。

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;

public class XmlParseDemo {
    public static void main(String[] args) throws Exception {
        // 这里可替换为你的XML内容,也可以传入文件输入流
        String xmlContent = "<?xml version=\"1.0\"?>\n" +
                "<REQUEST version=\"10\">\n" +
                "<AUTHENTICATION>\n" +
                "<USERNAME>ABC</USERNAME>\n" +
                "<PASSWORD>123</PASSWORD>\n" +
                "</AUTHENTICATION>\n" +
                "<DATA>\n" +
                "<ADDRESS>add1</ADDRESS>\n" +
                "</DATA>\n" +
                "</REQUEST>";
        Map<String, String> resultMap = new HashMap<>();

        // 构建解析器
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 解析XML得到文档对象
        try (InputStream inputStream = new ByteArrayInputStream(xmlContent.getBytes())) {
            Document document = builder.parse(inputStream);
            // 按标签名提取对应内容
            NodeList usernameNodes = document.getElementsByTagName("USERNAME");
            NodeList passwordNodes = document.getElementsByTagName("PASSWORD");
            if (usernameNodes.getLength() > 0) {
                resultMap.put("USERNAME", usernameNodes.item(0).getTextContent().trim());
            }
            if (passwordNodes.getLength() > 0) {
                resultMap.put("PASSWORD", passwordNodes.item(0).getTextContent().trim());
            }
        }
        // 测试输出
        System.out.println(resultMap);
    }
}

注意:该方案不适合解析超过几十M的大体积XML,会占用过多内存。


方案2:Dom4j实现(API更简洁,性能更优)

Dom4j是业界广泛使用的XML解析库,API设计比原生DOM更简洁易用,性能也更优,需要先引入Maven依赖:

<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>

示例代码:

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import java.util.HashMap;
import java.util.Map;

public class Dom4jParseDemo {
    public static void main(String[] args) throws Exception {
        String xmlContent = "<?xml version=\"1.0\"?>\n" +
                "<REQUEST version=\"10\">\n" +
                "<AUTHENTICATION>\n" +
                "<USERNAME>ABC</USERNAME>\n" +
                "<PASSWORD>123</PASSWORD>\n" +
                "</AUTHENTICATION>\n" +
                "<DATA>\n" +
                "<ADDRESS>add1</ADDRESS>\n" +
                "</DATA>\n" +
                "</REQUEST>";
        Map<String, String> resultMap = new HashMap<>();

        Document document = DocumentHelper.parseText(xmlContent);
        Element rootElement = document.getRootElement();
        // 定位到AUTHENTICATION节点
        Element authNode = rootElement.element("AUTHENTICATION");
        // 直接提取指定字段的文本内容
        resultMap.put("USERNAME", authNode.elementTextTrim("USERNAME"));
        resultMap.put("PASSWORD", authNode.elementTextTrim("PASSWORD"));
        // 测试输出
        System.out.println(resultMap);
    }
}

注意事项

  • 提取字段时建议加非空判断,避免XML缺失对应标签时报空指针异常
  • 密码属于敏感信息,用完建议及时清除HashMap中的对应内容,不要长时间存储在内存中
  • 如果后续遇到XML结构复杂、层级多变的场景,可以使用XPath语法定位节点,灵活性更高

内容的提问来源于stack exchange,提问作者User74

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:42:04