我试图理解XSLT中用于分组节点的MUENCHIAN METHOD的含义。
但我无法理解所使用的某些陈述的重要性。
我提到链接here,它试图解释相同的内容。
有这样的声明:
contact[generate-id() = generate-id(key('contacts-by-surname', surname)[1])]
在这里,我可以理解generate-id()给出了一个唯一的id,分配给正在遍历的当前节点。但无法理解访问第一个元素的原因,即1。
为什么只是第一个?我知道关键函数确实创建了一种关联数组的表示形式。
有人可以指导我吗?
答案 0 :(得分:3)
如果您不自行提供任何输入,则许多XPath函数将当前节点作为输入。例如,string()
或number()
或generate-id()
就是这样做的。
因此generate-id()
与generate-id(.)
等效。
如果传入一整套节点作为参数,它们只能在第一个节点上工作。
string(//foo)
将返回文档中 first <foo>
的字符串表示形式,无论其他人有多少。
generate-id()
也是如此。 generate-id(//foo)
将在文档中返回第一个 <foo>
的唯一ID。
因此,generate-id(key('keyname', 'keyvalue'))
给出了key()
返回的第一个节点的唯一ID。
使用[1]
,与generate-id(key('keyname', 'keyvalue')[1])
中一样,并非绝对必要,只是更明确。
所以表达式
contact[generate-id() = generate-id(key('contacts-by-surname', surname)[1])]
可以读作
任何
<contact>
,其ID等于第一个{<contact>
与<surname>
相同的ID。
这里“(与姓氏联系)”部分由key()
处理。
或更抽象地
<contact>
组中的第一个<surname>
。
答案 1 :(得分:-1)