免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1390 | 回复: 0
打印 上一主题 下一主题

gfhghf [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-12-23 03:17 |只看该作者 |倒序浏览

编号:               

 

 

 

 

 数学与计算科学学院

创新性实验结题报告书

 

 

 

 

 

 

 

实验题目:   基于XML的应用程序设计

          实验成绩(教师填写):               

    院:   数学与计算科学学院    

    业:     信息与计算科学      

学生姓名:     邹天涌             

小组成员:       邹天涌 0800710230 

                   0800710209 

                 陈拥强 0800710210  

指导教师:     徐增敏              

        

2011 04 15

摘要

       XML即可扩展标记语言,是一种与平台无关数据表示方法。简单地说,使用XML创建的数据可以被任何应用程序在任何平台上读取。其原因是,XMLHTML一样,都是建立在相同的基于标记技术基础之上。XML被设计用来传输和存储数据,特别是应用于 web 开发的许多方面,能够起到简化数据的存储和共享的目的。

       本文主要讨论了XML文件在网络环境下的传输与显示以及XML数据与关系数据的整合。用XSLT转换XML文档,用CSS在浏览器上显示XML。在B/S模式下,客户端以后台或者异步的方式下载XML,并在客户端处理XML内容,或者以XMLHttpRequest获取服务器端的XML内容。最后,研究了利用XML如何对资源进行整合和加工,以及XML与数据库互相转换的方法,涉及到JAVA DOMPHP语言。

 

关键词:XML;传输;样式表;数据整合;DOM


一、实验目的及主要创新性点:

实验目的:

1)熟悉XML在程序开发过程中的应用;

2)学习用计算机语言实现XML数据的传输、整合、解析、存储、显示和打印。

主要创新点:

在网络环境下使用计算机语言对XML数据进行分析和应用。

二、实验要求:

1 C/SB/S模式下实现XML数据的传输与显示;        

2 对服务器端发送的XML数据要求能自动录入数据库,并支持报表打印;

3 学习在一个客户端对所发送数据进行XML格式整合,并能在另一端显示;

4 画出相关程序流程图、界面设计效果图;

5 提交一篇小论文和程序源代码。

三、实验原理:

XML是被设计为存储、传输以及交换数据的。它是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立。XML有很多方面的应用,本实验涉及到的是下面几种。

XML可以将HTML与数据分离,通过使用XML,您的数据可存储于HTML之外。当我们使用HTML来显示数据时,数据存储于HTML中。通过使用XML,数据可以被存储在单独的XML文件中。这样做的话,您就可以把注意力集中在使用HTML进行数据布局和显示上面,并确保底层数据的改变不会牵扯到HTML的改变。

XML用于交换数据,通过使用XML,可以在互不兼容的系统间交换数据。在现实世界中,计算机系统和数据库通过互不兼容的格式来容纳数据。对开发人员来说,其中一项最费时的挑战一直是在因特网上的系统之间交换数据。通过将数据转换为XML,可以极大地降低这种复杂性,并创建可被许多不同类型的应用程序读取的数据。

XML可用于存储数据,它没有SQL ServerOracle等专业数据库那么强大,但它小巧、简单。通过使用XML,纯文本文件可用于存储数据。也可使用XML将数据存储于文件或数据库之中。可以编写从数据仓库中存储信息的应用程序,而普通的应用程序就可被用来显示这些数据。

XML不是被设计为用来显示数据的,所以要显示XML的数据内容通常需要用到CSSXSLT。另外,由于XML简单,自身并无法满足对数据的查询和修改,也无法自己完成文档的有效性验证,所以还会用到XPathDTDXML Schema

XML得到了广泛的支持,用各种主流的程序语言,比如JAVAC#PHP等都可以操作XML文档,各大数据库都有专门支持和处理XML的模块。

四、实验内容与步骤:

1. 研究XML文件在网络环境下的传输与显示

    B/S模式下,客户端以后台或者异步的方式下载XML,并在客户端处理XML内容,主要包括:

1)用CSSXSLT样式表在浏览器中显示XML内容;

2)用DOMXSLT以及JavaScriptVBScript等脚本语言在浏览器中处理XML文档;

    3)也可用FlashAS等显示和处理XML文档。

 

1.1XSLT在浏览器中显示XML

    应用XSLT样式表时,通常还会用到XPath,XPath是一种文档寻址语言,用它来遍历XML文档,搜索符合特定条件的数据。比如:

    1//harli01,寻址名称为“harli01的节元素点

    2//*[@app],寻址含有“app”属性的所有元素节点

    通常是XMLHTML结合,即所谓的XHTMLXMLXSLT都从服务器端获得,XSLT负责将XML内容转换成XHTML,然后在浏览器上把它显示出来,其中用JavaScript还可以操作XML,使得页面按照要求显示出来。

实例:使用XSLT样式化XML

    一个经过XML Schema验证过的实例文档如图1.1-1所示,该文档使用了名称空间,名称空间名为n,名称空间URIhttp://DUBY2zou.com/2011/xml。文档中内嵌了DTD,该DTD定义了两个实体(浏览器支持外部DTD,但是Mozilla FirefoxChrome Browser并不支持含有实体定义的外部DTD)。

1.1-1一个经XML Schema验证有效的实例文档

    该实例文档关联的Schema文件teamInfo.xsd如下:

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

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

<xsl:template match="n:teamInfo">

       <html>

              <head>

                     <title>队员信息</title>

                     <style type="string">

                     .table_header {

                     color:yellow;

                     align:center

                     }

                     </style>

              </head>

              <body>

                     <center>

                            <b>队员信息</b>

                            <p/>

                            <xsl:apply-templates/>

                     </center>

              </body>

       </html>

</xsl:template>

</xsl:stylesheet>

在不使用XSL样式表之前,它在浏览器下显示如图1.1-2所示。

1.1-2无样式表的XML文档teamInfo.xml

 

XMl中加入一行命令,声明引用teamInfo.xsl样式表:

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

该样式表在XML文档中添加了一些结构化元素,从而将其转换成一个XHTML文档,为了能更好的显示字体颜色和大小,我们外加了一个CSS(下面将会讲到),但是遗憾的是CSS将会和XML的名称相冲突,所以我们去掉了XML名称空间。最终,在浏览器中显示效果如图1.1-3

1.1-3引用XSL后的XML在浏览器中的显示效果

    teamInfo.xsl文档片段如下:

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

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

       <xsl:output method="html" encoding="gb2312" indent="yes"/>

 

       <xsl:template match="teamInfo">

              <html>

                     <head>

                            <link rel="stylesheet" href="common.css" type="text/css" />

                            <title>队员信息</title>

                     </head>

                     <body>

                            <h1>队员信息</h1>

                            <xsl:apply-templates />

                            <hr/>

                     DUBY2 Harli 2011.

                     </body>

              </html>

       </xsl:template>

       <xsl:template match="academy">

              院系:

              <h3><xsl:value-of select="academy"/>

              <xsl:apply-templates /></h3>

       </xsl:template>

       <xsl:template match="major">

              专业:

              <h3><xsl:value-of select="major"/>

              <xsl:apply-templates /></h3>

       </xsl:template>

 

       <xsl:template match="member">

              成员<xsl:number count="member"/>

              <h2><xsl:value-of select="member"/>

              <xsl:apply-templates /></h2>

       </xsl:template>

</xsl:stylesheet>

    XSLT功能强大,它不但可以充分利用XML资源,而且还能对它进行加工和改造,但是它也有不足之处,它使用复杂,而且因为要重新检索XML结构树,所以占用内存较多。而CSS正好在控制输出的样式,例如色彩、字体、大小等方面有非常简洁的特点,消耗系统资源少,所以常常将XSLTCSS结合起来使用,在服务端用XSLT处理文档,在客户端用CSS来控制显示。

 

1.2CSS在浏览器中显示XML

    整个的处理过程如图1.3-1所示。

 

数据库

XML文档

XHTML文档

XSLT文档

 

应用CSS

服务器端将数据转换成XML

 

浏览器显示

 

 

 

 

 

 

 

 

 

 


1.3-1XML转换的过程

 

    CSS可以外联,也可以内嵌,它使用自己独有的语法规则,完美支持XML文档在浏览器中的显示,包括布局、文本、字体、色彩等多方面的定义。

 

实例:为XML实例文档添加CSS

    一个简单的XML文档如下:

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

<?xml-stylesheet type="text/css" href="time.css"?>

<!-- a time instant -->

<time timezone="PST">

<hour>11</hour>

<minute>59</minute>

<second>59</second>

<meridiem>p.m.</meridiem>

<atomic signal="true"/>

</time>

    注意到,XML文档的处理命令中引用了一个CSS,该CSS如下:

time {font-size:40pt; text-align: center }

time:before {content: "The time is now: "}

hour {font-family: sans-serif; color: blue}

hour:after {content: ":"; color: black}

minute {font-family: sans-serif; color: red}

minute:after {content: ":"; color: black}

second {font-family: sans-serif; color: purple}

second:after {content: " "; color: black}

meridiem {font-variant: small-caps}

该样式表为XML添加了一段文本,并且设置了时间颜色,设置显示效果如图1.2-1所示。

1.2-1包含CSSXMLIEFirefox中的显示

我们可以看到,IECSS的支持没有Firefox那么好,CSS中添加的文本内容显示不了。

1.3 XML文件在网络环境下的传输

    Web服务的通信中大量使用XML报文,在HTTP协议上运行的Web服务和万维网上运行的HTML网页服务很相似,都具有“请求信息—>处理请求——>应答信息”过程,如图1.3-1所示。

Web服务请求

向服务器请求harli的个人资料……

主服务器

数据库

客户端

收到请求,处理信息,调用数据库:

SELECT *FROM table Data

Web服务应答

<CustomerHarli>

         <Customer id=”7980”>

                   ……

 

 

 


                  

 

1.3-1 XML传输流程

   

XML在客户端发出请求中充当远程调用报文的载体,在应答中充当返回信息的载体。客户端发出的请求可以为XML形式,也可以基于HTTP协议,仅有GETPOST方法在HTTP报文中发送请求。应答方解析XML请求报文,执行相应的处理方法,然后返回XML应答报文。客户端收到XML应答报文后,将应答报文解析为相应的信息,作一定的处理。

 

实例:加载Web服务器上的XML文档并在浏览器中显示

    DOMDocument类的Load()方法可以使用HTTP等协议加载Web服务器上的XML文档。首先我们创建一个客户端网页代码(完整代码见附录1.1.1),该代码调用DOMDocument类的Load()方法获取服务器的实例文档:

function LoadInfo () {

    WriteLog ("向服务器发出请求。");  

    // 向服务器发送请求

    g_xmlDoc.load ("Info.aspx");

    WriteLog ("已向服务器发出请求。");

}

    另外,我们是用的异步加载方式,使程序使用后台线程加载文档,避免在文档加载期间客户端浏览器停止响应,Init()函数完成对DOMDocument对象的初始化操作,然后使用windows.setTimeout()方法启动定时器,1秒后执行LoadInfo()函数,加载完后,将触发DOMDocumentonreadystatechange()事件处理函数,通过该函数将文档的内容显示到浏览器网页中。然后,再次调用windows.setTimeout()定时器,10秒后再次执行LoadInfo()函数。

    在服务器端,负责提供XML文档,是用ASP.NET写的,调用XmlWriter.Create()函数生成一个简单的XML实例文档(代码见附录)。在浏览器上的调试效果如图1.3-2

1.3-2异步加载XML文档并显示

 

1.4 更多浏览器支持的XMLHttpRequest对象

     MSXMLDOMDocument对象仅支持IE浏览器,并且使用的是HTTP协议的GET方法(传递URL),只能向服务器传送有限的数据,为了获得更多浏览器的支持,则应使用XMLHttpRequest。一个完整的XMLHttpRequest实例如下:

var xmlhttp=new XMLHttpRequest();

xmlhttp.open("POST","http://localhost:1234/service.asmx/GetBills",false);

xmlhttp:send("customerID=8120");

alert(xmlhttp.respon***ML.xml);

该例子为向脚本所在计算机1234端口上“/service.asmx/GetBills”的Web服务器路径发送XML HTTP请求,并获取其应答内容。

 

2.XML数据整合,并与数据库交互

2.1XML数据资源整合模型

    XML的资源整合涉及异构数据交换、XML信息整合以及XML数据显示样式等多方面内容。实现异构数据交换是信息共享基础,关键问题是如何实现异构系统与XML 数据的双向转换接口以及XML信息的发布和请求相应。图2.1-1描述了利用XML对资源进行整合的过程。

2.1-1 XML资源整合模型

 

2.2 XML与数据库数据的相互转换

    Microsoft SQL Server 2005数据库功能强大,而且很好的支持XML数据。在SQL Server 2005中,不但可以把数据库数据转换为XML文档,而且也可以将良好格式的XML文档转换成表型数据,而且还支持原生的XML数据格式。

    首先我们来将XML文档转换为数据库数据。这需要用到系统存储过程sp_xml_preparedocumentOPENXML函数,其中,系统存储过程sp_xml_preparedocument用来创建一个能被插入数据库的XML文档的内部表示,该存储过程返回一个可以访问XML文档内部表示的句柄,另一方面,系统存储过程sp_xml_removedocument可以用来删除XML文档的内部表示。

实例:将XML数据插入到关系表中

    插入之前的表如图2.2-1所示。

2.2-1已有的关系表

插入的XML数据为:

<ROOT>

<teamInfo id="4" name="Lily" ***="female" age="19">

</teamInfo>

</ROOT>'

如同上面的分析,用系统存储过程sp_xml_preparedocument完成XML数据到关系表的转换,在SQL Server查询分析器中编写如下代码,运行结果如图2.2-2所示。

2.2-2实现将XML数据转换到SQL关系表中的过程

插入后的关系表如图2.2-3所示。

2.2-3插入新数据后的关系表

   

接下来,我们反过来,将关系数据库中的数据转换为XML文档。在SQL Server2005中实现该过程有多种模式。RAW模式,将查询结果集中的每一行映射到一个XML元素,并将行中的每一列映射到一个属性,该方法如下:

SELECT *   FROM teamInfo FOR XML RAW

    执行命令后,得到XML文档如下:

<row id="1" name="邹天涌    " ***="male      " age="23" />

<row id="2" name="陈福      " ***="male      " age="21" />

<row id="3" name="陈拥强    " ***="male      " age="22" />

    另一种是AUTO模式,该模式支持生成嵌套的XML元素,默认情况下,FROM子句中的每个表将映射到一个XML元素,SELECT子句中的列将映射为属性,该方法如下;

SELECT *   FROM teamInfo FOR XML AUTO

    执行命令后,得到XML文档如下:

<teamInfo id="1" name="邹天涌    " ***="male      " age="23" />

<teamInfo id="2" name="陈福      " ***="male      " age="21" />

<teamInfo id="3" name="陈拥强    " ***="male      " age="22" />

 

    EXPLICIT模式和PATH模式能够更好的控制查询结果生成的XML格式,适合比较复杂的文档,PATH模式的一个实例如下;

SELECT *   FROM teamInfo FOR XML PATH

    执行命令后,得到XML文档如下:

<row>

  <id>1</id>

  <name>邹天涌    </name>

  <***>male      </***>

  <age>23</age>

</row>

<row>

  <id>2</id>

  <name>陈福      </name>

  <***>male      </***>

  <age>21</age>

</row>

<row>

  <id>3</id>

  <name>陈拥强    </name>

  <***>male      </***>

  <age>22</age>

</row>

 

2.3利用Java DOM解析XML

    实际上Java解析XML有三种常用的方法:DOMSAXJDOM,本实验我们只学习了JAVA DOM的解析。用于解析的实例文档duby2.xml片段如下:

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

<TeamMember>

<PERSON PERSONID="E01">

 <NAME>邹天涌</NAME>

 <NUMBER>0800710230</NUMBER>

 <TEL>15078358787</TEL>

 <EMAIL>harlizou@163.com</EMAIL>

</PERSON>

<PERSON PERSONID="E02">

 <NAME>陈福</NAME>

 <NUMBER>0800710209</NUMBER>

 <TEL>15078396151</TEL>

 <EMAIL>chenfu012@sina.com</EMAIL>

</PERSON>

<PERSON PERSONID="E03">

 <NAME>陈拥强</NAME>

 <NUMBER>0800710210</NUMBER>

 <TEL>13788566421</TEL>

 <EMAIL>xiaoq1314@gmail.com</EMAIL>

</PERSON>

</TeamMember>

    DOMJava语言中的实现,主要靠以下Java的类和接口:解析器工厂类(DocumentBuilderFactory),解析器类(DocumentBuilder),文档树模型(Document),节点列表类(NodeList),节点类(Node),元素类(Element),属性类(Attr)。

    用于解析实例文档duby2.xmlJava源代码如下:

import javax.xml.parsers.*;org.w3c.dom.*;

class dom {static void  main(String args[]){

 try{

   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

   DocumentBuilder builder=factory.newDocumentBuilder();

   Document doc=builder.parse("candidate.xml");.out.println(doc.getImplementation());

   NodeList nl =doc.getElementsByTagName("PERSON");

   for (int i=0;i<nl.getLength();i++){

     Element node=(Element) nl.item(i);

     System.out.print("NAME: ");

     System.out.println (node.getElementsByTagName("NAME").item(0).getFirstChild().getNodeValue());

     System.out.print("ADDRESS: ");

     System.out.println (node.getElementsByTagName("ADDRESS").item(0).getFirstChild().getNodeValue());

     System.out.print("TEL: ");

     System.out.println (node.getElementsByTagName("TEL").item(0).getFirstChild().getNodeValue());

     System.out.print("FAX: ");

     System.out.println (node.getElementsByTagName("FAX").item(0).getFirstChild().getNodeValue());

     System.out.print("EMAIL: ");

     System.out.println (node.getElementsByTagName("EMAIL").item(0).getFirstChild().getNodeValue());

     System.out.println();

   }

   }catch(Exception e){

     e.printStackTrace();

   }

 }

}

    DOS下,用javac命令编译源代码,用java命令执行程序,结果如图2.3-1所示。

2.3-1Java DOM解析的XML文档

 

2.4利用PHPXMLMysql中进行导入和导出

 

    PHP5后,PHP提供了对XML更加强大的支持和更方便的操作,现在大多数网站都是PHP做的,PHP+XML实际上经常被用到。这次我们用的是My SQL数据库。

    首先,我们用PHPMy SQL数据库动态的建立XML文档。先建立一个示例数据库db_database05,建立一个关系表并命名为teamInfo,该表的详细信息如下:

 

向该表中插入3组数据,关系表如下:

    现在我们就用PHP来操作该关系表,因为通常XML文件都很小(通常不会超过2M),所以PHP常用DOM解析XML,具体用到DOM类库中的如下方法:

    1)通过new DomDocument()实例化一个DomDocument对象;

    2)通过$dom->createAttrribute创建一个新的属性,通过$dom->createTextNode创建属性值;

3)通过$dom->saveXML生成一个XML文档;

4)通过file_put_contents()函数将生成的XML文档定义到一个具体的文件中。

    下面是PHP关键代码(片段):

<?php

$dom = new DomDocument('1.0','gb2312');

$object = $dom->createElement('teamInfo');      

$dom->appendChild($object);     

       $type1 = $dom->createAttribute('xmlns:rdf');

       $object->appendChild($type1);    

              $type1_value = $dom->createTextNode('http://www.w3.org/1999/');               $type1->appendChild($type1_value);  

       $academy = $dom->createElement('academy');   

       $object->appendChild($academy);      

                     $academy_value = $dom->createTextNode(iconv('gb2312','utf-8','数学与计算科学学院'));

                     $academy->appendChild($academy_value);

$sql=mysql_query("select * from teamInfo order by id desc");

while($myrow=mysql_fetch_array($sql)){

              $member = $dom->createElement('member');     

              $object->appendChild($member);

                     $member_id = $dom->createElement('id');  

                     $member->appendChild($member_id);       

                            $id_value = $dom->createTextNode(iconv('gb2312','utf-8',"$myrow[id]"));

                            $member_id->appendChild($id_value);             

}

$modi = $dom->saveXML();

file_put_contents('teamInfo.xml',$modi);    

?>

    由代码的倒数第二行可知,生成的XML文件名为teamInfo.xml,如下所示:

2.4-1MySQL数据库生成的XML文件

 

    关于PHPXML文档的其他操作,包括读取XML文件并写入数据库,查询、修改XML文件等,方法都是类似的,即调用DOM类库中的对应方法,比如getElementsByTagName(读取),DOMXPath->quuery(查询)等等。值得一提的是,PHP很方便实现了将XML文件“从数据库导出——添加XSLT——添加CSS——web浏览器显示”的一体化过程,所以PHPXML搭档还是不错的,而Java逐渐的在远离XML,因为JAVAAnnotationJSON

五、实验结果分析或总结:

       XML所涉及到的内容非常的多,周边技术包括HTMLCSSXSLTDTDSchemaXHTMLXPathXPointerJavaScriptActiveAJAXDOMSAXSQL ServerMy SQLflashASP.NETPHPJavaSOAPHTTP等等,非常让人头痛,而且浏览器对以上技术的支持各不相同,各种版本也很多,新版本跟不上,旧版本丢不掉,都让人很痛苦。我们认真学习了XML的语法,文档验证,样式表等等以及分析了XML文档与SQL数据库的差别,两者之间转换的一些理论,研究了基于XML的数据资源整合。我们还学习了JAVAPHPXML的解析,学习了MYSQL数据库。虽然XML是平台无关的,但用起来并不一定顺心,XML的树形结构和SQL的表型结构并不能很好的兼容,往往要重构后才能应用。在2007年以前关系数据库和XML之间的转换是很困难的,甚至有的做出来了自己申请一个专利。但是技术在不断发展,SQL Server2005增加了对xml数据类型的支持,JDBC 4.0 引入了针对 SQLXML 类型的标准化支持,允许以 XML 形式从(向)数据库读取(写入)XML,这个支持意味着:无需不必要的映射,XML 就可以原生地在中间层和数据库之间流动。也有新的数据描述语言出现,比如YAML,比起XML有一定优势。

六、参考文献

[1] Sas Jacobs. XML基础教程[M],北京:人民邮电出版社,2007

[2] 张欣毅. XML简明教程[M],北京:清华大学出版社,2009

[3] Sandra E.Eddy. XML 精要:语法详解与编程指南[M],北京:清华大学出版社,2002

[4] 左明伟. 完全掌握XML[M],北京:人民邮电出版社,2009

[5] 吴洁. XML应用教程[M],北京:清华大学出版社,2007

[6] Peter G.Aitken. 微软XML技术指南[M],北京:中国电力出版社,2003

[7] http://www.w3school.com.cn/xml[OL]W3网络教程,2011-4

[8]http://www.ibm.com/developerworks/cn/views/xml/libraryview.jsp[OL]IBM开发者XML文档库,2011-4

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP