在XPath中选择相反条件?

3

I have below XML

<Root>
    <Element>
        <batch_id>Jan_22_2021_18</batch_id>
        <proposal_id>130994</proposal_id>
        <proposal_name>Brazil </proposal_name>
        <subregion>1234</subregion>
        <currency>BRL</currency>
    </Element>
    <Element>
        <batch_id>Jan_22_2021_18</batch_id>
        <proposal_id>130994</proposal_id>
        <proposal_name>Brazil </proposal_name>
        <subregion>7225</subregion>
        <currency>BRL</currency>
    </Element>
        <Element>
        <batch_id>Jan_22_2021_18</batch_id>
        <proposal_id>130994</proposal_id>
        <proposal_name>Brazil </proposal_name>
        <subregion>1111</subregion>
        <currency>BRL</currency>
    </Element>
</Root>

以下是XPath

  1. Working:

    /Root/Element[(subregion ='7515') or (subregion ='7225') or (subregion ='1234') or (subregion ='8360') or (subregion ='8385') or (subregion ='8435') or (subregion ='8585')]
    
  2. Not working

    /Root/Element[(subregion !='7515') or (subregion !='7225') or (subregion !='1234') or (subregion !='8360') or (subregion !='8385') or (subregion !='8435') or (subregion !='8585')]
    

你能解释一下为什么吗?

1个回答

2
您有一个逻辑错误。 < p > < /p >

“A或B”的相反是不是“not(A)或not(B)”,而是“not(A或B)”,或者根据De Morgan的等价性,“not(A) and not(B)”。

因此,如果您希望其他未被您的“工作”XPath选择的 Elements 应用逻辑 not()到整个析取上,

/Root/Element[not((subregion ='7515') 
               or (subregion ='7225') 
               or (subregion ='1234') 
               or (subregion ='8360') 
               or (subregion ='8385') 
               or (subregion ='8435') 
               or (subregion ='8585'))]

或者根据相应连词的个别条件:
/Root/Element[    not(subregion ='7515') 
              and not(subregion ='7225') 
              and not(subregion ='1234') 
              and not(subregion ='8360') 
              and not(subregion ='8385') 
              and not(subregion ='8435') 
              and not(subregion ='8585')]

但是他没有使用 not(X = 'abc'),而是使用 X != 'abc',在XPath中这两者并不相同;虽然在这种情况下这不是问题的原因,因为 subregion 总是选择单例,但应该解释一下。 - Michael Kay
虽然这里不是问题,但@MichaelKay正确指出未来的读者也应该知道XPath中not(X = 'abc')X != 'abc'是不同的。请参见Dimitre在此处的答案或其他几个Q/A(例如这里这里),涵盖了这个特定概念。 - kjhughes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接