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

XML标签迭代处理异常:set4置空后输出<NameList/>问题排查

解决XML处理后输出<NameList/>的异常问题

问题分析

原代码的核心问题在于,处理entry为set4的<Name>节点时,仅将对象属性设为null但未从列表中移除该节点,后续XML序列化逻辑因对象核心属性为空,错误地将所有节点剔除,最终输出空的<NameList/>。同时使用forEach直接修改原列表元素的方式,容易引发序列化时的意外行为。

解决方案

正确思路是:对符合条件的节点做属性修改,直接过滤掉不需要保留的节点,生成新的处理后列表,避免修改原列表带来的副作用。

修正后的代码如下:

import java.util.List;
import java.util.stream.Collectors;

// 假设date值已预先定义为"2022-03-03"
List<Name> processedNameList = nameList.stream()
    // 处理set3场景,添加date属性对应XML标签
    .map(name -> {
        if ("set3".equals(name.getNameType().getEntry())) {
            name.setDate("2022-03-03");
        }
        return name;
    })
    // 过滤掉entry为set4的节点,不保留在结果列表中
    .filter(name -> !"set4".equals(name.getNameType().getEntry()))
    .collect(Collectors.toList());

代码说明

  1. map操作:遍历每个<Name>节点,当entry值为set3时,为节点添加date属性,对应XML中的<date>标签。
  2. filter操作:直接移除entry值为set4的<Name>节点,确保最终结果仅保留需要的节点。
  3. collect生成新列表:通过Collectors.toList()生成处理后的新列表,彻底避免修改原列表导致的序列化异常。

使用该代码处理后,序列化得到的XML会与预期完全一致:仅保留带有<date>标签的test1节点,test2对应的节点被直接剔除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 13:01:03