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

如何使用JDOM获取XML中driverJars节点下的driverJar子节点值?

解决JDOM获取XML子节点文本值的问题

问题分析

你遇到的核心问题有两个:

  • 调用getText()却打印出节点对象,大概率是节点名称不匹配(比如常量DRIVER_JAR的字符串值和XML里的driverJar大小写/拼写不一致),导致获取到的是空节点,getText()返回空,打印时输出节点的默认字符串表示。
  • 存入description对象时,错误使用toString()获取节点文本,且每次循环都新建ArrayList,导致最终只保留最后一个节点的错误值。

解决方案

1. 确保节点名称常量匹配XML

首先检查你的常量定义,确保字符串值和XML节点名完全一致:

private static final String DRIVER_JARS = "driverJars";
private static final String DRIVER_JAR = "driverJar";

如果常量是全大写(比如"DRIVER_JAR"),会和XML里的driverJar不匹配,导致getChildren()拿到空列表或空节点。

2. 正确获取节点文本值

使用getText()或getTextTrim()(推荐后者,自动去除文本前后空白字符)获取节点的文本内容,而非toString()(这是输出节点的调试信息)。

3. 修正列表赋值逻辑

不要在循环内每次新建ArrayList,应该先初始化一个列表,逐个添加driverJar的文本值后,再一次性设置到description对象中。

修正后的代码示例

解决打印问题的代码

if (element.getChild(DRIVER_JARS) != null) {
    Element driverJarsElement = element.getChild(DRIVER_JARS);
    List<Element> driverJarElementList = driverJarsElement.getChildren(DRIVER_JAR);
    for (Element driverJarElement : driverJarElementList) {
        System.out.println(driverJarElement.getTextTrim()); // 输出ojdbc11.jar、orai18n.jar等
    }
}

解决存入description对象的代码

String productId = element.getChildTextTrim(PRODUCT_ID);
String productName = element.getChildTextTrim(PRODUCT_NAME);

List<String> driverJarList = new ArrayList<>();
Element driverJarsElement = element.getChild(DRIVER_JARS);
if (driverJarsElement != null) {
    List<Element> driverJarElementList = driverJarsElement.getChildren(DRIVER_JAR);
    for (Element driverJarElement : driverJarElementList) {
        driverJarList.add(driverJarElement.getTextTrim());
    }
}
description.setDriverJars(driverJarList);

额外提示

  • 如果XML存在命名空间,需要在getChild()和getChildren()方法中传入命名空间参数,否则会匹配不到节点。
  • 单个节点的文本获取可以直接用getChildTextTrim(),但多子节点场景必须遍历子元素列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:35:19