XSLT-Key()函数
我对这个关键功能有点困惑:XSLT-Key()函数,xslt,key,iteration,Xslt,Key,Iteration,我对这个关键功能有点困惑: <xsl:for-each select="article[count(. | key('idkey', @id)[1]) = 1]> 此中的用于每个元素 <xsl:for-each select="article[count(. | key('idkey', @id)[1]) = 1]"> 它通过比较生成的id直接检查当前元素是否与集合中的第一个元素相同。表达式key('idkey',@id)[1]选择idkey等于@id的第一个元素
<xsl:for-each select="article[count(. | key('idkey', @id)[1]) = 1]>
此
中的用于每个元素
<xsl:for-each select="article[count(. | key('idkey', @id)[1]) = 1]">
它通过比较生成的id直接检查当前元素是否与集合中的第一个元素相同。表达式key('idkey',@id)[1]
选择idkey等于@id的第一个元素
表达式count(A | B)=1
是测试A和B是否为同一节点的一种疯狂的XSLT1.0变通方法。(您还会看到人们为此使用generate id(A)=generate id(B)
。)
将这些元素放在一起,您将询问当前元素是否是文档中具有特定id值的第一个元素
这就是所谓的Muenchian分组(在XSLT2.0中变得多余)技术的基础
代码有点可疑,因为密钥似乎与报纸id匹配,而不是文章id。但也许它们在某种程度上是相关的。对不起,你在这里错了,因为idkey不是文章的键/@id它是报纸的键/@id。或者我在这里遗漏了什么吗?@hr_117:在写这篇文章时,我希望OP已经显示了idkey
的声明。不知怎的,我忽略了它。但是事情是这样的,select
XPath是非常奇怪的,因为key()
返回的节点集不能包含article
元素,谓词与1+count(key('idkey',@id)[1])=1
或者,如您所说,not(key('idkey',@id))
相同。这显然是一个错误。
select="article[generate-id() = generate-id(key('idkey', @id)[1])]"