Прежде всего, спасибо всем, кто ответил в моей предыдущей теме . Во избежание путаницы я публикую здесь аналогичную информацию, но вопросы соответствующим образом обновлены.
Моя проблема в том, что мой 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/*
и т. Д.)