xpath, идентифицирующий значение в середине пути по критериям позже в пути - PullRequest
0 голосов
/ 30 января 2020

Итак, у меня есть набор XML, который выглядит примерно так:

<root>
  <trunk>
    <branch>
      <name>Object</name>
      <state>OK</status>
      <details>
        <detail>
          <type>ABC</type>
          <location>Alpha</location>
        </detail>
      </details>
    </branch>
    <branch>
      <name>Object</name>
      <state>OK</status>
      <details>
        <detail>
          <type>ABC</type>
          <location>Beta</location>
        </detail>
      </details>
    </branch>
  </trunk>
</root>

Если я сделаю следующий Xpath:

contains(/root/trunk/branch[name='Object']/state,'OK') 

, я получу два ответа. В результате я больше не могу делать логи Xpath c, например:

contains(/root/trunk/branch[name='Object']/state,'OK') and contains(/root/trunk/branch[name='Object']/details/detail/location, 'Alpha')

Если я это сделаю, я получаю ошибку:

"Unable to perform XPath operation. A sequence of more than one item is not allowed as the first argument of contains() ('Alpha','Beta')"

Примечание : Приведенная выше логика c прекрасно работает, если есть только одна ветвь с именем «Объект».

Я немного покопался и нашел концепцию Оси, которая может позволить мне перемещаться, но я не могу обернуть голову вокруг объяснения достаточно, чтобы превратить его в некий синтаксис, и примеры, которые я нашел до сих пор, не совсем в той же степени сложности, с которой я застрял.

Я признаю, что я спотыкаюсь об этом немного слепо, так как это всего лишь мое второе знакомство с данными XML, поэтому я, возможно, задаю вопрос неправильно или даже смотрю на проблему совершенно неправильно.

Моя среда в основном JavaScript с импортированным пакетом, который может выполнять операторы Xpath. В идеале я хотел бы сделать это как одно утверждение Xpath, если это возможно, но я согласен, что мои ожидания могут быть слишком высокими.

Конечная цель - вернуть текущее состояние Объект с местоположением Альфа .

Я не могу изменить структуру или данные XML в этой структуре. Это вызов API Rest для функции исправности системы программного продукта, который я установил.

Я ценю любую помощь или направление в учебный ресурс с примерами, которые могут помочь мне перейти к окончательной строке sh , Я гуглил, но не уверен, что понимаю достаточно того, что пытаюсь сделать, в терминах, которые вернут результаты, которые я ищу.

1 Ответ

1 голос
/ 30 января 2020

Конечная цель - вернуть текущее состояние объекта с местоположением альфа.

Это выражение XPath

/root/trunk/branch[name='Object'][details/detail/location='Alpha']/state

Выбирает :

<state>OK</state>

Тест в здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...