Muenchian方法如何工作

时间:2014-03-12 09:55:42

标签: xml xslt xslt-1.0 grouping

我试图理解XSLT中用于分组节点的MUENCHIAN METHOD的含义。

但我无法理解所使用的某些陈述的重要性。

我提到链接here,它试图解释相同的内容。

有这样的声明:

contact[generate-id() = generate-id(key('contacts-by-surname', surname)[1])]

在这里,我可以理解generate-id()给出了一个唯一的id,分配给正在遍历的当前节点。但无法理解访问第一个元素的原因,即1

为什么只是第一个?我知道关键函数确实创建了一种关联数组的表示形式。

有人可以指导我吗?

2 个答案:

答案 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)