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

读取XML节点时返回null值问题求助(附代码与XML示例)

问题:读取XML节点值时持续获取到null

我在尝试读取XML节点值时一直拿到null,XML结构示例如下:

<document> 
  <user>ss</user> 
  <password >ssss</password > 
</document>

实际返回结果为:[user: null] [password: null],我的Java代码如下:

public class stres() { 
    public static void main(String[] args) throws SQLException, ParserConfigurationException, SAXException, IOException { 
        try { 
            String resulturl ="my url"; 
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
            DocumentBuilder db = dbf.newDocumentBuilder(); 
            Document doc = db.parse(resulturl); 
            NodeList documentt = doc.getElementsByTagName("document"); 
            for (int i = 0; i < documentt.getLength(); i++) { 
                Element data = (Element) documentt.item(0); 
                Node user = data.getElementsByTagName("user").item(0); 
                Node password = data.getElementsByTagName("password").item(0); 
            } 
        } catch(Exception e) { 
            e.printStackTrace(); 
        } 
    } 
}

请求帮忙排查问题原因。


问题排查与解决

我帮你梳理了下,主要有两个关键问题导致你拿到null:

1. 没有提取节点的文本内容

你已经成功获取到了user和password节点对象,但直接输出节点本身并不会自动返回它的文本值。你需要调用getTextContent()方法来获取节点里的实际内容。

2. 循环中固定取第0个document节点

你的for循环里写的是documentt.item(0),这会导致不管循环多少次,都只会处理第一个document节点。虽然你的XML里可能只有一个document,但为了逻辑严谨,应该改成documentt.item(i)。

另外提个小细节:你的XML里password标签有多余的空格(<password >),虽然XML解析器通常会忽略这个,但建议改成规范的<password>,避免不必要的解析问题。

修改后的代码示例

public class stres { // 注意原代码类定义多了括号,已修正
    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException { 
        try { 
            String resulturl = "my url"; 
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
            DocumentBuilder db = dbf.newDocumentBuilder(); 
            Document doc = db.parse(resulturl); 
            // 规范化XML,消除空白节点干扰
            doc.getDocumentElement().normalize();
            
            NodeList documentt = doc.getElementsByTagName("document"); 
            for (int i = 0; i < documentt.getLength(); i++) { 
                Element data = (Element) documentt.item(i); // 修正循环节点索引
                // 获取user节点并提取文本,增加空判断避免空指针
                Node userNode = data.getElementsByTagName("user").item(0);
                String user = userNode != null ? userNode.getTextContent() : "N/A";
                // 获取password节点并提取文本
                Node passwordNode = data.getElementsByTagName("password").item(0);
                String password = passwordNode != null ? passwordNode.getTextContent() : "N/A";
                
                // 输出正确的节点值
                System.out.println("[user: " + user + "] [password: " + password + "]");
            } 
        } catch(Exception e) { 
            e.printStackTrace(); 
        } 
    } 
}

额外说明

  • 加上doc.getDocumentElement().normalize()是为了消除XML中的空白节点,避免某些情况下getTextContent()拿到空字符串的问题。
  • 增加了null判断,防止节点不存在时出现空指针异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:45:47