в XPath я хотел бы сосредоточиться на определенных элементах и проанализировать их:
...
<field>aaa</field>
...
<field>bbb</field>
...
<field>aaa (1)</field>
...
<field>aaa (2)</field>
...
<field>ccc</field>
...
<field>ddd (7)</field>
Я хочу найти элементы, текстовое содержимое которых (помимо возможного перечисления, является уникальным. В приведенном выше примере это будут 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]
Я не могу использовать "." для обоих по очевидным причинам. Но как я могу ссылаться на конкретное или текущее отличное значение из внешнего выражения во внутреннем выражении?
Возможно ли такое?