Итак, у меня есть набор 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 , Я гуглил, но не уверен, что понимаю достаточно того, что пытаюсь сделать, в терминах, которые вернут результаты, которые я ищу.