当XML元素相同时,如何在Groovy中解析XML中的CDATA

当XML元素相同时,如何在Groovy中解析XML中的CDATA,xml,groovy,soapui,Xml,Groovy,Soapui,我有一个XML响应,如下所示,其中包含CDATA以及同名的XML元素 355 阿尔巴尼亚 355 阿尔巴尼亚 ]]> 如何在SOAPUIGroovy中读取代码和名称xml元素的值。我尝试过各种博客上的各种建议,但都没有奏效 另外,我使用的是SOAPUI 5.3.0免费软件,而不是SOAPUI PRO。XML解析器将CDATA部分的内容作为简单的文本节点提供。您需要提取CDATA部分的字符串值并再次解析它 我不知道为什么人们会这样把XML放在CDATA区域中——这是一种反常的做法,如果你对设计

我有一个XML响应,如下所示,其中包含CDATA以及同名的XML元素


355
阿尔巴尼亚
355
阿尔巴尼亚 ]]>
如何在SOAPUIGroovy中读取代码和名称xml元素的值。我尝试过各种博客上的各种建议,但都没有奏效


另外,我使用的是SOAPUI 5.3.0免费软件,而不是SOAPUI PRO。

XML解析器将CDATA部分的内容作为简单的文本节点提供。您需要提取CDATA部分的字符串值并再次解析它


我不知道为什么人们会这样把XML放在CDATA区域中——这是一种反常的做法,如果你对设计XML的人有任何影响,请让他们改变他们的方式。同时,您必须对内容进行两次解析。

需要提取
cdata
部分,然后对其进行解析以获取所需数据

你可以在下面使用


您可以快速在线尝试

谢谢您的回复。我尝试在演示页面中执行代码,它将${tableMap.code}抛出为null。我怎么才能得到这个值?@user3821144,对不起,刚刚修好了,你可以试试。谢谢。它像预期的那样工作。
def response = context.response

assert response, 'response is empty or null'

//Closure to parse and extract the data
def getData = { data, element ->
  def pXml = new XmlSlurper().parseText(data)
  def codes = pXml.'**'.findAll { it.name() == element}  
}

//Get the cdata part
def cdata = getData(response, 'GetISDResult')[0] as String
log.info cdata

//Get the table data as map
def tableMap = getData(cdata, 'Table').inject([:]){m, item -> m[item.code.text()] = item.name.text();m}
log.info tableMap

tableMap.each { log.info "code : ${it.key} and name : ${it.value}" }