当XML元素相同时如何在Groovy中解析XML中的CDATA [英] How to parse CDATA in XML in Groovy when xml elements are same

查看:16
本文介绍了当XML元素相同时如何在Groovy中解析XML中的CDATA的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <GetISDResponse xmlns="http://www.webserviceX.NET">
         <GetISDResult><![CDATA[<NewDataSet>
  <Table>
    <code>355</code>
    <name>Albania</name>
  </Table>
  <Table>
    <code>355</code>
    <name>Albania</name>
  </Table>
</NewDataSet>]]></GetISDResult>
      </GetISDResponse>
   </soap:Body>
</soap:Envelope>

如何读取Soapui Groovy中的code和name XML元素的值。我尝试了各种博客上的各种建议,但都没有结果

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

推荐答案

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

您可以使用下面的Script Assertion

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}" }

您可以快速在线尝试Demo

这篇关于当XML元素相同时如何在Groovy中解析XML中的CDATA的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆