我想使用xpath进行单元测试,我想做什么:
<?xml version="1.0"?>
<api_data>
<message>OK</message>
<status>200</status>
<data>
<name>John</name>
<email>john@gmail.com</email>
</data>
</api_data>
现在我想检查名称是john
,电子邮件是john@gmail.com
xpath查询:/api_data[message="OK"]
这很好用,现在是下一个例子:
<?xml version="1.0"?>
<api_data>
<message><value>OK</value></message>
<status><value>200</value></status>
<data>
<name><value>John</value></name>
<email><value>john@gmail.com</value></email>
</data>
</api_data>
xpath查询:/api_data[message="OK"]
这仍然匹配......但我不想那样......所以我想要它更严格......但是怎么样?
我不希望与值子匹配,所以只匹配<value>
答案 0 :(得分:1)
根据定义,XPath中元素的字符串值是其所有后代文本节点的串联,即直接包含在元素内的所有文本,或其子元素,孙子元素等。
因此,您需要同时检查message
的字符串值是否为“OK”和 message
没有任何子元素:
/api_data/message[.="OK"][not(*)]
答案 1 :(得分:0)
为此你需要做/ * [“OK”]
xpath query: /api_data/message/*["OK"]