В таблице стилей xslt я использую методы exsl:node-set
и set:distinct
для доступа и фильтрации уникальных узлов из переменной, которая содержит фрагмент дерева результатов.Я могу записать значения этих узлов в мой выходной файл, например:
<xsl:variable name="myNodes">
<xsl:call-template name="getNodes"/>
</xsl:variable>
<xsl:for-each select="set:distinct(exsl:node-set($myNodes)/key)">
<xsl:value-of select="."/>
</xsl:for-each>
Значения ключей записываются в вывод, как и ожидалось.Однако, если я попытаюсь использовать значения в выражении XPath, произойдет сбой:
<xsl:for-each select="set:distinct(exsl:node-set($myNodes)/key)">
<xsl:variable name="result" select="/tree//somenode[@key = current()]"/>
<xsl:value-of select="$result"/>
</xsl:for-each>
Теперь вывод пуст, тогда как я знаю, что в моем input-xml есть «somenode», который долженбыть выбранным выражением XPath и его значение не пустое.
Теперь мой вопрос: почему это происходит?
Я использую Java 1.6, Xerces 2.7 и Xalan 2.7.
обновление: по запросу, некоторые данные для примера: XML-документ содержит:
<tree>
<somenode key="123"/>
<num>123</num>
<num>0815</num>
</tree>
шаблон getNodes:
<xsl:template name="getNodes">
<xsl:for-each select="/tree/num">
<xsl:element name="key">
<xsl:value-of select="."/>
</xsl:element>
</xsl:for-each>
</xsl:template>