Muenchian 分组没有产生任何结果

Posted

技术标签:

【中文标题】Muenchian 分组没有产生任何结果【英文标题】:Muenchian grouping not producing any results 【发布时间】:2014-03-18 23:29:23 【问题描述】:

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

【问题讨论】:

【参考方案1】:

你们很亲密。

首先,您需要更新您的密钥:

<xsl:key name="movies" match="movie" use="." />

通过将 movie 放在 use= 中,您是在说“使用电影下的电影”,这是不正确的。

接下来,您的 for-each 将上下文设置为 ballot,这意味着根据您的输入,它只会运行两次。我相信您实际上希望上下文是 movie,这样它就会遍历与您的键匹配的每部电影。如下所示:

<xsl:for-each select="//ballot/movie[generate-id()=generate-id(key('movies',.)[1])]">
  <tr><xsl:value-of select="." /></tr>
</xsl:for-each>

作为旁注,您还需要修复表格的制作方式,因为您只为每部电影输出 &lt;tr&gt;,而没有 &lt;td&gt; 或类似内容。但是我敢肯定,一旦解决了这个问题,您就会做到这一点。

【讨论】:

以上是关于Muenchian 分组没有产生任何结果的主要内容,如果未能解决你的问题,请参考以下文章

将 Muenchian 分组应用于 XSLT

Muenchian 分组 XSLT 1.0 多重分组

使用 XSLT 对 HTML 输出进行分组(muenchian 分组?)

xsl muenchian 分组多个级别

Muenchian 分组样式表返回重复的未分组节点

Muenchian分组中的[1]真的有必要吗?