XPATH多元素过滤器

21 xpath multiple-conditions

我有以下示例XML结构:

<SavingAccounts>
    <SavingAccount>
       <ServiceOnline>yes</ServiceOnline>
       <ServiceViaPhone>no</ServiceViaPhone>
    </SavingAccount>
    <SavingAccount>
       <ServiceOnline>no</ServiceOnline>
       <ServiceViaPhone>yes</ServiceViaPhone>
    </SavingAccount>
</SavingAccounts>
Run Code Online (Sandbox Code Playgroud)

我需要做的是使用XPATH过滤'SavingAccount'节点,其中'ServiceOnline'的值为'yes'或'ServiceViaPhone'的值为yes.

XPATH应该给我两行!! 我可以过滤'SavingAccount'节点,其中两个元素值都是,如下面的XPATH示例,但我想要做的是一个或元素值比较???

/SavingAccounts/SavingAccount/ServiceOnline[text()='yes']/../ServiceViaPhone[text()='yes']/..
Run Code Online (Sandbox Code Playgroud)

Dim*_*hev 54

这是一个非常基本的XPath功能:撰写一些条件与逻辑运算符and,or和函数not().

and具有更高的优先级比or和运营商都具有比低优先级的关系平等运算符(=,!=,>,>=,&lt;&lt;=).

所以,写它是安全的:A = B and C = D

一些最常见的错误:

  1. 人们写AND和/或OR.请记住,XPath区分大小写.

  2. 人们使用|(union)运算符代替or

最后,这是我的解决方案:

/SavingAccounts/SavingAccount
           [ServiceOnLine='yes' or ServiceViaPhone='yes']


Ant*_*nes 10

/SavingAccounts/SavingAccount[(ServiceOnLine='yes') or (ServiceViaPhone='yes')]
Run Code Online (Sandbox Code Playgroud)

  • @DimitreNovatchev,当你必须区分(和[,然后使用术语括号来指代两者)会产生误导/混淆. (3认同)
  • @DimitreNovatchev,大多数母语为英语的人并不认为"括号"和"括号"是同义词.我绝对不会把括号括起来.和其他人一样,我对你的初步评论感到困惑,特别是因为没有限定符的"括号"通常被理解为方括号. (3认同)