我在排除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>
我想创建一个带有LI的html UL列表,每个属于一个类型的电影'#######'(在运行时由我的perl脚本替换),这是一个指向页面的链接(命名为由它的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片段的正确方法吗?
答案 0 :(得分:4)
Dash的解决方案是正确的。
我建议电影模板略有变化,以便更简洁......
<xsl:template match="movie">
<li>
<a href="/movies/{@id}.html">
<xsl:value-of select= "title"/>
</a>
</li>
</xsl:template>
答案 1 :(得分:1)
你几乎就在那里 - 你使用apply-templates会导致问题。
相反,以这种方式构建您的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”)应用于您的影片元素。在您最初的尝试中,您将使用default template,它将带回电影元素中包含的所有内容。