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

Groovy过滤action为eSign的XML节点时!=操作符异常问题求助

问题根因
  • 你使用parsed.data.'**'进行深度遍历时,会匹配到所有层级的子节点,包括没有action子节点的节点(比如id、uname、action本身、甚至外层data节点)
  • 对于没有action子节点的节点,调用it.action.text()会返回空字符串,空字符串满足!= 'eSign'的条件,会被纳入删除列表
  • 删除这些节点时会连带删除上层合法的父节点,最终导致所有节点被清空
修复方案

先限定遍历范围为外层data下的直接子data节点,这些节点才包含action字段,修正后代码如下:

import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import groovy.xml.XmlUtil;
import groovy.xml.StreamingMarkupBuilder;
import groovy.xml.*;

def Message processData(Message message) 
{        
    //Body       
    def parsed = new XmlParser().parseText(message.body)
    // 仅匹配外层data下的直接子data节点,过滤action不等于eSign的
    parsed.data.data.findAll { it.action.text() != 'eSign' }.each { it.parent().remove(it) }
    message.body = XmlUtil.serialize(parsed)      
    return message;    
}

如果你只需要提取所有符合条件的uname值,不需要保留XML结构,可以直接用下面的代码获取结果列表:

def eSignUnames = parsed.data.data.findAll { it.action.text() == 'eSign' }.collect { it.uname.text() }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:48:03