我正在尝试使用Muenchian分组来选择包含以下XML文档中每个影片的第一次出现的节点集,但我无法返回任何内容......
<poll>
<ballot id="b1">
<movie>NATIONAL LAMPOON'S ANIMAL HOUSE (1978)</movie>
<movie>SILVER STREAK (1976)</movie>
<movie>SOME LIKE IT HOT (1959)</movie>
</ballot>
<ballot id="b2">
<movie>MODERN TIMES (1936)</movie>
<movie>NATIONAL LAMPOON'S ANIMAL HOUSE (1978)</movie>
<movie>SHAMPOO (1975)</movie>
</ballot>
</poll>
以下是我的xsl ......
<xsl:template match="/">
<xsl:for-each select="//ballot[generate-id()=generate-id(key('movies',.)[1])]">
<xsl:value-of select="movie" />
</xsl:for-each>
</xsl:template>
答案 0 :(得分:3)
你非常接近。
首先,您需要更新密钥:
<xsl:key name="movies" match="movie" use="." />
将电影放入你所说的use=
中“使用电影中的电影”这是不正确的。
接下来,您的for-each
将上下文设置为选票,这意味着,根据您的输入,它只会运行两次。我相信你真的希望上下文是电影所以它会在每个匹配你的密钥的电影上运行。这看起来如下所示:
<xsl:for-each select="//ballot/movie[generate-id()=generate-id(key('movies',.)[1])]">
<tr><xsl:value-of select="." /></tr>
</xsl:for-each>
作为旁注,您还需要修改表格的制作方式,因为您只为每部没有<tr>
或类似内容的电影输出<td>
。但是我确信一旦修好,你就会明白。