1

我有以下 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 中的查询中没有员工,则目的是做一些特殊的事情。

4

2 回答 2

1

您可以使用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')
于 2013-07-24T18:04:27.773 回答
1

您可以使用 = 检查两个序列中是否存在共同元素。即检查是否没有人在 5555 部门或 7777 部门(= 5555 部门没有人,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 ...
于 2013-07-24T18:07:40.353 回答