XPath 2.0: ссылка на предыдущий контекст в другой части выражения XPath - PullRequest
0 голосов
/ 24 ноября 2011

в XPath Я хотел бы сосредоточиться на определенных элементах и ​​проанализировать их:

...
<field>aaa</field>
...
<field>bbb</field>
...
<field>aaa (1)</field>
...
<field>aaa (2)</field>
...
<field>ccc</field>
...
<field>ddd (7)</field>

Я хочу найти элементы, текстовое содержимое которых (кроме возможного перечисления, является уникальным. В примере aboceэто были бы bbb, ccc и ddd.

Следующий XPath дает мне уникальные значения:

distinct-values(//field[matches(normalize-space(.), ' \([0-9]\)$')]/substring-before(., '(')))

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

Это может быть содержимое поля, равное этому конкретному значению, или оно начинается с этого значенияи сопровождается "(". Проблема в том, что во второй части этого XPath я должен был бы сослаться на контекст самой этой части и на прежний контекст одновременно.

В следующем XPathЯ буду - вместо использования "." В качестве контекста - использовать c_outer и c_inner:

distinct-values(//field[matches(normalize-space(.), ' \([0-9]\)$')]/substring-before(., '(')))[count(//field[(c_inner = c_outer) or starts-with(c_inner, concat(c_outer, ' ('))]) > 1]

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

Это вообще возможно?

1 Ответ

0 голосов
/ 24 ноября 2011

XQuery может сделать это, например,

  for $s 
  in distinct-values(
    //field[matches(normalize-space(.), ' \([0-9]\)$')]/substring-before(., '(')))
  where count(//field[(. = $s) or starts-with(., concat($s, ' ('))]) > 1
  return $s
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...