XPath 1.0 COUNT — Уникальные значения

У меня есть этот тестовый XML:

<test>
    <x a="1">
      <x a="2">
        <x>
          <y>y31</y>
          <y>y32</y>
        </x>
      </x>
    </x>
    <x a="1">
      <x a="2">
        <y>y31</y>
        <y>y32</y>
      </x>
    </x>
    <x a="1">
      <y>y11</y>
      <y>y12</y>
    </x>
    <x>
      <y>y11</y>
      <y>y11</y>
    </x>
</test>

Как я могу запросить:

1 - Все значения для y

y32, y32, y11, y12

2 - Количество значений для y

Я пытаюсь использовать COUNT, но не могу подсчитать количество УНИКАЛЬНЫХ значений, которые имеет y, например, если я запускаю запрос к образцу XML, описанному до того, как мне нужно, чтобы результат был 4.


person D. Caan    schedule 28.08.2014    source источник
comment
Я полагаю, вы имеете в виду, что хотите вычислить результат 4 (но count() дает вам 5).   -  person John Bollinger    schedule 28.08.2014


Ответы (1)


Если все, с чем вам нужно работать, это XPath (а не XSLT или что-то в этом роде), то я думаю, что это лучшее, что вы можете сделать:

Все различные значения y:

//y[not(. = preceding::y)]

Количество различных значений y:

count(//y[not(. = preceding::y)])
person JLRishe    schedule 28.08.2014
comment
Вот и я тоже придумал. Я не вижу, как вы можете добиться большего успеха с доступными стандартными функциями. - person John Bollinger; 28.08.2014