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
相关产品推荐
相关产品推荐

