代码之家  ›  专栏  ›  技术社区  ›  roeygol

XPath:找到具有两个条件的节点

  •  0
  • roeygol  · 技术社区  · 6 年前

    <iet:aw-data>
      <iet:metadata filter=""/>
      <iet:message-resource>
        <iet:message>תוכניות אחרות שאינן פדראליים</iet:message>
        <iet:customer id="1"/>
        <iet:code>edi.claimfilingindicator.11</iet:code>
        <iet:locale>iw_IL</iet:locale>
      </iet:message-resource>
      <iet:message-resource>
        <iet:message>ספק מועדף הארגון (PPO)</iet:message>
        <iet:customer id="1"/>
        <iet:code>edi.claimfilingindicator.12</iet:code>
        <iet:locale>iw_IL</iet:locale>
      </iet:message-resource>
      .
      .
      .
    </iet:aw-data>
    

    我想建立一个表达式来获取所有节点 code message 它包含了其中每一个的给定参数。

    到目前为止我做的是这样一个表达:

    String exp = "//*[local-name()='message-resource']//*[local-name()='code'][contains(text(), 'edi')]"
    

    现在我想添加 消息 字段作为这个表达式的另一个条件,我需要帮助。

    2 回复  |  直到 6 年前
        1
  •  2
  •   weirdan    6 年前

    可以使用子路径作为谓词。假设您要选择 code message 包含“some message substring”:

    //*[local-name()='message-resource' and ./*[local-name()='message' and contains(text(), 'some message substring')]]//*[local-name()='code'][contains(text(), 'edi')]
    
        2
  •  0
  •   m4gic    6 年前

    //*[local-name()='message-resource']/*[local-name()='code' and contains(text(), 'edi')]/../*[local-name()='message' and contains(text(), 'PPO')]/..