XML学习之做过的实验——实验五

实验五 可扩展样式单语言XSL

一、实验目的

掌握使用XSL显示XML文件的基本方法

二、实验条件

配置有windows记事本、写字板 或 XMLSpy 开发环境的计算机设备。

三、实验原理及相关知识

(1)XSL实际包含三方面的内容:XSLT,XPath以及XSL格式化对象

(2)XSLT中模板的定义

(3)XPath对XML文件片段进行查找、定位

(4)格式化对象将XSL转换结果进行显示

四、实验内容及步骤

1、对以下“booklist.xml”进行XSL定义(设XSL文件名为“booklist.xsl”)

<?xml version="1.0" encoding="GB2312"?>

<Booklist>

   <Book> 

      <BookID>000001</BookID>

      <BookType>计算机</BookType>

      <BookName>算法与数据结构</BookName>

      <Auth>严蔚敏 陈文博</Auth>

      <Publisher>清华大学出版社</Publisher>

      <Price>24</Price>

      <PubDate>2002-1-1</PubDate>

      <Quantity>10</Quantity>

   </Book>

   <Book> 

      <BookID>000002</BookID>

      <BookType>计算机</BookType>

      <BookName>软件工程导轮</BookName>

      <Auth>张海藩</Auth>

      <Publisher>清华大学出版社</Publisher>

      <Price>5.4</Price>

      <PubDate>1987-6-1</PubDate>

      <Quantity>5</Quantity>

   </Book>

   <Book> 

      <BookID>000003</BookID>

      <BookType>计算机</BookType>

      <BookName>XML/JSP网页编程教材</BookName>

      <Auth>吴艾</Auth>

      <Publisher>北京希望电子出版社</Publisher>

      <Price>46</Price>

      <PubDate>2001-7-1</PubDate>

      <Quantity>15</Quantity>

   </Book>

   <Book> 

      <BookID>000012</BookID>

      <BookType>工具</BookType>

      <BookName>汉语成语字典</BookName>

      <Auth>李一华 吕德申</Auth>

      <Publisher>四川辞书出版社</Publisher>

      <Price>12</Price>

      <PubDate>1992-1-1</PubDate>

      <Quantity>10</Quantity>

   </Book>

   <Book> 

      <BookID>000016</BookID>

      <BookType>机械</BookType>

      <BookName>机电控制工程</BookName>

      <Auth>高钟毓 王永梁</Auth>

      <Publisher>清华大学出版社</Publisher>

      <Price>19.8</Price>

      <PubDate>1994-9-1</PubDate>

      <Quantity>19</Quantity>

   </Book>

   <Book> 

      <BookID>000018</BookID>

      <BookType>工具</BookType>

      <BookName>英华大字典</BookName>

      <Auth>郑易里</Auth>

      <Publisher>商务印书馆</Publisher>

      <Price>18.5</Price>

      <PubDate>1984-11-1</PubDate>

      <Quantity>2</Quantity>

   </Book>

</Booklist>

(1)书写XSL定义头部

<?xml version="1.0" encoding="GB2312"?>

(3)编写根节点匹配模板(注意xsl:stylesheet元素是必须要的)

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <xsl:template match="/">

    <html>

      <body>

        <table border="2" style="position:absolute;top:30px;left:30px;font:15px">

          <tr>

            <td style="text-align:center">BookID</td>

            <td style="text-align:center">BookType</td>

            <td style="text-align:center">BookName</td>

            <td style="text-align:center">Auth</td>

            <td style="text-align:center">Publisher</td>

            <td style="text-align:center">Price</td>

            <td style="text-align:center">PubDate</td>

            <td style="text-align:center">Quantity</td>

          </tr>

          […………]

        </table>

      </body>

    </html>

  </xsl:template>

</xsl:stylesheet>

(4)编写XPath节点booklist/book的匹配模板(添加在[…………]处)

<xsl:for-each select="Booklist/Book">

    <tr>

       <td style="text-align:center"><xsl:value-of select="BookID"/></td>

       <td style="text-align:center"><xsl:value-of select="BookType"/></td>

       <td style="text-align:center"><xsl:value-of select="BookName"/></td>

       <td style="text-align:center"><xsl:value-of select="Auth"/></td>

       <td style="text-align:center"><xsl:value-of select="Publisher"/></td>

       <td style="text-align:center"><xsl:value-of select="Price"/></td>

       <td style="text-align:center"><xsl:value-of select="PubDate"/></td>

       <td style="text-align:center"><xsl:value-of select="Quantity"/></td>

      </tr>

  </xsl:for-each>

 (5)在IE中打开带有XSL定义的“booklist.xml”,观察文件显示结果(带XSL定义的XML文件头部如下所示)。

    <?xml version="1.0" encoding="GB2312"?>

<?xml-stylesheet type="text/xsl" href="booklist.xsl"?>

(6)修改上述代码,不用<xsl:for-each>语句实现相同的显示结果。

<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <table border="2" style="position:absolute;top:30px;left:30px;font:15px">
          <tr>
            <td style="text-align:center">BookID</td>
            <td style="text-align:center">BookType</td>
            <td style="text-align:center">BookName</td>
            <td style="text-align:center">Auth</td>
            <td style="text-align:center">Publisher</td>
            <td style="text-align:center">Price</td>
            <td style="text-align:center">PubDate</td>
            <td style="text-align:center">Quantity</td>
          </tr>
          <xsl:apply-templates/>
		</table>
      </body>
    </html>
  </xsl:template>
  <xsl:template match="Book[1]">
		<tr>
			<td style="text-align:center"><xsl:value-of select="BookID"/></td>
			<td style="text-align:center"><xsl:value-of select="BookType"/></td>
			<td style="text-align:center"><xsl:value-of select="BookName"/></td>
			<td style="text-align:center"><xsl:value-of select="Auth"/></td>
			<td style="text-align:center"><xsl:value-of select="Publisher"/></td>
			<td style="text-align:center"><xsl:value-of select="Price"/></td>
			<td style="text-align:center"><xsl:value-of select="PubDate"/></td>
			<td style="text-align:center"><xsl:value-of select="Quantity"/></td>
		</tr>	
	</xsl:template>
	<xsl:template match="Book[2]">
		<tr>
			<td style="text-align:center"><xsl:value-of select="BookID"/></td>
			<td style="text-align:center"><xsl:value-of select="BookType"/></td>
			<td style="text-align:center"><xsl:value-of select="BookName"/></td>
			<td style="text-align:center"><xsl:value-of select="Auth"/></td>
			<td style="text-align:center"><xsl:value-of select="Publisher"/></td>
			<td style="text-align:center"><xsl:value-of select="Price"/></td>
			<td style="text-align:center"><xsl:value-of select="PubDate"/></td>
			<td style="text-align:center"><xsl:value-of select="Quantity"/></td>
		</tr>	
	</xsl:template>
	<xsl:template match="Book[3]">
		<tr>
			<td style="text-align:center"><xsl:value-of select="BookID"/></td>
			<td style="text-align:center"><xsl:value-of select="BookType"/></td>
			<td style="text-align:center"><xsl:value-of select="BookName"/></td>
			<td style="text-align:center"><xsl:value-of select="Auth"/></td>
			<td style="text-align:center"><xsl:value-of select="Publisher"/></td>
			<td style="text-align:center"><xsl:value-of select="Price"/></td>
			<td style="text-align:center"><xsl:value-of select="PubDate"/></td>
			<td style="text-align:center"><xsl:value-of select="Quantity"/></td>
		</tr>	
	</xsl:template>
	<xsl:template match="Book[4]">
		<tr>
			<td style="text-align:center"><xsl:value-of select="BookID"/></td>
			<td style="text-align:center"><xsl:value-of select="BookType"/></td>
			<td style="text-align:center"><xsl:value-of select="BookName"/></td>
			<td style="text-align:center"><xsl:value-of select="Auth"/></td>
			<td style="text-align:center"><xsl:value-of select="Publisher"/></td>
			<td style="text-align:center"><xsl:value-of select="Price"/></td>
			<td style="text-align:center"><xsl:value-of select="PubDate"/></td>
			<td style="text-align:center"><xsl:value-of select="Quantity"/></td>
		</tr>	
	</xsl:template>
	<xsl:template match="Book[5]">
		<tr>
			<td style="text-align:center"><xsl:value-of select="BookID"/></td>
			<td style="text-align:center"><xsl:value-of select="BookType"/></td>
			<td style="text-align:center"><xsl:value-of select="BookName"/></td>
			<td style="text-align:center"><xsl:value-of select="Auth"/></td>
			<td style="text-align:center"><xsl:value-of select="Publisher"/></td>
			<td style="text-align:center"><xsl:value-of select="Price"/></td>
			<td style="text-align:center"><xsl:value-of select="PubDate"/></td>
			<td style="text-align:center"><xsl:value-of select="Quantity"/></td>
		</tr>	
	</xsl:template>
	<xsl:template match="Book[6]">
		<tr>
			<td style="text-align:center"><xsl:value-of select="BookID"/></td>
			<td style="text-align:center"><xsl:value-of select="BookType"/></td>
			<td style="text-align:center"><xsl:value-of select="BookName"/></td>
			<td style="text-align:center"><xsl:value-of select="Auth"/></td>
			<td style="text-align:center"><xsl:value-of select="Publisher"/></td>
			<td style="text-align:center"><xsl:value-of select="Price"/></td>
			<td style="text-align:center"><xsl:value-of select="PubDate"/></td>
			<td style="text-align:center"><xsl:value-of select="Quantity"/></td>
		</tr>	
	</xsl:template>
</xsl:stylesheet>

(7)根据“booklist.xml”,编写“bookinfoquery.xsl”,要求能够以表格方式输出BookName的值是以“算法”开头的图书的所有信息。

提示:判断BookName元素的值是否以算法开头可以用starts-with函数,如下:

starts-with(BookName,'算法')

bookinfoquery.xsl:
<?xml version="1.0" encoding="GB2312"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
 <xsl:template match="/">
  <html>
    <body>
      <table border="2" style="position:absolute;top:30px;left:30px;font:15px">
        <tr>
          <td style="text-align:center">BookID</td>
          <td style="text-align:center">BookType</td>
          <td style="text-align:center">BookName</td>
          <td style="text-align:center">Auth</td>
          <td style="text-align:center">Publisher</td>
          <td style="text-align:center">Price</td>
          <td style="text-align:center">PubDate</td>
          <td style="text-align:center">Quantity</td>
        </tr>
        <xsl:for-each select="Booklist/Book">
			<xsl:if test="starts-with(BookName,'算法')">
			  <tr>
			   <td style="text-align:center"><xsl:value-of select="BookID"/></td>
			   <td style="text-align:center"><xsl:value-of select="BookType"/></td>
			   <td style="text-align:center"><xsl:value-of select="BookName"/></td>
			   <td style="text-align:center"><xsl:value-of select="Auth"/></td>
			   <td style="text-align:center"><xsl:value-of select="Publisher"/></td>
			   <td style="text-align:center"><xsl:value-of select="Price"/></td>
			   <td style="text-align:center"><xsl:value-of select="PubDate"/></td>
			   <td style="text-align:center"><xsl:value-of select="Quantity"/></td>
			  </tr>
			</xsl:if>
        </xsl:for-each>
       </table>
    </body>
  </html>
 </xsl:template>
</xsl:stylesheet>

2、下面是一个关于个人简历的XML文档resume.xml,请编写XSLT文档将其转换成HTML格式,以表格的方式显示相关数据,要求HTML页面设计尽量合理美观。

<?xml version="1.0" encoding="UTF-8"?>

<个人简历>

    <求职目标>

        <职位>软件开发工程师</职位> 

        <公司>伟豪软件工程</公司> 

    </求职目标>

    <个人信息>

        <姓名>张三</姓名>

        <性别>男</性别>

        <年龄>22</年龄>

        <专业>计算机应用</专业>

        <毕业院校>武汉大学</毕业院校>

        <学历>本科</学历>

        <电话>87653005</电话>

    </个人信息>

    <特长>

        <编程语言>Java</编程语言>

        <英语等级>CET-6</英语等级>

    </特长>

</个人简历>

resume.xsl:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
 <xsl:template match="/">
  <html>
      <body>
        <table border="2" style="font-family:KaiTi">
          <tr>
            <td style="text-align:center;font-size:18pt;font-weight:bolder;color:red;font-family:KaiTi" colspan="6">个人简历</td>
          </tr>
          <tr >
			  <td colspan="2" style="text-align:center;font-size:14pt;font-weight:bolder;color:red">求职目标</td>
		  </tr>
          <tr>
			  <td style="text-align:center;color:blue">职位:</td>
			  <td style="text-align:center" colspan="2"><xsl:value-of select="个人简历/求职目标/职位"/></td>
			  <td style="text-align:center;color:blue">公司:</td>
			  <td style="text-align:center" colspan="2"><xsl:value-of select="个人简历/求职目标/公司"/></td>
          </tr>
          <tr>
			<td colspan="2" style="text-align:center;font-size:14pt;font-weight:bolder;color:red">个人信息</td>  
          </tr>
          <tr>
			<td style="text-align:center;color:blue">姓名:</td>
			  <td style="text-align:center"><xsl:value-of select="个人简历/个人信息/姓名"/></td>
			  <td style="text-align:center;color:blue">性别:</td>
			  <td style="text-align:center"><xsl:value-of select="个人简历/个人信息/性别"/></td>
			  <td style="text-align:center;color:blue">年龄:</td>
			  <td style="text-align:center"><xsl:value-of select="个人简历/个人信息/年龄"/></td>
          </tr>
          <tr>
			<td style="text-align:center;color:blue">专业:</td>
			<td style="text-align:center" colspan="2"><xsl:value-of select="个人简历/个人信息/专业"/></td>
			<td style="text-align:center;color:blue">毕业院校:</td>
			<td style="text-align:center" colspan="2"><xsl:value-of select="个人简历/个人信息/毕业院校"/></td>
          </tr>
          <tr>
			<td style="text-align:center;color:blue">学历:</td>
			<td style="text-align:center" colspan="2"><xsl:value-of select="个人简历/个人信息/学历"/></td>
			<td style="text-align:center;color:blue">电话:</td>
			<td style="text-align:center" colspan="2"><xsl:value-of select="个人简历/个人信息/电话"/></td>
          </tr>
          <tr>
			<td colspan="2" style="text-align:center;font-size:14pt;font-weight:bolder;color:red">特长</td>  
          </tr>
          <tr>
			<td style="text-align:center;color:blue">编程语言:</td>
			<td style="text-align:center" colspan="2"><xsl:value-of select="个人简历/特长/编程语言"/></td>
			<td style="text-align:center;color:blue">英语等级:</td>
			<td style="text-align:center" colspan="2"><xsl:value-of select="个人简历/特长/英语等级"/></td>
          </tr>
		</table>
      </body>
    </html> 
 </xsl:template>
</xsl:stylesheet>

五、思考题及其它

针对“booklist.xsl”,简述XSLT的执行过程。

  1. 利用template模板匹配所需要的节点,booklist.xsl中直接匹配根节点
  2. 定义了一个表格的框架,为后续输出相关数据做好格式准备
  3. 利用<xsl:for-each>元素依次选择具有指定节点设置的每一个xml元素节点,结果为节点集,针对booklist.xsl而言就是遍历Booklist下的每一个Book,按格式依次输出所需要的数据
[实验目的] 1、学习如何使用XMLSPY集成开发环境完成XML Schema相关的开发工作。 2、掌握XML Schema与DTD之间的区别,能够完成两者之间的转换;掌握在XML Schema中如何定义元素和属性,如何使用限制、列表和合并派生自己的简单数据类型,如何定义复杂数据类型,全局/局部元素和数据类型之间的区别;如何将XML Schema文档关联到XML实例数据文档,并完成文档的有效性验证。 3、掌握如何准确定义数据之间的参照完整性约束,如何在模式中使用多态性支持,如何在文档中定义空值等等。 [实验内容和步骤] 1、使用XMLSPY集成开发环境,新建XML Schema文档,在各种不同的编辑视图中尝试采用不同的方式完成XML Schema文档的编辑和查看;并使用XMLSPY提供的便利,建立XML、Schema两者之间的关联,进行XML文档的良构以及有效性验证。 2、严格按照下图给出的文档模型,在XML Schema编辑环境的Schema视图中完成book.xsd的编写(不要使用Text视图进行编写): 在上图中,没有指定简单类型元素和属性的数据类型,请根据合理的情况,完成数据类型的创建(至少使用到限制方式中的三种以上的限制方面),请在IDE的Details视图->type和Facets中完成上述任务。 在上图中,有三个title元素分别表示book、section和figure的标题,请定义下述类型: titleType:1-100个字符的文本; bookTitleType:titleType类型限制派生的子类型,要求取枚举值“Data On the Web”、“TCP/IP Illustrated”等; sectionTitleType:titleType类型限制派生的子类型,要求必须形如“1.xxxx”、“1-1.xxxx”等等(表示第一节、第一节下面的第一节等等,注意section是递归的形式); figureTitleType:titleType类型限制派生的子类型,要求必须形如“1-1.xxxx” 、“1-1-1.xxxx”(表示第一节中的第一个图、第一节下面的第一节的第一个图等等); 然后编写book.xml,并使用多态性(即所有title的类型均为titleType,而数据实例中指明具体类型),请确保通过文档有效性验证。 3、在上次的DTD实验中,我们编写了SpyBase1.xml、SpyBase2.xml、以及SpyBase1.dtd和SpyBase2.dtd,这次需要完成SpyBase1.xsd和SpyBase2.xsd,建立模式与数据之间的关联,并进行文档有效性验证。在编写的XSD文档SpyBase1.xsd中,要求使用key/keyref描述数据的实体完整性以及数据之间的参照完整性(SpyBase2.xml不需要,因为已经使用嵌套消除了参照关系)。 [实验思考] 与ID/IDREF相比,key/keyref有哪些优点,在使用上有何不同? 假设SpyBase1.xml中的alias、mission、spy来自不同的命名空间中,如何在Schema中对其进行限定,请在XMLSPY中完成相应的xsd文档?修改SpyBase1.xml,并验证新的SpyBase1_2.xsd是否正确? [提交时间及内容] 最后提交时间 2013年?月?日 提交内容 提交book.xsd、book.xml(使用多态)。 提交SpyBase1. xsd、SpyBase2. xsd。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值