Xslt 使用XSL generate-key()的唯一元素

Xslt 使用XSL generate-key()的唯一元素,xslt,xslt-1.0,Xslt,Xslt 1.0,首先,感谢所有回信的人。为了避免混淆,我在这里发布了类似的信息,但问题也相应地更新了 我的问题是,下面所示的每一个xsl都从未执行过,这表明结果集中没有任何内容。然而,我不明白为什么。进一步说明如下 输入结构 <AllMyResults> <Result> <someElement>value</state> <otherElement>value 2</state> <subject>Get unique su

首先,感谢所有回信的人。为了避免混淆,我在这里发布了类似的信息,但问题也相应地更新了

我的问题是,下面所示的每一个xsl都从未执行过,这表明结果集中没有任何内容。然而,我不明白为什么。进一步说明如下

输入结构

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

价值
价值2
获得独特的主题!
在XSL文件的顶部,我有一个key语句

<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是一个节点集。它是传递给模板的一个参数。根据我的调试器,“key”语句执行适当的次数——每次“subject”出现在我的输入文件中时执行一次。根据我读到的关于generate-id()的内容,在没有参数的情况下,它在当前节点上运行。除了
$ResultSet/subject
,我还尝试了各种变体。(
$ResultSet/*/subject
$ResultSet/*
等)

我认为应该是
键('SubjectKey',subject)
,而不是
键('SubjectKey','subject')
(注意引号),谓词应该是
$ResultSet
,而不是
$ResultSet/subject

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

您是否尝试过,因为密钥只需要知道它在哪个节点上匹配,而不需要知道xpath,这似乎是您正在做的。

您正在匹配密钥声明中的
Result
元素……您的XML有一个名为AllMyResults的元素,但您的密钥定义有所有结果。几乎可以肯定是一个输入错误,但是如果你在问题中输入了错误,那么你给我们的任何信息都很难被信任。你用-来关闭元素,对我来说,这似乎不是有效的XML。所以我应该使用,然后你建议什么?99%肯定我已经试过了,但我会再试一次。(我确实分别尝试了你的两个建议,即不使用引号&仅使用$ResultSet,但没有立即尝试。谢谢。@KyleM-我认为你不需要更改
,只需更改