我最近开始使用rest assured测试一些XML。下面是一个例子:
<activity>
<shopping>
<category type="groceries" label="chocolate" />
<category type="groceries" label="chocolate" />
<category type="present" label="chocolate" />
<container number="eight" color="green" />
</shopping>
<shopping>
<category type="groceries" label="chocolate" />
<category type="groceries" label="chocolate" />
<category type="present" label="chocolate" />
<container number="eight" color="green" />
</shopping>
<shopping>
<category type="groceries" label="chocolate" />
<category type="groceries" label="chocolate" />
<category type="present" label="chocolate" />
<container number="eight" color="green" />
</shopping>
</activity>
我想在这里实现的是,检查每次购物是否有一个容器号="8",然后检查每个容器是否有颜色="绿色"。这是代码:
assertThat(xmlPath.getList("activity.shopping.list().container.findAll{it.@number == 'eight'}.@color", String.class), everyItem(equalTo("green")));
这工作得非常好,当我调试这一点时,我得到了我想要实现的东西:
List <String> lista = xmlPath.getList("activity.shopping.list().container.findAll{it.@number == 'eight'}.@color", String.class);
这是一个三元素列表,其中每个元素都等于“绿色”。
但当我试图检查每一次购物是否都有一个类别type=“present”,然后检查这些类别是否都有label=“chocolate”,我收到一个空列表:
List <String> lista2 = xmlPath.getList("activity.shopping.list().category.findAll{it.@type == 'present'}.@label", String.class);
任何想法我错过了什么或解决方案应该是什么样子?非常感谢任何帮助。
我设法找到了解决办法。首先,我想说明为什么你的建议没有让我满意。这是真的,例如,它可以工作,但如果xml看起来像这样,它就不能工作。
<activity>
<shopping>
<category type="groceries" label="chocolate" />
<category type="groceries" label="chocolate" />
<container number="eight" color="green" />
</shopping>
<shopping>
<category type="groceries" label="chocolate" />
<category type="groceries" label="chocolate" />
<category type="present" label="chocolate" />
<category type="present" label="chocolate" />
<container number="eight" color="green" />
</shopping>
<shopping>
<category type="groceries" label="chocolate" />
<category type="groceries" label="chocolate" />
<category type="present" label="chocolate" />
<container number="eight" color="green" />
</shopping>
</activity>
@Test
public void test3() {
final XmlPath xmlPath = new XmlPath(TestXML2);
assertThat(xmlPath.getList("activity.shopping.category.findAll{it.@type == 'present'}.@label", String.class), everyItem(equalTo("chocolate")));
}
在这种情况下,测试仍然是通过的,即使不是在每一次购物中,我们都有
我设法弄明白的是,在列表上绘制购物地图,然后在循环中检查类别:
@Test
public void test4(){
List<Node> shoppings = new XmlPath(TestXML2).getList("activity.shopping.list()");
for (Node categories : shoppings) {
String val = categories.getPath("category.findAll{it.@type == 'present'}.@label");
assertThat(val, equalTo("chocolate"));
}
}
对于上面的例子,这个测试会像预期的那样失败,因为它会正确地检查在每个购物中是否有期望的类别和期望的属性。
这只是猜测,但也许你需要一个。list()
在之后。类别
?
注意:你可能想调用变量容器
...
我有一个XML文件,我想取两个值。以下是XML: 我想让我们说一下<代码> 这是我尝试过的代码,但它不起作用: 有人能给我一个工作的例子吗?我是Java和XML的新手。
我使用最新的freemarker版本2.3.23我有列表,其中包含用户对象,用户对象很简单,只包含名称属性。我的ftl文件如下所示: 我的Java代码如下所示: 错误显示如下:
} 我想从这个json对象中获取值。 我在下面试过了,但没有成功。
问题内容: 我有一个名为“ Test”的表,其中包含两个字段“ qnId”和“ Answers”。’qnId’存储一个uuid,’Answers’是一个jsonb数组,大致如下所示: 我该如何使用value来检索of的值。如何使用普通的SQL查询检索值 问题答案: 演示:db <>小提琴 您可以用来将数组元素扩展为每一行。之后,您可以使用运算符(文档)过滤正确的元素:
我有一个XMLPath对象,我想为一些节点取属性名。例如, 对于这个XML,什么是XMLPath表达式来获取的属性? 我可以通过以下内容获取md:EntityDescriptor的entityID: 但是对于位置属性,我想得到 我得到的输出是,其他什么都没有。
我有一个数据就像 我想使用ES6高阶函数获得每个对象的名称,而不使用for或foreach。 我尝试过和但不知道何时使用什么