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

如何从XML文件提取数据并存入Java数组或ArrayList

从XML提取数据存入Java数组/ArrayList实现方案

针对你给出的XML结构,直接按以下步骤实现即可,不需要复杂的第三方依赖:

第一步:定义数据存储实体

XML中每个<record>节点对应id、full_name两个字段,先写对应的实体类做封装:

public class UserRecord {
    private Integer id;
    private String fullName;

    public UserRecord(Integer id, String fullName) {
        this.id = id;
        this.fullName = fullName;
    }

    public Integer getId() { return id; }
    public String getFullName() { return fullName; }
}

第二步:DOM解析读取XML存入集合

JDK自带DOM解析工具,不需要额外导包,直接写解析逻辑:

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

public class XmlParseTest {
    public static void main(String[] args) {
        // 初始化ArrayList存储结果
        List<UserRecord> recordList = new ArrayList<>();
        try {
            // 加载目标XML文件
            DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
            DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
            Document doc = dBuilder.parse(new File("替换成你的XML文件实际路径"));
            doc.getDocumentElement().normalize();

            // 获取所有record节点
            NodeList recordNodes = doc.getElementsByTagName("record");
            // 遍历节点提取字段
            for (int i = 0; i < recordNodes.getLength(); i++) {
                Element recordEle = (Element) recordNodes.item(i);
                Integer id = Integer.parseInt(recordEle.getElementsByTagName("id").item(0).getTextContent().trim());
                String fullName = recordEle.getElementsByTagName("full_name").item(0).getTextContent().trim();
                recordList.add(new UserRecord(id, fullName));
            }

            // 如果需要转成固定长度数组,直接调用转数组方法即可
            UserRecord[] recordArr = recordList.toArray(new UserRecord[0]);

            // 打印验证结果
            recordList.forEach(record -> System.out.println(record.getId() + " : " + record.getFullName()));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

补充说明

  • 上述代码跑通的前提是XML格式合法,你给出的示例XML缺少闭合的</dataset>标签,实际使用时要补全,否则会报解析错误
  • 如果XML文件体积超过100M,不要用DOM解析(会把全量文件加载到内存占资源),换成SAX或者StAX流式解析即可,核心的字段提取、存入集合的逻辑是通用的
  • 如果字段可能为空,要在parseInt、取文本内容的位置加非空判断,避免空指针或者数字格式转换异常
  • 如果需要用数组而非ArrayList,可以先获取recordNodes.getLength()得到总数据量,直接初始化对应长度的UserRecord数组,遍历节点时直接按下标存入数组即可,不需要先存List再转换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:18:18