【问题标题】:XPATH Multiple Element FiltersXPATH 多元素过滤器
【发布时间】:2010-10-03 03:28:54
【问题描述】:

我有以下示例 XML 结构:

<SavingAccounts>
    <SavingAccount>
       <ServiceOnline>yes</ServiceOnline>
       <ServiceViaPhone>no</ServiceViaPhone>
    </SavingAccount>
    <SavingAccount>
       <ServiceOnline>no</ServiceOnline>
       <ServiceViaPhone>yes</ServiceViaPhone>
    </SavingAccount>
</SavingAccounts>

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

XPATH 应该返回两行!我可以过滤两个元素值都是 yes 的“SavingAccount”节点,就像下面的 XPATH 示例一样,但我想做的是一个或元素值比较???

/SavingAccounts/SavingAccount/ServiceOnline[text()='yes']/../ServiceViaPhone[text()='yes']/..

【问题讨论】:

    标签: xpath multiple-conditions


    【解决方案1】:

    会

    /SavingAccounts/SavingAccount[ServiceOnline/text()='yes' or ServiceViaPhone/text()='yes']
    

    做这个伎俩?

    目前我没有方便的 XPath 求值器。

    编辑:
    如果我没记错的话,你不需要 text(),所以

    [ServiceOnline='yes' or ServiceViaPhone='yes']
    

    应该足够了,并且更具可读性。

    编辑:
    是的,当然,'or' 用于谓词表达式,我的错。

    【讨论】:

    • /SavingAccounts/SavingAccount[ServiceOnline/text()='yes' or ServiceByPhone/text()='yes']
    • 所以 XPATH 是正确的,除了你需要“或”而不是“|”。但这可能是 .NET XML/XPATH 解析器的特性。
    【解决方案2】:
    /SavingAccounts/SavingAccount[(ServiceOnLine='yes') or (ServiceViaPhone='yes')]
    

    【讨论】:

    • 很好,但不需要括号:)
    • @DimitreNovaatchev,你的意思是,括号?
    • @DimitreNovaatchev,当您必须区分 ( 和 [ 时,使用术语括号来指代两者会产生误导/混淆。
    • @JonL.,我实际上是说 正常,不需要非方括号。
    • @DimitreNovaatchev,大多数以英语为母语的人不认为“括号”和“括号”是同义词。我当然永远不会把括号称为括号。像其他人一样,我对您最初的评论感到困惑,特别是因为没有限定符的“括号”通常被理解为方括号。
    【解决方案3】:

    这是一个非常基本的 XPath 功能:使用逻辑运算符 and、or 和函数 not() 组合多个条件。

    and 的优先级高于 or,两个运算符的优先级均低于 relational 和 equality 运算符(=、@ 987654332@、&gt;、&gt;=、&amp;lt; 和 &amp;lt;=)。

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

    一些最常见的错误:

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

    2. 人们使用|(联合)运算符而不是or

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多