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

如何使用Groovy从SOAP请求中读取User的id属性值

如何用Groovy从SOAP请求中提取User元素的id属性值

嘿,这事儿用Groovy的XML处理工具就能轻松搞定,我给你演示几种实用的方法,都是基于Groovy自带的XmlSlurper——它对XML的解析和操作特别友好。

首先先把你的SOAP请求XML贴出来方便参考:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:rol="http://www.visa.com/ROLSI"> 
  <soapenv:Header/> 
  <soapenv:Body> 
    <rol:SIGetBatchQueueRequest> 
      <rol:RequestHeader> 
        <rol:User id="******" type="internalId"/> 
        <rol:MemberRole>A</rol:MemberRole> 
      </rol:RequestHeader> 
      <rol:RequestData> 
        <rol:BatchQueueType>AWAITING_ACTION_BQ_PRE_FILING</rol:BatchQueueType> 
        <!--Optional:--> 
        <rol:PageNum>?</rol:PageNum> 
      </rol:RequestData> 
    </rol:SIGetBatchQueueRequest> 
  </soapenv:Body> 
</soapenv:Envelope>

方法1:直接按节点路径访问(最简单)

如果你的SOAP结构固定,直接顺着节点层级找就行,XmlSlurper会自动处理XML的命名空间前缀:

def soapXml = '''上面的SOAP XML内容'''

// 初始化XmlSlurper并解析XML文本
def slurper = new XmlSlurper()
def envelope = slurper.parseText(soapXml)

// 顺着节点路径拿到User元素的id属性
def userId = envelope.Body.SIGetBatchQueueRequest.RequestHeader.User.@id.text()

println userId // 输出 ******

解释:@id表示获取元素的id属性,text()用来提取属性的具体值。

方法2:明确指定命名空间(更稳妥)

如果XML里有多个命名空间,或者你想避免节点名冲突,可以主动声明命名空间后再访问节点:

def soapXml = '''上面的SOAP XML内容'''

def slurper = new XmlSlurper()
def envelope = slurper.parseText(soapXml)

// 声明rol命名空间对应的URI
envelope.declareNamespace(rol: 'http://www.visa.com/ROLSI')

// 用命名空间前缀精准定位节点
def userId = envelope.Body.'rol:SIGetBatchQueueRequest'.'rol:RequestHeader'.'rol:User'.@id.text()

println userId

这种方式更严谨,尤其是在复杂XML场景下不容易出错。

方法3:灵活查找元素(适配结构变化)

如果你的SOAP结构可能有变动,不想硬编码节点路径,可以用深度遍历的方式查找目标元素:

def soapXml = '''上面的SOAP XML内容'''

def slurper = new XmlSlurper()
def envelope = slurper.parseText(soapXml)
envelope.declareNamespace(rol: 'http://www.visa.com/ROLSI')

// 遍历所有节点,找到第一个rol:User元素并取id属性
def userId = envelope.depthFirst().find { it.name() == 'rol:User' }?.@id.text()

println userId

解释:depthFirst()会遍历XML的所有节点,find()方法筛选出符合条件的元素,?.是Groovy的安全导航运算符,避免找不到元素时出现空指针异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:20:19