我遇到了一个问题,就是找到一种好的方法来处理xml,以便在其他节点之间找到一些节点。例如:
String test = '''
<Library>
<Books>
<Book>
<Title>Hello</Title>
<Author>John Doe</Author>
<Publication>2008</Publication>
</Book>
<Book>
<Title>Bye</Title>
<Author>Mary Derp</Author>
<Publication>2011</Publication>
</Book>
[...]
</Books>
</Library>'''
def xml = new XmlSlurper().parseText(test)
现在我想知道是否有任何书的标题是“Bye”而作者是“Mary Derp”。首先想到的是find-method,但它会寻找“Bye”和“Mary Derp”的任何外观。
因此,例如,该方法应该寻找标题“Hello”和作者“Mary Derp”,它应该说是假的,因为没有这个标题和作者的书。
答案 0 :(得分:0)
这就是它的方式:
import groovy.util.XmlSlurper
String input = '''
<Library>
<Books>
<Book>
<Title>Hello</Title>
<Author>John Doe</Author>
<Publication>2008</Publication>
</Book>
<Book>
<Title>Bye</Title>
<Author>Mary Derp</Author>
<Publication>2011</Publication>
</Book>
[...]
</Books>
</Library>'''
def slurped = new XmlSlurper().parseText(input)
assert slurped.Books.Book.find { it.Title == 'Bye' && it.Author == 'Mary Derp' }.size() == 1
assert slurped.Books.Book.find { it.Title == 'Hello' && it.Author == 'Mary Derp' }.size() == 0
find
查找搜索值的任何外观,但特定节点。
答案 1 :(得分:0)
您可以使用以下内容:
boolean isBookPresent(Object xml, String title, String author) {
def myBook = xml.depthFirst().findAll { it.Title == title && it.Author == author}
return myBook.size() > 0
}
演示:
但是,如果您的目标是在答案中没有标题为Bye
Mary Derp
//Book[Title='Bye' and Author='Mary Derp']
的书籍的情况下使采样器失败,那么XPath断言的更简单方法就是:
将以下表达式放入“XPath Assertion”区域:
tabStyle
如果回复不包含您正在寻找的书籍 - JMeter会将采样器标记为失败
有关通过断言有条件地设置JMeter采样器结果的更多信息,请参阅How to Use JMeter Assertions in Three Easy Steps文章。