
本文详解如何在 Java 中通过 DOM API 正确解析嵌套 XML,安全获取 元素的 NAME 属性值及子标签(如 ISREVENUE、MASTERID)的文本内容,避免 NullPointerException,并输出结构化结果。
本文详解如何在 java 中通过 dom api 正确解析嵌套 xml,安全获取 `
在 Java 中解析 XML 时,常见错误是直接调用 getElementsByTagName(...).item(0).getTextContent() 而未校验节点是否存在——当某
以下是一个健壮、可复用的 DOM 解析方案,兼顾安全性、可读性与实用性:
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
✅ 正确解析步骤
-
定位目标元素:使用 getElementsByTagName("GROUP") 获取所有
节点; - 安全获取属性:调用 element.getAttribute("NAME")(注意全大写);
- 安全获取子元素内容:对每个子标签(如 "ISREVENUE")单独查找,并判空;
- 跳过文本节点干扰:getChildNodes() 包含换行与空白文本节点(Node.TEXT_NODE),需显式过滤。
✅ 完整示例代码(含异常防护与格式化输出)
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.io.File;
public class XmlGroupParser {
public static void main(String[] args) {
try {
File xmlFile = new File("C:/Srinivas/NewData.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(xmlFile);
doc.getDocumentElement().normalize(); // 确保文档规范化
NodeList groupList = doc.getElementsByTagName("GROUP");
for (int i = 0; i 0 && nodes.item(0).getFirstChild() != null) {
return nodes.item(0).getFirstChild().getNodeValue().trim();
}
return ""; // 返回空字符串而非 null,避免后续 NPE
}
}
⚠️ 关键注意事项
-
属性名大小写敏感:XML 中
的属性名为 NAME,不是 Name 或 name; -
getTextContent() 风险:若子元素存在但无文本(如
或 ),getTextContent() 返回空字符串;若元素不存在,则 item(0) 为 null → 必须判空; - 避免 getChildNodes() 直接遍历:它会包含换行符、空格等 TEXT_NODE,易导致 ClassCastException(将文本节点误转为 Element),推荐改用 getElementsByTagName() 按标签名精准定位;
- 启用规范模式:调用 doc.getDocumentElement().normalize() 可合并相邻文本节点,提升一致性;
- 依赖建议:JDK 自带 javax.xml.* 已足够,无需额外引入第三方库(如 dom4j)。
运行上述代码,将精确输出您期望的格式:
Name (Group) : "Administration Expenses" Revenue Value : "Yes" MasterID Value : 166 Name (Group) : "Bank Accounts" Revenue Value : "No" MasterID Value : 22 Name (Group) : "Bank OD A/c" Revenue Value : "No" MasterID Value : 11 completed
该方案具备强健性、可维护性与教学示范性,适用于任意深度嵌套、属性驱动的 XML 数据提取场景。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










