XPath: найти узел с двумя условиями - PullRequest
0 голосов
/ 29 августа 2018

Я получил этот XML:

<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')]"

Теперь я хочу добавить поле message в качестве другого условия к этому выражению, и мне нужна помощь с этим.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Моя версия

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

Просто замените 'PPO' на то, что вы ищете в сообщении.

0 голосов
/ 30 августа 2018

Вы можете использовать подпуть в качестве предиката. Предположим, вы хотите выбрать code s ресурсов сообщений, где message содержит «некоторую подстроку сообщения»:

//*[local-name()='message-resource' and ./*[local-name()='message' and contains(text(), 'some message substring')]]//*[local-name()='code'][contains(text(), 'edi')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...