groovy - 如何使用 groovy 解析和更新 SoapUI 请求的 CDATA 部分?
问题描述
我正在尝试编写一个 groovy 脚本来更新 SoapUI 请求的某些 CDATA 部分。
在 SoapUI 和 groovy 方面,我都是新手。
我已经通过使用属性转移成功地完成了我需要的事情,但是,由于我需要在几乎所有测试用例中进行相同的处理,我宁愿在一个可以从任何需要的地方调用的脚本中进行。
我试图模仿 groovy 中的属性转移步骤,但没有成功,因为我似乎无法访问和解析 CDATA 部分。
任何有关如何使用 groovy 解析和更新值的帮助将不胜感激。
请求格式示例如下所示
<soapenv:Envelope xmlns:soapenv="soappath" xmlns:myns="mynamespacepath">
<soapenv:Header/>
<soapenv:Body>
<myns:CMSXMLWebImport>
<myns:xmlIn><![CDATA[<CMSCardRequest xmlns="http://mypath2">
<Group>
<Name>Finance</Name>
<OrgUnit>OU=Finance,OU=Enterprise,DC=DummyDomain</OrgUnit>
<Parent>Enterprise</Parent>
<User>
<Personal>
<FirstName>xxx</FirstName>
<LastName>xxx</LastName>
<Email>xxxx.xxx@xxx.uk</Email>
</Personal>
</User>
</Group>
</CMSCardRequest>]]></myns:xmlIn>
</myns:CMSXMLWebImport>
</soapenv:Body>
</soapenv:Envelope>
解决方案
以下代码:
import groovy.xml.*
def data = '''
<soapenv:Envelope xmlns:soapenv="soappath" xmlns:myns="mynamespacepath">
<soapenv:Header/>
<soapenv:Body>
<myns:CMSXMLWebImport>
<myns:xmlIn><![CDATA[
<CMSCardRequest xmlns="http://mypath2">
<Group>
<Name>Finance</Name>
<OrgUnit>OU=Finance,OU=Enterprise,DC=DummyDomain</OrgUnit>
<Parent>Enterprise</Parent>
<User>
<Personal>
<FirstName>xxx</FirstName>
<LastName>xxx</LastName>
<Email>xxxx.xxx@xxx.uk</Email>
</Personal>
</User>
</Group>
</CMSCardRequest>]]>
</myns:xmlIn>
</myns:CMSXMLWebImport>
</soapenv:Body>
</soapenv:Envelope>
'''
def parser = new XmlSlurper()
def xml = parser.parseText(data)
def cardXml = parser.parseText(xml.Body.CMSXMLWebImport.xmlIn.text())
println "name: ${cardXml.Group.Name.text()}"
println "org unit: ${cardXml.Group.OrgUnit.text()}"
println "first name: ${cardXml.Group.User.Personal.FirstName.text()}"
// or for a somewhat more succinct access pattern
println "---------"
cardXml.Group.with {
println "name: ${Name.text()}"
println "org unit: ${OrgUnit.text()}"
println "first name: ${User.Personal.FirstName.text()}"
}
将导致:
~> groovy solution.groovy
name: Finance
org unit: OU=Finance,OU=Enterprise,DC=DummyDomain
first name: xxx
---------
name: Finance
org unit: OU=Finance,OU=Enterprise,DC=DummyDomain
first name: xxx
~>
运行时。这里的技巧是将 CDATA 部分作为字符串提取出来,然后单独解析该部分。
我还在第二个示例中使用了 groovywith
方法,以更短的方式访问相同的数据。
推荐阅读
- c++ - 为什么链接器不会在下面的代码中发出错误?
- c - 您如何使用标头中的 strcat()
连接两个指针指向的字符串? - angular - 带有 Material Design 的表格中的单选按钮
- reactjs - Heroku 部署失败 - reactjs app/webpack?
- wordpress - 在 Wordpress 中获取父页面自定义字段到页脚
- enterprise-architect - Sparx EA VBScript。如何自动布局图表?
- c# - 这种 RPG 游戏效果系统的设计有什么问题,或者我如何从不同的派生效果列表中删除所有特定效果?
- sql - 为一个字符串选择多列(按日期)
- python - python popen Thread对象将stdout读取到变量
- angular - PrimeNG 单选按钮以编辑形式 ANGULAR 5