我根据网站上的信息创建了这个xml文件。由于它包含大量信息,我将发布一个简化版本。
这意味着使用xslt文件来显示和模仿学院或大学课程的示例,其结构如下: 有多个课程要显示,这就是为什么它从课程开始然后我们有课程存储每个课程。
这里有教师和其他描述的课程信息。然后我们搬到这一年,课程可以有任意数年,这就是为什么我们把年份ynum =" 1"每年有2个学期。在学期内有多个单元,所以我们将单元/单元存储起来。
这是我希望它看起来像是给你一个想法的目标输出。
我已将所有信息存储在xml中,这是我想通过xslt实现的输出,但我不确定如何在此级别启动它:http://puu.sh/80sBi/0107a6264e.png
这是我的代码:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="Courses.xslt"?>
<courses>
<course>computing
<course_info></course_info>
<teacher etc>
<details></details>
</teacher etc>
<year ynum="1">
<semester snum="1">
<units>
<unit>
<code></code>
<title></title> <!-- this is the "description" table title -->
<credit_points></credit_points>
</unit>
<unit>
<code></code>
<title></title>
<credit_points></credit_points>
</unit>
</units>
</semester>
<semester snum="2">
<units>
<unit>
<code></code>
<title></title>
<credit_points></credit_points>
</unit>
</units>
</semester>
</year>
<year ynum="2">
<semester snum="1">
<units>
<unit>
<code></code>
<title></title>
<credit_points></credit_points>
</unit>
</units>
</semester>
<semester snum="2">
<units>
<unit>
</unit>
</units>
</semester>
</year>
</course>
</courses>
我对xslt文件的失败尝试:/任何建议或帮助都会非常感激,因为我似乎无法理解如何使循环工作这样的例子。
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Course information</h2>
<xsl:for-each select="courses/course">
<strong>Course:</strong><xsl:value-of select="course"/><br />
<strong>Code:</strong><xsl:value-of select="code"/><br />
<strong>Course Coordinaotr</strong><xsl:value-of select="fname"/><xsl:text> </xsl:text><xsl:value-of select="sname"/></li>
<table border="0">
<tr>
<th>unit</th>
<th>description</th>
<th>Credit Points</th>
</tr>
<xsl:for-each select="year/semester">
<tr>
<td><strong>Client ID:</strong><xsl:value-of select="unit_code"/></td>
<td><strong>OrderDate:</strong><xsl:value-of select="unit_title"/></td>
<td><strong>Quantity Ordered:</strong><xsl:value-of select="cp"/></td>
<td><strong>Order Status:</strong><xsl:value-of select="additional_link"/></td>
</xsl:for-each>
</tr>
</table>
</xsl:for-each>
</body>
</html>
</xsl:template></xsl:stylesheet>
我该如何解决这个问题?
答案 0 :(得分:0)
在这种情况下,您可能会发现最好使用 xsl:apply-templates ,而不是 xsl:for-each 。模板匹配是XSLT的主要优势之一。它减少了压痕,可以使XSLT更清洁。因此,不要执行<xsl:for-each select="courses/course">
,而是执行此操作
<xsl:apply-templates select="courses/course" />
然后,您将拥有一个匹配课程的模板,您可以在其中输出任何主标题信息,然后选择年元素
<xsl:template match="course">
<strong>Course:</strong> <xsl:value-of select="text()" /><br />
<xsl:apply-templates select="year" />
</xsl:template>
年模板类似,但看起来您希望每学期输出年份信息。因此,您的年模板可能如下所示
<xsl:template match="year">
<xsl:apply-templates select="semester" />
</xsl:template>
然后学期模板会开始看这个
<xsl:template match="semester">
<strong>Year:</strong><xsl:value-of select="../@ynum"/><br />
<strong>Semester:</strong><xsl:value-of select="@snum"/><br />
(严格来说,您可能会放弃年模板,在这种情况下只执行<xsl:apply-templates select="year/semester" />
。
然后只是以类似的方式为表格行选择单位元素。
尝试将此XSLT作为入门者:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Course information</h2>
<xsl:apply-templates select="courses/course" />
</body>
</html>
</xsl:template>
<xsl:template match="course">
<strong>Course:</strong> <xsl:value-of select="text()" /><br />
<xsl:apply-templates select="year" />
</xsl:template>
<xsl:template match="year">
<xsl:apply-templates select="semester" />
</xsl:template>
<xsl:template match="semester">
<strong>Year:</strong><xsl:value-of select="../@ynum"/><br />
<strong>Semester:</strong><xsl:value-of select="@snum"/><br />
<table border="0">
<tr>
<th>unit</th>
<th>description</th>
<th>Credit Points</th>
</tr>
<xsl:apply-templates select="units/unit" />
</table>
</xsl:template>
<xsl:template match="unit">
<tr>
<td><xsl:value-of select="code"/></td>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="credit_points"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>