使用XMLSlurper从RESTClient查找XML元素
我正在编写一个Spock测试,其中我有一个REST Web服务,它返回一个这样的XML:
<templates>
<userTemplate id="1109">
<settingsXml/>
<type>USER</type>
<label>template111</label>
<description>template111</description>
</userTemplate>
<userTemplate id="1141" isAutomaticTemplate="true">
<settingsXml/>
<type>USER</type>
<label>An updated user template</label>
</userTemplate>
</templates>
我的测试想要验证特定的userTemplate它不在本文档中。因此,使用HTTP Builder的REST客户端和XMLSlurper,我正在执行以下操作:
res = settingsService.get(path: "templates")
res.status == 200
def delTemplate = res.data.userTemplate.find {
println it.@id == newUserTemplateId
it.@id == newUserTemplateId
}
delTemplate
我会认为在调用find之后delTemplate将为null(因为没有带有该id的模板; expresion println it。@ id == newUserTemplateId总是打印false,在这种情况下newUserTemplateId的值是1171)。
但是,delTemplate的类型为groovy.util.slurpersupport.NoChildren,它似乎包含userTemplate元素。
有趣的是,如果我用与文本相同的XML编写快速脚本(与从REST中读取它相反),res.userTemplate.find { it.@id == 1171 }
按预期返回null。
我做错了什么,或者我怎么能解决这个问题?
没有找到相关结果
已邀请:
1 个回复
凸晴