实验环境:xmlspy2013 firefox;

一、问题:

1.对于下列XML文档,根据要求编写在XML文档上对应的XSL样式表。
<?xml version="1.0" ?>
<PRODUCTDATA>
<PRODUCT PRODID="p001" CATEGORY="Toy">
<PRODUCTNAME>Mini Bus</PRODUCTNAME>
<DESCRIPTION>This is a toy for children aged 4 and above</DESCRIPTION>
<PRICE>75</PRICE>
<QUANTITY>54</QUANTITY>
</PRODUCT>
<PRODUCT PRODID="p002" CATEGORY="Toy">
<PRODUCTNAME>Barbie Doll</PRODUCTNAME>
<DESCRIPTION>This is a toy for children in the age group of 5-10 </DESCRIPTION>
<PRICE>20</PRICE>
<QUANTITY>200</QUANTITY>
</PRODUCT>
</PRODUCTDATA>
2.对于下列XML文档,根据要求编写在XML文档“Orders.xml”上对应的XSL样式表。“Orders.xml”内容如下:
<?xml version="1.0" encoding="GB2312" ?>
<Orders>
<Order orderID="A001" orderDate="2009-1-20">
<name>玩具</name>
<number>10</number>
<city>北京</city>
<zip>100000</zip>
</Order>
<Order orderID="A002" orderDate="2009-3-20">
<name>文具</name>
<number>5</number>
<city>青岛</city>
<zip>266000</zip>
</Order>
<Order orderID="A003" orderDate="2012-11-5">
<name>服装</name>
<number>3</number>
<city>济南</city>
<zip>250014</zip>
</Order>
<Order orderID="A004" orderDate="2012-11-6">
<name>电器</name>
<number>2</number>
<city>北京</city>
<zip>100000</zip>
</Order>
<Order orderID="A005" orderDate="2012-11-6">
<name>书籍</name>
<number>15</number>
<city>济南</city>
<zip>250014</zip>
</Order>
</Orders>


(1)AStudentsShowDataTable.xsl以表格的形式显示XML文档中存储的数据。

(2)BStudentsMathDescending.xsl以表格的形式显示XML文档中存储的数据,并依“数学”分值降序显示。

(3)CStudentsMathGreaterThan90.xsl以表格的形式显示XML文档中存储的数据,仅显示“数学”分值大于90的学生信息。

(4)DStudentsShowHobbyColumn.xsl以表格的形式显示XML文档中存储的所有数据,在“姓名”列之后用一表格列显示“爱好”属性的信息。

(5)EStudentsShowHobbyDescending.xsl以表格的形式显示XML文档中存储的所有数据,并依“爱好”属性降序显示。

(6)FStudentsShowHobbyColumn.xsl以表格的形式显示XML文档中存储的数据,仅显示“爱好”是“上网”的学生的信息。


二、解决方案步骤

NO.1:嵌入html到xsl文件中,用for-each循环遍历元素,用<fontcolor>设置字体。

NO.2:<xsl:choose><xsl:whentest></xsl:when></xsl:choose>用该语法实现属性的选择,用<xsl:iftest></xsl:if>实现元素的选择

NO.3:<xsl:sort select order=”descending” data-type=”number”/>

三、代码结果

    AStudentsShowDataTable.xml文件

<?xml version="1.0" encoding="GB2312"?>
<?xml-stylesheet type="text/xsl" href="AStudentsShowDataTable.xsl"?>
<学生名单>
<学生>
<学号>201501110101</学号>
<姓名 爱好="足球">张三</姓名>
<性别>男</性别>
<专业>软件工程</专业>
<数学>85</数学>
<英语>90</英语>
</学生>
<学生>
<学号>201501110102</学号>
<姓名 爱好="篮球">李四</姓名>
<性别>女</性别>
<专业>软件工程</专业>
<数学>92</数学>
<英语>75</英语>
</学生>
<学生>
<学号>201501110103</学号>
<姓名>王五</姓名>
<性别>男</性别>
<专业>软件工程</专业>
<数学>79</数学>
<英语>88</英语>
</学生>
<学生>
<学号>201501110104</学号>
<姓名 爱好="音乐">赵六</姓名>
<性别>男</性别>
<专业>软件工程</专业>
<数学>79</数学>
<英语>88</英语>
</学生>
<学生>
<学号>201501110105</学号>
<姓名>刘七</姓名>
<性别>女</性别>
<专业>软件工程</专业>
<数学>90</数学>
<英语>74</英语>
</学生>
<学生>
<学号>201501110106</学号>
<姓名 爱好="上网">张君宝</姓名>
<性别>男</性别>
<专业>软件工程</专业>
<数学>91</数学>
<英语>67</英语>
</学生>
<学生>
<学号>201501110107</学号>
<姓名>崔春晓</姓名>
<性别>女</性别>
<专业>软件工程</专业>
<数学>70</数学>
<英语>83</英语>
</学生>
<学生>
<学号>201501110108</学号>
<姓名>倪冰</姓名>
<性别>女</性别>
<专业>软件工程</专业>
<数学>91</数学>
<英语>76</英语>
</学生>
<学生>
<学号>201501110109</学号>
<姓名>杨惠</姓名>
<性别>女</性别>
<专业>软件工程</专业>
<数学>78</数学>
<英语>90</英语>
</学生>
<学生>
<学号>201501110110</学号>
<姓名 爱好="音乐">李中华</姓名>
<性别>男</性别>
<专业>软件工程</专业>
<数学>98</数学>
<英语>79</英语>
</学生>
<学生>
<学号>201501110201</学号>
<姓名>张越</姓名>
<性别>男</性别>
<专业>网络工程</专业>
<数学>85</数学>
<英语>97</英语>
</学生>
<学生>
<学号>201501110202</学号>
<姓名>秦水天</姓名>
<性别>男</性别>
<专业>网络工程</专业>
<数学>52</数学>
<英语>76</英语>
</学生>
<学生>
<学号>201501110203</学号>
<姓名>张名扬</姓名>
<性别>男</性别>
<专业>网络工程</专业>
<数学>50</数学>
<英语>69</英语>
</学生>
<学生>
<学号>201501110204</学号>
<姓名>张楚越</姓名>
<性别>男</性别>
<专业>网络工程</专业>
<数学>82</数学>
<英语>77</英语>
</学生>
<学生>
<学号>201501110205</学号>
<姓名 爱好="上网">林子默</姓名>
<性别>女</性别>
<专业>网络工程</专业>
<数学>95</数学>
<英语>86</英语>
</学生>
<学生>
<学号>201501110206</学号>
<姓名 爱好="看电视">李子涵</姓名>
<性别>女</性别>
<专业>网络工程</专业>
<数学>77</数学>
<英语>88</英语>
</学生>
</学生名单>

AStudentsShowDataTable.xsl文件

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">


<html>
<head></head>
<body>

<table border="1" cellpadding="0" align="center">
<tr><th>学号</th><th>姓名</th><th>性别</th><th>专业</th><th>数学</th><th>英语</th></tr>
<xsl:for-each select="/学生名单/学生">
<tr>
<td><xsl:value-of select="学号"/></td>
<td><xsl:value-of select="姓名"/></td>
<td><xsl:value-of select="性别"/></td>
<td><xsl:value-of select="专业"/></td>
<td><xsl:value-of select="数学"/></td>
<td><xsl:value-of select="英语"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

BStudentsMathDescending.xsl

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">


<html>
<head></head>
<body>

<table border="1" cellpadding="0" align="center">
<tr><th>学号</th><th>姓名</th><th>性别</th><th>专业</th><th>数学</th><th>英语</th></tr>
<xsl:for-each select="/学生名单/学生">
<xsl:sort order="descending" data-type="number" select="数学"/>
<tr>
<td><xsl:value-of select="学号"/></td>
<td><xsl:value-of select="姓名"/></td>
<td><xsl:value-of select="性别"/></td>
<td><xsl:value-of select="专业"/></td>
<td><xsl:value-of select="数学"/></td>
<td><xsl:value-of select="英语"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>


CStudentsMathGreaterThan90.xsl

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">


<html>
<head></head>
<body>

<table border="1" cellpadding="0" align="center">
<tr><th>学号</th><th>姓名</th><th>性别</th><th>专业</th><th>数学</th><th>英语</th></tr>
<xsl:for-each select="/学生名单/学生">
<xsl:if test="数学>90">
<tr>
<td><xsl:value-of select="学号"/></td>
<td><xsl:value-of select="姓名"/></td>
<td><xsl:value-of select="性别"/></td>
<td><xsl:value-of select="专业"/></td>
<td><xsl:value-of select="数学"/></td>
<td><xsl:value-of select="英语"/></td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

DStudentsShowHobbyColumn.xsl

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">


<html>
<head></head>
<body>

<table border="1" cellpadding="0" align="center">
<tr><th>学号</th><th>姓名</th><th>爱好</th><th>性别</th><th>专业</th><th>数学</th><th>英语</th></tr>
<xsl:for-each select="/学生名单/学生/姓名">
<tr>
<td><xsl:value-of select="../学号"/></td>
<td><xsl:value-of select="../姓名"/></td>
<td><xsl:value-of select="@爱好"/></td>
<td><xsl:value-of select="../性别"/></td>
<td><xsl:value-of select="../专业"/></td>
<td><xsl:value-of select="../数学"/></td>
<td><xsl:value-of select="../英语"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">


<html>
<head></head>
<body>

<table border="1" cellpadding="0" align="center">
<tr><th>学号</th><th>姓名</th><th>爱好</th><th>性别</th><th>专业</th><th>数学</th><th>英语</th></tr>
<xsl:for-each select="/学生名单/学生/姓名">
<xsl:sort select="@爱好" order="descending"/>
<tr>
<td><xsl:value-of select="../学号"/></td>
<td><xsl:value-of select="../姓名"/></td>
<td><xsl:value-of select="@爱好"/></td>
<td><xsl:value-of select="../性别"/></td>
<td><xsl:value-of select="../专业"/></td>
<td><xsl:value-of select="../数学"/></td>
<td><xsl:value-of select="../英语"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

FStudentsShowHobbyColumn.xsl

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">


<html>
<head></head>
<body>

<table border="1" cellpadding="0" align="center">
<tr><th>学号</th><th>姓名</th><th>性别</th><th>专业</th><th>数学</th><th>英语</th></tr>
<xsl:for-each select="/学生名单/学生/姓名[@爱好]">
<xsl:choose>
<xsl:when test="@爱好='上网'">
<tr>
<td><xsl:value-of select="../学号"/></td>
<td><xsl:value-of select="../姓名"/></td>
<td><xsl:value-of select="../性别"/></td>
<td><xsl:value-of select="../专业"/></td>
<td><xsl:value-of select="../数学"/></td>
<td><xsl:value-of select="../英语"/></td>
</tr>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

显示orderID为A002的订单信息.xsl

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">


<html>
<head></head>
<body>

<table border="1" cellpadding="0" align="center">
<tr><th>姓名</th><th>数量</th><th>城市</th><th>邮编</th></tr>
<xsl:for-each select="/Orders/Order[@orderID]">
<xsl:choose>
<xsl:when test="@orderID='A002'">
<tr>
<td><xsl:value-of select="./name"/></td>
<td><xsl:value-of select="./number"/></td>
<td><xsl:value-of select="./city"/></td>
<td><xsl:value-of select="./zip"/></td>
</tr>
</xsl:when>
</xsl:choose>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

显示北京的订单信息.xsl

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">


<html>
<head></head>
<body>

<table border="1" cellpadding="0" align="center">
<tr><th>姓名</th><th>数量</th><th>城市</th><th>邮编</th></tr>
<xsl:for-each select="/Orders/Order">
<xsl:if test="city='北京'">

<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="number"/></td>
<td><xsl:value-of select="city"/></td>
<td><xsl:value-of select="zip"/></td>
</tr>

</xsl:if>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

以表格的形式显示XML文档中存储的所有数据.xsl

<?xml version="1.0" encoding="gb2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">


<html>
<head></head>
<body>

<table border="1" cellpadding="0" align="center">
<tr><th>姓名</th><th>数量</th><th>城市</th><th>邮编</th></tr>
<xsl:for-each select="/Orders/Order">
<tr>
<td><xsl:value-of select="name"/></td>
<td><xsl:value-of select="number"/></td>
<td><xsl:value-of select="city"/></td>
<td><xsl:value-of select="zip"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

截图如下:

利用可扩展样式表语言xsl显示xml文档_软件工程

表格显示:

利用可扩展样式表语言xsl显示xml文档_html_02

只显示北京城市

利用可扩展样式表语言xsl显示xml文档_html_03

数学成绩由高到低显示:

利用可扩展样式表语言xsl显示xml文档_xml_04

显示数学成绩大于90的同学

利用可扩展样式表语言xsl显示xml文档_xml_05

由爱好的同学成绩显示在前方

利用可扩展样式表语言xsl显示xml文档_软件工程_06