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

如何让DOM4J的DocumentHelper按整数属性对节点列表排序?

按整数属性排序XML节点的解决方案

你当前用DocumentHelper.sort(pointList, "@Index")是默认按字符串规则排序,会出现"10"排在"2"前面的字母数字排序问题。要实现按整数排序,需要自定义Comparator解析@Index属性的整数值来比较,替换默认排序逻辑。

修改后的代码如下:

private void sortNodesByIndex(Element parent, List<Node> pointList) {
    // 自定义Comparator,按@Index属性的整数值排序
    pointList.sort((node1, node2) -> {
        // 获取两个节点的@Index属性字符串值
        String indexStr1 = node1.valueOf("@Index");
        String indexStr2 = node2.valueOf("@Index");
        // 转换为整数后比较大小
        Integer index1 = Integer.parseInt(indexStr1);
        Integer index2 = Integer.parseInt(indexStr2);
        return index1.compareTo(index2);
    });

    for (Node node : pointList) {
        parent.remove(node);
        parent.add(node);
    }
}

关键说明:

  • 用List.sort()配合自定义Comparator替代DocumentHelper.sort的默认字符串排序
  • 通过node.valueOf("@Index")读取属性值,再用Integer.parseInt转为整数
  • 借助Integer.compareTo()实现整数的自然排序

如果需要处理@Index属性缺失或非整数的异常情况,可以补充判断逻辑:

private void sortNodesByIndex(Element parent, List<Node> pointList) {
    pointList.sort((node1, node2) -> {
        Integer index1 = getValidIndex(node1);
        Integer index2 = getValidIndex(node2);
        return index1.compareTo(index2);
    });

    for (Node node : pointList) {
        parent.remove(node);
        parent.add(node);
    }
}

private Integer getValidIndex(Node node) {
    String indexStr = node.valueOf("@Index");
    if (indexStr == null || indexStr.isEmpty()) {
        // 给缺失属性的节点设置默认值,可按需调整
        return 0;
    }
    try {
        return Integer.parseInt(indexStr);
    } catch (NumberFormatException e) {
        // 处理非整数属性的情况,默认值可自定义
        return 0;
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:05:01