【问题标题】:xpath: combining multiple filters on same levelxpath:在同一级别上组合多个过滤器
【发布时间】:2015-08-05 22:26:29
【问题描述】:

我正在拼命尝试在 xpath 中组合几个过滤器。假设我的数据如下所示:

 <Table name="MyTable1">
  <Item>
    <Status date="2015-03-01" category="one/two">DELETE</Status>
    <Old />
    <Current>
      <Field name="ID">1</Field>
      <Field name="Title">This is my title</Field>
      <Field name="Short_title">my short title</Field>
      <Field name="Order">1</Field>
    </Current>
  </Item>
  <Item>
    <Status date="2015-03-01" category="one/two">EQUAL</Status>
    <Old />
    <Current>
      <Field name="ID">2</Field>
      <Field name="Title">here comes another title</Field>
      <Field name="Short_title">another short one</Field>
      <Field name="Order">2</Field>
    </Current>
  </Item>
</Table>

我的愿望是访问所有“当前”节点

  • 包含状态类别“二”
  • 有一个 状态 包含“删除”

我尝试结合在 stackoverflow 上提出的几个问题:

例如,我的一个查询是:

  • /Table/Item[Status[[contains(@category,'two')] AND [not(contains('DELETE')]]/Current

有什么更好的方法吗?

【问题讨论】:

    标签: xpath


    【解决方案1】:

    您可以使用以下XPath 表达式:

    //Status[contains(@category,"two") and not(text()="DELETE")]/following-sibling::Current
    

    【讨论】:

    • 非常感谢您的快速回答。你帮了很多忙!
    • 我很高兴看到它有所帮助
    【解决方案2】:

    您可以直接将两个布尔表达式与and 组合在一起,不要在每个表达式周围加上方括号。 :

    /Table/Item[Status[contains(@category,'two') and not(contains(., 'DELETE'))]]/Current
    

    【讨论】:

    • 非常感谢您的快速回答。你帮了很多忙!
    猜你喜欢
    • 2015-05-13
    • 1970-01-01
    • 2021-03-28
    • 1970-01-01
    • 1970-01-01
    • 2013-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多