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

Java中如何将大尺寸org.w3c.dom.NodeList拆分为NodeList组成的列表

NodeList 拆分实现方案

org.w3c.dom.NodeList 是只读接口,本身没有提供批量添加元素的构造方法,拆分时需要先自定义简单的NodeList实现,再做分片处理即可,具体实现如下:


1. 简易可变NodeList实现

原生JDK没有提供可直接构造的NodeList实现类,先自定义一个满足基础接口要求的实现:

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.util.List;

public class MutableNodeList implements NodeList {
    private final List<Node> nodes;

    public MutableNodeList(List<Node> nodes) {
        this.nodes = nodes;
    }

    @Override
    public Node item(int index) {
        return index >= 0 && index < nodes.size() ? nodes.get(index) : null;
    }

    @Override
    public int getLength() {
        return nodes.size();
    }
}

2. 拆分逻辑实现

按指定批次大小(你的场景填300)拆分,代码如下:

import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import java.util.ArrayList;
import java.util.List;

public class NodeListSplitter {
    public static List<NodeList> splitNodeList(NodeList original, int batchSize) {
        List<NodeList> result = new ArrayList<>();
        List<Node> tempBatch = new ArrayList<>();
        
        int totalSize = original.getLength();
        for (int i = 0; i < totalSize; i++) {
            tempBatch.add(original.item(i));
            // 凑够批次大小或遍历到最后一个元素时生成批次
            if (tempBatch.size() == batchSize || i == totalSize - 1) {
                result.add(new MutableNodeList(new ArrayList<>(tempBatch)));
                tempBatch.clear();
            }
        }
        return result;
    }

    // 调用示例
    public static void main(String[] args) {
        NodeList bigNodeList = // 你的原始NodeList对象
        List<NodeList> splitResult = splitNodeList(bigNodeList, 300);
    }
}

补充:如果业务场景不需要强制返回NodeList类型,也可以省略自定义MutableNodeList的步骤,直接拆分返回List<List<Node>>使用即可,代码更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:54:09