使用XSLT,我可以使用apply-templates而不是for-each循环

时间:2014-06-11 14:11:14

标签: html xml templates xslt xsd

//我需要这样做,所以只有价格低于25的CD才会显示在页面上。但是我被限制使用apply-templates命令,不能使用for-each。注意:我不能使用for-each,因为我的演示者想要评估我们使用apply templates命令的能力

<?xml version = "1.0" encoding="ISO-8859-1" ?>
<?xml-stylesheet type="text/xsl" href="show.xsl"?> 

<cdstore>
<cd>
<title>The bests</title>
<price>23.90 </price>
<year>2005 </year>
</cd>

<cd>
<title>The leasts</title>
<price>29.90 </price>
<year>2008 </year>
</cd>

<cd>
<title>The middles</title>
<price>15.90 </price>
<year>2011 </year>
</cd>
</cdstore>

<!--
<?xml version ="1.1" encoding = "ISO-8859-1"?>
<xml: stylesheet version = "1.0" xmlns:xsl="http://www.w3.org">

<xsl: template match = "cdstore">
<html>
<body>
<h3> CDs sale </h3>
<xsl:apply-templates/>
</body>
</html>
<xsl:template match="cd">

<p>
<xsl:apply-templates select = "title"/>
<xsl:apply-templates select = "year"/>
</p>

</xsl:template>

<xsl:template match = "title">
Title: <span><xsl:value-of select="."/></span><br/>
</xsl:template>

<xsl:template match = "year">
Year: <span><xsl:value-of select="."/></span><br />
</xsl:template>

</xsl:stylesheet>

-->

//如何使用xsd:apply templates命令使其仅显示成本低于25的标题和年份?没有使用for-each循环。我不确定是否将命令放在apply-templates中或者是值的一部分。非常感谢任何帮助

1 个答案:

答案 0 :(得分:1)

您可以执行其中任何操作 - 您可以更改apply-templates以限制将模板应用于的元素:

<h3> CDs sale </h3>
<xsl:apply-templates select="cd[price &lt; 25]"/>

或者您也可以将模板应用于所有cd元素,但在现有match="cd"元素旁边添加第二个模板,以匹配您想要的元素,并忽略它们

<xsl:template match="cd[price &gt;= 25]" />

当您有两个可以匹配同一节点的不同模板时,所选择的模板取决于specific rules in the XSLT specification,但基本上匹配模式"elementname[predicate]"将始终胜过一个匹配{{1} }},反过来会胜过一个匹配的"elementname""*"