Выберите отдельные элементы в xpath - PullRequest
0 голосов
/ 05 июля 2018

У меня есть следующие xml

<?xml version="1.0" encoding="UTF-8"?>
<results>
   <result>
      <status>A</status>
   </result>
   <result>
      <status>A</status>
   </result>
   <result>
      <status>B</status>
   </result>
</results>

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

   <result>
      <status>A</status>
   </result>
   <result>
      <status>B</status>
   </result>

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

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вы можете использовать это, чтобы получить требуемый вывод:

/results/result[not(status=preceding-sibling::result/status)]

Он должен вернуть result узел, если не было предшествующего узла result с тем же значением status (отдельные result узлы)

0 голосов
/ 05 июля 2018

В XPath-2.0 вы можете использовать функцию distinct-values(...) с таким циклом for, как это:

for $d in distinct-values(/results/result/status) return /results/result[status=$d][1]
...