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

使用Java DOM解析XML为何无法获取到name属性值?

JUnit DOM解析XML无输出问题排查

先把你的测试代码贴出来方便分析:

@Test 
public void testDolaAmeng() throws Exception { 
    DocumentBuilderFactory dy = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder db = dy.newDocumentBuilder(); 
    File f = new File("E:/JavaApps/day02/src/_05XML/connect.xml"); 
    Document dc = db.parse(f); 
    NodeList nl = dc.getElementsByTagName("linkman"); 
    Element et = (Element) nl.item(1); 
    String name1 = et.getAttribute("name"); 
    System.out.println(name1); //未获取到任何内容..... 
    // Element son1 =(Element)et.getElementsByTagName("name").item(0); 
    // String...
}

我帮你梳理几个最可能导致无输出的原因,你可以逐一排查:

  • 索引错误或元素数量不足:NodeList的索引是从0开始的!你用nl.item(1)获取的是第二个元素,但如果你的XML文件里只有1个,这个方法会返回null。如果后续调用getAttribute("name"),理论上会抛出NullPointerException,但要是你没注意到JUnit测试失败(比如只看控制台没看测试结果面板),就会误以为是无输出。先检查XML里的数量,要是只有1个,改成nl.item(0)试试。

  • XML文件路径不正确:你用的是绝对路径,先确认这个路径下真的存在connect.xml文件!如果文件不存在,db.parse(f)会抛出IO异常,而你的方法直接throws Exception,JUnit会直接标记测试失败,根本走不到System.out.println那一步,自然没有输出。可以在db.parse(f)前加一行调试代码:System.out.println(f.exists());,看看输出是true还是false,要是false,赶紧修正文件路径。

  • 混淆了属性和子元素:看你注释掉的代码,你似乎尝试过获取子元素?会不会你的XML里,的名称不是以属性形式存在,而是子元素?比如XML结构是这样的:

    <linkman>
      <name>张三</name>
    </linkman>
    

    而不是<linkman name="张三"/>?如果是前者,getAttribute("name")会拿到空字符串,所以控制台没有有效输出。这时候就需要用你注释里的方式,先获取子元素再取文本内容:

    Element son1 = (Element) et.getElementsByTagName("name").item(0);
    String name1 = son1.getTextContent();
    
  • JUnit测试未正确执行:先确认你的@Test注解是否正确导入——JUnit4是org.junit.Test,JUnit5是org.junit.jupiter.api.Test。如果注解不对,这个方法不会被JUnit识别为测试用例,自然不会执行也没有输出。另外有些IDE默认会隐藏JUnit的控制台输出,你可以去IDE设置里检查,比如IntelliJ要确保「Show console when running tests」选项是勾选状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:59:43