我正在尝试创建两个表,一个表示更大,一个表示何时更少。第一个表工作正常但是创建第二个表不起作用。
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt" exclude-result-prefixes="msxsl"
>
<xsl:output method="html" indent="yes"/>
<!-- template that is use for root-->
<xsl:template match="/">
<html>
<!--Displays a heading above the list of movie title-->
<head>
<title> Movies</title>
</head>
<body>
<!--Displays a heading above the list of movie title-->
<h1 align="center">
<font color="red" size="10">Movies Listing</font>
</h1>
<!-- Creates the table-->
<table style="color:blue;" bgcolor="gray" cellpadding="5" border="1" align="center">
<tr style="font-family:arial; color:blue;">
<td>Movie ID</td>
<td>Title</td>
<td>Director</td>
<td> Movie Year</td>
</tr>
<!-- apply template stament to use the template for movie-->
<xsl:apply-templates select="movies/movie">
<xsl:sort select="title" order="ascending"></xsl:sort>
</xsl:apply-templates>
</table>
</body>
</html>
</xsl:template>
<!-- template for each movie element-->
<xsl:template match="movie">
<xsl:if test="year<2005">
<tr>
<td>
<xsl:apply-templates select="@id"/>
</td>
<td>
<xsl:apply-templates select="title"/>
</td>
<td>
<xsl:apply-templates select="Director"/>
</td>
<td>
<xsl:apply-templates select="year"/>
</td>
</tr>
</xsl:if>
<xsl:apply-templates select="year">
</xsl:template>
<xsl:template match="year">
<table>
<tr style="font-family:arial; color:blue;">
<td>Movie ID</td>
<td>Title</td>
<td>Director</td>
<td> Movie Year</td>
</tr>
<xsl:if test="year>=2005">
<tr>
<td>
<xsl:apply-templates select="@id"/>
</td>
<td>
<xsl:apply-templates select="title"/>
</td>
<td>
<xsl:apply-templates select="Director"/>
</td>
<td>
<xsl:apply-templates select="year"/>
</td>
</tr>
</xsl:if>
</table>
</xsl:template>
<!-- template for color and font use for text in each element-->
<xsl:template match="@id">
<span style="font-family:arial; color:blue;">
<xsl:value-of select="."/>
</span>
</xsl:template>
<xsl:template match="title">
<span style="font-family:arial; color:blue;">
<xsl:value-of select="."/>
</span>
</xsl:template>
<xsl:template match="Director">
<span style="font-family:arial; color:blue;">
<xsl:value-of select="."/>
</span>
</xsl:template>
<xsl:template match="year">
<span style="font-family:arial; color:blue;">
<xsl:value-of select="."/>
</span>
</xsl:template>
</xsl:stylesheet>
我创建了一个if语句但只适用于第一个表。我可以使用choose语句创建表并测试元素吗?
答案 0 :(得分:2)
在match="year"
模板中,您使用条件test="year>=2005"
。 XPath表达式中的裸名year
表示./child::year
,即选择上下文节点的year
个子节点。但是上下文节点是year
元素,我怀疑它有一个名为year
的子节点。使用test=".>=2005"
。
我怀疑year
元素没有名为title
或Director
的子元素。我怀疑你真正想要的是拥有match="movie[year>=2005]"
的一个模板规则和match="movie[year<2005]"
的一个模板规则。
但由于您没有显示您的输入或预期输出,因此很难确切知道您要实现的目标。