Цель
(XSLT 1.0). Моя цель - взять набор элементов S и создать другой набор T, где T содержит уникальные элементы в S. И сделать это максимально эффективно. (Примечание: мне не нужно создавать переменную, содержащую набор или что-то в этом роде. Мне просто нужно перебрать уникальные элементы).
Пример ввода и клавиша
<!-- My actual input consists of a bunch of <Result> elements -->
<AllMyResults>
<Result>
<someElement>value</state>
<otherElement>value 2</state>
<subject>Get unique subjects!</state>
</Result>
</AllMyResults>
<xsl:key name="SubjectKey" match="AllMyResults/Result" use="subject"/>
Я думаю, что вышесказанное работает, но когда я использую свой ключ, он невероятно медленный. Ниже приведен код использования моего ключа.
<xsl:for-each select="Result[count(. | key('SubjectKey', subject)[1]) = 1]">
<xsl:sort select="subject" />
<!-- Do something with the unique subject value -->
<xsl:value-of select="subject" />
</xsl:for-each>
Дополнительная информация
Я считаю, что я делаю это неправильно, потому что это значительно замедлило мой XSL. В качестве дополнительной информации приведенный выше код находится в отдельном файле XSL от моего основного файла XSL. Из основного XSL я вызываю шаблон, содержащий xsl: key и for-each, показанные выше. Входными данными для этого шаблона является параметр xsl: param, содержащий мой набор узлов (аналогично приведенному выше примеру входных данных).