如何用Groovy提取XML中的ID值?现有脚本输出异常求指导
Groovy提取XML中CustomerQuote节点下ID值的问题修正
原脚本问题分析
- 根节点访问错误:
XmlSlurper.parseText(xml)返回的是XML的根节点<Collection>,因此completeXml已经代表该根节点,后续无需再通过completeXml.Collection访问,这会导致找不到目标节点。 - 过滤条件逻辑错误:
findAll{node-> node.name() == 'ID' }中的node是CustomerQuote节点,其节点名称是CustomerQuote而非ID,因此永远匹配不到目标内容,最终返回空数组。
修正后的脚本
写法一(简洁版)
直接遍历所有CustomerQuote节点,提取每个节点下ID的文本值:
def xml="<Collection><CustomerQuote><ID>99988877766</ID><TypeCode>2059</TypeCode><ApprovalStatusCode>4</ApprovalStatusCode></CustomerQuote><CustomerQuote><ID>99988877755</ID><TypeCode>2059</TypeCode><ApprovalStatusCode>4</ApprovalStatusCode></CustomerQuote></Collection>" def completeXml = new XmlSlurper().parseText(xml); def IDs = completeXml.CustomerQuote.ID*.text(); // 输出:IDs[99988877766, 99988877755]
写法二(显式遍历)
使用collect方法显式处理每个CustomerQuote节点:
def xml="<Collection><CustomerQuote><ID>99988877766</ID><TypeCode>2059</TypeCode><ApprovalStatusCode>4</ApprovalStatusCode></CustomerQuote><CustomerQuote><ID>99988877755</ID><TypeCode>2059</TypeCode><ApprovalStatusCode>4</ApprovalStatusCode></CustomerQuote></Collection>" def completeXml = new XmlSlurper().parseText(xml); def IDs = completeXml.CustomerQuote.collect { customerQuote -> customerQuote.ID.text() } // 输出:IDs[99988877766, 99988877755]
内容的提问来源于stack exchange,提问作者GameBuilder
相关产品推荐
相关产品推荐

