0

我有一些问题排除了我的 xlst 转换中不需要的输出。我已经知道匹配等背后的默认规则,但我无法在模板/应用模板中正确使用匹配。
你能帮我解决这个问题吗?

所以我有一个这样构造的 XML 文件:

<movies>
    <movie id="0">
        <title>Title</title>
        <year>2007</year>
        <duration>113</duration>
        <country>Country</country>
        <plot>Plot</plot>
        <poster>img/posters/0.jpg</poster>
        <genres>
            <genre>Genre1</genre>
            <genre>Genre2</genre>
        </genres>
        ...
    </movie>
    ...
</movies>

我想为属于流派'#######'(在运行时由我的perl脚本替换)的每部电影创建一个带有LI的html UL列表,它是一个页面的链接(由它的id命名)。

现在我正在这样做:

<xsl:template match="/">
    <h2> List </h2>
    <ul>
        <xsl:apply-templates match="movie[genres/genre='#######']"/>
            <li>
                <a>
                    <xsl:attribute name="href">     
                        /movies/<xsl:value-of select= "@id" />.html
                    </xsl:attribute>
                    <xsl:value-of select= "title"/>
                </a>
            </li>
    </ul>
</xsl:template>

显然,通过这种方式,它向我展示了与所选类型相匹配的电影的所有元素。我是否必须添加大量<xsl:template match="...">才能删除所有额外的输出?
你能教我创建这样的html片段的正确方法吗?

列表

先感谢您!

4

2 回答 2

4

Dash 的解决方案是正确的。

我建议对电影模板稍作改动以更简洁......

<xsl:template match="movie">
  <li>
    <a href="/movies/{@id}.html">
      <xsl:value-of select= "title"/>
    </a>
  </li>
</xsl:template>
于 2012-08-15T13:14:20.613 回答
1

您快到了 - 您对应用模板的使用导致了您的问题。

相反,以这种方式构建您的 XSLT:

  <xsl:template match="/">
    <h2> List </h2>
    <ul>
      <xsl:apply-templates select="movie[genres/genre='#######']"/>
    </ul>
  </xsl:template>

  <xsl:template match="movie">
    <li>
      <a>
        <xsl:attribute name="href">/movies/<xsl:value-of select= "@id" />.html</xsl:attribute>
        <xsl:value-of select= "title"/>
      </a>
    </li>
  </xsl:template>

它会将特定模板 (match="movie") 应用于您的电影元素。在您最初的尝试中,您将使用默认模板,它将带回电影元素中包含的所有内容。

于 2012-08-15T12:23:06.730 回答