уникальные элементы с XSL generate-key () - PullRequest
0 голосов
/ 16 марта 2011

Прежде всего, спасибо всем, кто ответил в моей предыдущей теме . Во избежание путаницы я публикую здесь аналогичную информацию, но вопросы соответствующим образом обновлены.

Моя проблема в том, что мой xsl for-each, показанный ниже, никогда не выполняется, указывая, что в наборе результатов ничего нет. Однако я не могу понять, почему. Дальнейшее описание ниже.

Структура ввода

<AllMyResults>
<Result>
<someElement>value</state>
<otherElement>value 2</state>
<subject>Get unique subjects!</state>
</Result>
</AllMyResults>

В верхней части моего XSL-файла есть ключевое утверждение

<xsl:key name="SubjectKey" match="All_Results/Result" use="subject"/>

[2] Мясо моего XSL-файла, в котором используется другая структура ввода:

<xsl:for-each select="$ResultSet/subject[
                         generate-id()
                          = generate-id(key('SubjectKey', 'subject')[1])
                      ]">
... this point is never reached ...
</xsl:for-each>

Структура ввода, используемая [2] выше Структура ввода - это просто список элементов.

Что мне здесь не хватает? Я использовал отладчик, чтобы определить, что for-each никогда не выполнялся, что указывает на то, что набор, сгенерированный выражением $ResultSet/subject[generate-id() = generate-id(key('SubjectKey', 'subject')[1])], был пустым набором. Но почему?

Дополнительная информация

$ ResultSet - это набор узлов. Это был параметр, переданный в шаблон. Согласно моему отладчику, оператор «ключ» выполняется соответствующее количество раз - один раз за раз «субъект» появляется в моем входном файле. Согласно тому, что я читал о generate-id (), без параметров он работает на текущем узле. Вместо $ResultSet/subject я также попробовал все виды вариаций. ($ResultSet/*/subject, $ResultSet/* и т. Д.)

Ответы [ 2 ]

0 голосов
/ 01 сентября 2013

Пробовали ли вы, поскольку ключу нужно только знать, с каким узлом он совпадает, а не с xpath, что, по-видимому, и делается.

0 голосов
/ 17 марта 2011

Я считаю, что должно быть key('SubjectKey', subject), а не key('SubjectKey', 'subject') (обратите внимание на кавычки) и что предикат должен быть на $ResultSet, а не $ResultSet/subject:

$ResultSet[generate-id() = generate-id(key('SubjectKey', subject)[1])]
...