以下是一个示例 XML:
<root>
<persons>
<person gender="female">X</person>
<person gender="female">Y</person>
<person gender="male">Z</person>
</persons>
</root>
我想gender="male"
通过使用 GPath 来获取元素计数。
我有以下代码:
def xml =
'''
<root>
<persons>
<person gender="female">X</person>
<person gender="female">Y</person>
<person gender="male">Z</person>
</persons>
</root>
'''
def slurper = new XmlSlurper()
def parsedText = slurper.parseText(xml)
def locator = 'persons.person[@gender="male"]'
def elements = Eval.x(parsedText, "x.${locator}")
println elements.size()
它给了我错误:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
Script1.groovy: 1: unexpected token: = @ line 1, column 25.
x.persons.person[@gender="male"]
^
1 error
该代码仅用于问题的演示目的。在实际情况下,我有一个实用方法,它接受 XML 和 GPath,如果给定 GPath 可以找到任何元素,则返回。
更新:1
以下是实际的实用方法,它将 xml 和定位器(GPath)作为参数并检查是否有任何元素的路径与提供的定位器匹配。
public static void verifyElementExists(String xml, String locator) throws NoElementFoundException {
def slurper = new XmlSlurper()
def parsedText = slurper.parseText(xml)
def elements = Eval.x(parsedText, "x.${locator}")
if(elements.size() == 0) {
throw new NoElementFoundException()
}
}