xpath选择第一个子项并检查值

时间:2013-12-11 15:22:50

标签: xml xpath

我想使用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>

2 个答案:

答案 0 :(得分:1)

根据定义,XPath中元素的字符串值是其所有后代文本节点的串联,即直接包含在元素内的所有文本,或其子元素,孙子元素等。

因此,您需要同时检查message的字符串值是否为“OK” message没有任何子元素:

/api_data/message[.="OK"][not(*)]

答案 1 :(得分:0)

为此你需要做/ * [“OK”]

xpath query: /api_data/message/*["OK"]