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

如何修改Java代码读取XML文件中的所有Customer节点

解决XML DOM读取所有Customer节点的问题

嘿,我一眼就瞅出问题所在啦!你当前的代码只抓取了第一个<Customer>节点,完全没遍历所有的Customer元素。咱们调整下代码逻辑,就能轻松读取任意数量的Customer记录了。

先确认你的XML内容:

<Customers> 
  <Customer Name="Test_91" Code="91" Purpose="Supplier" /> 
  <Customer Name="Test_92" Code="92" Purpose="Receiver" /> 
</Customers>

原代码的问题分析

你原来的代码里,doc.getElementsByTagName("Customers")获取的是根节点<Customers>的列表(整个XML里就这一个根节点),然后在循环里只通过eElement.getElementsByTagName("Customer").item(0)取了第一个Customer元素,自然看不到第二条记录。

修改后的代码

咱们直接获取所有<Customer>节点的列表,然后逐个遍历处理:

import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import org.w3c.dom.Element;
import java.io.File;

public class XMLReaderDOM {
    public static void main(String argv[]) {
        try {
            File fXmlFile = new File("Customers.xml");
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(fXmlFile);
            doc.getDocumentElement().normalize();

            System.out.println("Root element :" + doc.getDocumentElement().getNodeName());

            // 直接获取所有Customer节点的集合
            NodeList customerList = doc.getElementsByTagName("Customer");

            // 遍历每一个Customer节点
            for (int temp = 0; temp < customerList.getLength(); temp++) {
                Node nNode = customerList.item(temp);
                System.out.println("\nCurrent Element :" + nNode.getNodeName());

                if (nNode.getNodeType() == Node.ELEMENT_NODE) {
                    Element customerElement = (Element) nNode;
                    // 直接从当前Customer元素读取属性
                    System.out.println("Customer Name : " + customerElement.getAttribute("Name"));
                    System.out.println("Code : " + customerElement.getAttribute("Code"));
                    System.out.println("Purpose : " + customerElement.getAttribute("Purpose"));
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

改动说明

  1. 获取正确的节点集合:把doc.getElementsByTagName("Customers")改成doc.getElementsByTagName("Customer"),这样拿到的是所有Customer节点的列表,不管有多少条记录都能覆盖到。
  2. 遍历每个Customer节点:循环处理customerList里的每个节点,每个节点对应一条Customer记录。
  3. 直接读取当前节点属性:不需要嵌套获取第一个Customer,直接从当前转换后的customerElement里读取Name、Code、Purpose属性,逻辑更清晰。

这样修改后,不管你的XML里有多少个Customer节点,代码都能逐个读取它们的信息啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:02:20