当XML元素相同时,如何在Groovy中解析XML中的CDATA
我有一个XML响应,如下所示,其中包含CDATA以及同名的XML元素当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区域中——这是一种反常的做法,如果你对设计
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}" }