我目前陷入了这个家庭作业问题。
我必须在2005年之前创建2个带电影的表格,然后创建带有电影2005年及以后的辅助表格。在我的代码中,我创建了两个表并用信息填充它们。但我无法弄清楚如何制作一个条件陈述,将2005年的电影放在一张桌子上,并在2005年之前在第二张桌子上移动。我不确定是否需要为两个表模板创建条件语句,或者可以使用一个符合两个表条件的条件语句来完成。
请参阅下面的代码。
<?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"/>
<xsl:template match="/">
<html>
<head>
<title>Movies</title>
<style type="text/css">
.myTable
{
border-collapse: collapse;
border-spacing: 5px;
}
.myTable td, th
{
border: 1px solid #000;
padding: 5px;
}
.myTable2
{
border-collapse: collapse;
border-spacing: 5px;
}
.myTable2 td, th
{
border: 1px solid #000;
padding: 5px;
}
</style>
</head>
<body>
<h3>Movies Until 2005</h3>
<table class="myTable">
<tr bgcolor="#9acd32">
<th>ID</th>
<th>Title</th>
<th>Director</th>
<th>Year</th>
<th>Genres</th>
</tr>
<xsl:variable name="counter" select="count(movies/movie/id)"/>
<xsl:apply-templates select="movies/movie">
<xsl:sort select="title"/>
</xsl:apply-templates>
<tfoot>
<tr>
<td>
Number of movies: <xsl:value-of select="$counter"/>
</td>
</tr>
</tfoot>
</table>
<br/>
<h3>Movies 2005 Onwards</h3>
<table class="myTable2">
<tr bgcolor="#9acd32">
<th>ID</th>
<th>Title</th>
<th>Director</th>
<th>Year</th>
<th>Genres</th>
</tr>
<xsl:variable name="counter" select="count(movies/movie/id)"/>
<xsl:apply-templates select="movies/movie">
<xsl:sort select="title"/>
</xsl:apply-templates>
<tfoot>
<tr>
<td>
Number of movies: <xsl:value-of select="$counter"/>
</td>
</tr>
</tfoot>
</table>
<br/>
<h1>Directors</h1>
<xsl:for-each select="movies/movie">
<xsl:sort select="principalDirector"/>
<ul>
<li>
<xsl:value-of select="principalDirector"/>
</li>
</ul>
</xsl:for-each>
</body>
</html>
</xsl:template>
<xsl:template match ="movie">
<xsl:variable name="hyperlink">
<xsl:value-of select="url" />
</xsl:variable>
<tr>
<td>
<xsl:value-of select="id"/>
</td>
<td>
<xsl:choose>
<xsl:when test="url">
<a href="{$hyperlink}" target="_blank">
<xsl:value-of select="title" />
</a>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="title" />
</xsl:otherwise>
</xsl:choose>
</td>
<td>
<xsl:value-of select="principalDirector"/>
</td>
<td>
<xsl:value-of select="year"/>
</td>
<td>
<xsl:for-each select="genre">
<xsl:value-of select=
"concat(., substring(', ', 2 - (position() != last())))"
/>
</xsl:for-each>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>
这是XML代码
<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="Movies.xslt"?>
<movies>
<movie>
<id>1000001</id>
<title>The Avengers</title>
<principalDirector>Joss Whedon</principalDirector>
<year>2012</year>
<genre>Action</genre>
<genre>Adventure</genre>
<genre>Sci-Fi</genre>
<url>http://www.imdb.com/title/tt0848228/?ref_=nv_sr_1</url>
</movie>
<movie>
<id>1000002</id>
<title>Avatar</title>
<principalDirector>James Cameron</principalDirector>
<year>2009</year>
<genre>Action</genre>
<genre>Adventure</genre>
<genre>Fantasy</genre>
<url>http://www.imdb.com/title/tt0499549/?ref_=fn_al_tt_1</url>
</movie>
<movie>
<id>1000003</id>
<title>Inception</title>
<principalDirector>Christopher Nolan</principalDirector>
<year>2010</year>
<genre>Action</genre>
<genre>Mystery</genre>
<genre>Sci-Fi</genre>
<url>http://www.imdb.com/title/tt1375666/?ref_=tt_rec_tti</url>
</movie>
<movie>
<id>1000004</id>
<title>Gladiator</title>
<principalDirector>Ridley Scott</principalDirector>
<year>2000</year>
<genre>Action</genre>
<genre>Drama</genre>
<url>http://www.imdb.com/title/tt0172495/?ref_=nv_sr_1</url>
</movie>
答案 0 :(得分:0)
我无法弄清楚如何制作一个放置的条件语句 2005年的电影在一张桌子上,并在2005年之前移动 第二张桌子。我不确定是否需要创建条件语句 对于两个表模板,或者可以使用一个条件 与两个表的条件匹配的语句。
实际上不需要任何条件语句 - 只需使用谓词即可。试试这个作为指南:
XSLT 1.0
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="UTF-8"/>
<xsl:variable name="thead">
<tr>
<th>ID</th>
<th>Title</th>
<th>Director</th>
<th>Year</th>
<th>Genres</th>
</tr>
</xsl:variable>
<xsl:template match="/movies">
<xsl:variable name="movies-before" select="movie[year < 2005]" />
<xsl:variable name="movies-after" select="movie[year >= 2005]" />
<html>
<head>
<title>Movies</title>
</head>
<body>
<h3>Movies Until 2005</h3>
<table>
<xsl:copy-of select="$thead"/>
<xsl:apply-templates select="$movies-before">
<xsl:sort select="title"/>
</xsl:apply-templates>
<tfoot>
<tr>
<td>Number of movies: <xsl:value-of select="count($movies-before)"/></td>
</tr>
</tfoot>
</table>
<br/>
<h3>Movies 2005 Onwards</h3>
<table>
<xsl:copy-of select="$thead"/>
<xsl:apply-templates select="$movies-after">
<xsl:sort select="title"/>
</xsl:apply-templates>
<tfoot>
<tr>
<td>Number of movies: <xsl:value-of select="count($movies-after)"/></td>
</tr>
</tfoot>
</table>
</body>
</html>
</xsl:template>
<xsl:template match="movie">
<tr>
<td>
<xsl:value-of select="id"/>
</td>
<td>
<xsl:value-of select="title"/>
</td>
<td>
<xsl:value-of select="principalDirector"/>
</td>
<td>
<xsl:value-of select="year"/>
</td>
<td>
<xsl:for-each select="genre">
<xsl:value-of select="."/>
<xsl:if test="position() != last()">
<xsl:text>, </xsl:text>
</xsl:if>
</xsl:for-each>
</td>
</tr>
</xsl:template>
</xsl:stylesheet>