
本文详解使用 DOM 解析器在 Java 中遍历 XML 的 节点,准确提取 NAME 属性值及子标签(如 ISREVENUE、MASTERID)的文本内容,避免因空节点导致的 NullPointerException。
本文详解使用 dom 解析器在 java 中遍历 xml 的 `
在 Java 中使用 DOM 解析 XML 时,一个常见误区是直接调用 getElementsByTagName(...).item(0) 而未校验子节点是否存在或是否为有效 Element 类型——这极易引发 NullPointerException(如原代码中 element.getElementsByTagName("ISREVENUE").item(0) 返回 null 时调用 getTextContent())。要稳健地提取结构化 XML 数据(如
以下是一个生产就绪的解析方案,支持您所需的完整输出格式:
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();
factory.setIgnoringElementContentWhitespace(true); // 忽略空白文本节点,提升健壮性
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(xmlFile);
doc.getDocumentElement().normalize();
NodeList groupNodes = doc.getElementsByTagName("GROUP");
for (int i = 0; i 0 && nodes.item(0).getNodeType() == Node.ELEMENT_NODE) {
return nodes.item(0).getTextContent().trim();
}
return ""; // 或返回 "N/A" 等默认值
}
}
关键改进说明:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 属性读取更可靠:使用 element.getAttribute("NAME")(注意大小写敏感),而非 getAttributes().item(0) —— 后者依赖属性顺序且易出错;
- 子元素访问更安全:封装 safeGetTextContent() 方法,显式检查 NodeList 长度和节点类型,彻底规避 NullPointerException;
- 空白处理更专业:启用 setIgnoringElementContentWhitespace(true) 过滤换行/缩进产生的 #text 节点,避免误判;
- 可维护性更强:逻辑解耦,便于扩展(如新增 ISDEEMEDPOSITIVE 字段只需一行调用)。
注意事项:
- XML 属性名严格区分大小写(NAME ≠ name),务必与实际 XML 一致;
- 若子元素可能缺失(如某些
不含 ),safeGetTextContent 已内置兜底逻辑; - 对于超大 XML 文件,DOM 加载内存开销高,建议改用 SAX 或 StAX 流式解析。
通过以上实践,您不仅能稳定输出预期结果,还能构建出可复用于各类 Tally/ERP XML 数据解析的健壮基础模块。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










