我有这个xml。
<?xml version="1.0" encoding="utf-8"?>
<entry>
<id>E0000</id>
<link href="href">
<inline>
<entry>
<link href="href">
<inline>
<feed>
<entry>
<id>E0001</id>
<content type="application/xml">
<props>
<status/>
</props>
</content>
</entry>
<entry>
<id>E0002</id>
<content type="application/xml">
<props>
<status/>
</props>
</content>
</entry>
<entry>
<id>E0003</id>
<content type="application/xml">
<props>
<status>S00</status>
</props>
</content>
</entry>
</feed>
</inline>
</link>
</entry>
</inline>
</link>
</entry>
[我正在使用xmlSlurper来检查最深的“ entry”标签中是否有一个同时具有“ id” =“ E0001” AND“ status” =“ S00”或“ id” =“ E0002” AND“ status” = “ S00”。这样的东西:(id = E0001 AND status = S00)或(id = E0002 AND status = S00)。
我正在使用此代码(正在使用Groovy Web Console进行测试)。
def text = '<?xml version=\"1.0\" encoding=\"utf-8\"?><entry><id>E0000</id><link href=\"href\"><inline><entry><link href=\"href\"><inline><feed><entry><id>E0001</id><content type=\"application/xml\"><props><status>S00</status></props></content></entry><entry><id>E0002</id><content type=\"application/xml\"><props><status/></props></content></entry><entry><id>E0003</id><content type=\"application/xml\"><props><status/></props></content></entry></feed></inline></link></entry></inline></link></entry>'
def response = new XmlSlurper().parseText(text)
def result = (response.link.inline.entry.link.inline.feed.find {(it.entry.content.props.status.text() == 'S00' & it.entry.id.text().contains('E0001')) | ((it.entry.content.props.status.text() == 'S00' & it.entry.id.text().contains('E0002')))}).size() > 0 ? 'true' : 'false'
println(result)
但是即使status = S00在id = E0003的“ entry”标签下,结果还是正确的,这是不需要的。如何调整上面的代码?
感谢Cfrick的建议。我已经对其进行了调整,并且可以使用。
def result = (response.link.inline.entry.link.inline.feed.entry.find {(it.content.props.status.text() == 'S00' & it.id.text().contains('E0001')) | ((it.content.props.status.text() == 'S00' & it.id.text().contains('E0002')))}).size() > 0 ? 'true' : 'false'