1

我正在尝试使用 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>
4

1 回答 1

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>或类似的东西。但是我敢肯定,一旦解决了这个问题,您就会做到这一点。

于 2014-02-18T22:44:21.700 回答