Xml XPath基于多个其他节点的属性排除节点

Xml XPath基于多个其他节点的属性排除节点,xml,xpath,Xml,Xpath,我正在尝试针对下面的XML编写XPath,这将为特定的@rsp_cd获取列表中的所有节点,其中@act_cd不存在于带有@id='ActExcludeList'的列表中 <resp-env> <cmd-resp> <static> <list id="ResponseActionList"> <listRow rsp_cd="R1" act_cd="A1" act_tx="A1 Te

我正在尝试针对下面的XML编写XPath,这将为特定的@rsp_cd获取列表中的所有节点,其中@act_cd不存在于带有@id='ActExcludeList'的列表中

<resp-env>
   <cmd-resp>
      <static>
         <list id="ResponseActionList">
            <listRow rsp_cd="R1" act_cd="A1" act_tx="A1 Text"/>
            <listRow rsp_cd="R1" act_cd="A2" act_tx="A2 Text"/>
            <listRow rsp_cd="R1" act_cd="A4" act_tx="A4 Text"/>
            <listRow rsp_cd="R1" act_cd="A5" act_tx="A5 Text"/>
            <listRow rsp_cd="R1" act_cd="A6" act_tx="A6 Text"/>
            <listRow rsp_cd="R1" act_cd="A7" act_tx="A7 Text"/>
            <listRow rsp_cd="R2" act_cd="A1" act_tx="A1 Text"/>
            <listRow rsp_cd="R2" act_cd="A2" act_tx="A2 Text"/>
            <listRow rsp_cd="R2" act_cd="A3" act_tx="A3 Text"/>
            <listRow rsp_cd="R2" act_cd="A4" act_tx="A4 Text"/>
            <listRow rsp_cd="R2" act_cd="A5" act_tx="A5 Text"/>
            <listRow rsp_cd="R2" act_cd="A6" act_tx="A6 Text"/>
         </list>
         <list id="ActExcludeList">
            <listRow act_cd="A2"/>
            <listRow act_cd="A3"/>
         </list>
      </static>
   </cmd-resp>
</resp-env>
我可以通过以下方法排除特定@act_cd的节点:

//static/list[@id='ResponseActionList']/listRow[@rsp_cd='R2']
//static/list[@id='ResponseActionList']/listRow[@rsp_cd='R2' and @act_cd!='A2']
我想从上面的第一个表达式中排除所有节点,其中@act_cd属性不在此表达式的结果中:

//static/list[@id='ActExcludeList']/listRow/@act_cd
我试过这样的东西,我没想到会奏效,我不知道下一步该怎么做:

//static/list[@id='ResponseActionList']/listRow[@rsp_cd='R2' and not(contains(//static/list[@id='ActExcludeList']/listRow/@act_cd,@act_cd))]

contains
函数用于查找其他字符串中的子字符串,而不是节点集中的值。您要查找的运算符是
=
,它在XPath中是存在量化的-表达式
a=b
a
和/或
b
是节点集,如果集
a
中的任何节点与
b
中的任何节点匹配,则该表达式将成功

//static/list[@id='ResponseActionList']/listRow[@rsp_cd='R2' and
    not(@act_cd = //static/list[@id='ActExcludeList']/listRow/@act_cd)]

完美的我想这很容易。谢谢