使用XPATH查找特定节点是否出现某些值

时间:2013-07-24 17:15:44

标签: xpath

我有以下XML:

<query> 
    <row> 
        <EMPLID>001001</EMPLID>
        <NAME>Smith,Jim</NAME> 
        <DEPT>2929</DEPT>
        <DED_CUR>37.50</DED_CUR> 
    </row>
    <row> 
        <EMPLID>001004</EMPLID>
        <NAME>Green, Bill</NAME> 
        <DEPT>3498</DEPT>
        <DED_CUR>37.50</DED_CUR> 
    </row>
</query>

有没有办法使用XPATH来说出类似

的内容
If no DEPT node contains 5555 or 7777, then do the following....

如果DEPT 5555或7777中的查询中没有员工,那么目的就是做一些特别的事情。

2 个答案:

答案 0 :(得分:2)

您可以使用count()查找匹配特定值的DEPT个节点的出现次数(在此示例中为77775555

count(//DEPT[text() != '7777' and text() != '5555'])

与您的示例中一样,您也可以使用条件在XPath中对此结果做出反应

if (count(//DEPT[text() != '7777' and text() != '5555']) > 0) then ('Found at least one') else ('Found none')

答案 1 :(得分:2)

您可以使用=来检查两个序列中是否存在共同元素。即检查DEPT 5555或DEPT 7777中是否有人(= DEPT 5555中没有人,DEPT 7777中没有人):

if (not(//DEPT = ("5555",  "7777"))) then ...

或者,如果您想检查,如果DEPT 5555中没有人或DEPT 7777中没有人:

if (not(//DEPT[. = "5555"]) or not(//DEPT[. = "7777"])) then ...

或等效,可能更快:

if (count(distinct-values(//DEPT[. = ("5555", "7777")])) < 2) then ...