在 xslt-stylesheet 中,我使用方法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 doc 包含:
<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>