【php精品源码栏目提醒】:网学会员在php精品源码频道为大家收集整理了“XML实验报告 - 教育“提供大家参考,希望对大家有所帮助!
编号:数学与计算科学学院 创新性实验结题报告书实验题目: 基于 XML 的应用程序设计 :实验成绩(教师填写)学 院: 数学与计算科学学院专 业: 信息与计算科学学生: 邹天涌 0700710427 戴娇佳 0800720206 李宇航 0800710120指导教师: 徐增敏 2010 年 04 月 15 日 摘要 XML 即可扩展标记语言,是一种与平台无关数据表示方法。
简单地说,使用 XML创建的数据可以被任何应用程序在任何平台上读取。
其原因是,XML 与 HTML 一样,都是建立在相同的基于标记技术基础之上。
XML 被设计用来传输和存储数据,特别是应用于 web 开发的许多方面,能够起到简化数据的存储和共享的目的。
本文主要讨论了 XML 文件在网络环境下的传输与显示以及 XML 数据与关系数据的整合。
用 XSLT 转换 XML 文档,用 CSS 在浏览器上显示 XML。
在 B/S 模式下,客户端 以 后 台 或 者 异 步 的 方 式 下 载 XML , 并 在 客 户 端 处 理 XML 内 容 , 或 者 以XMLHttpRequest 获取服务器端的 XML 内容。
最后,研究了利用 XML 如何对资源进行整合和加工,以及 XML 与数据库互相转换的方法,涉及到 JAVA DOM 和
PHP 语言。
关键词:XML;传输;样式表;数据整合;DOM一、实验目的及主要创新性点:实验目的: (1)熟悉 XML 在程序开发过程中的应用; (2)学习用计算机语言实现 XML 数据的传输、整合、解析、存储、显示和打印。
主要创新点: 在网络环境下使用计算机语言对 XML 数据进行分析和应用。
二、实验要求:1、 在 C/S 或 B/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 Server,Oracle 等专业数据库那么强大,但它小巧、简单。
通过使用 XML,纯文本文件可用于存储数据。
也可使用 XML 将数据存储于文件或数据库之中。
可以编写从数据仓库中存储信息的应用程序,而普通的应用程序就可被用来显示这些数据。
XML 不是被设计为用来显示数据的,所以要显示 XML 的数据内容通常需要用到CSS 或 XSLT。
另外,由于 XML 简单,自身并无法满足对数据的查询和修改,也无法自己完成文档的有效性验证,所以还会用到 XPath,DTD 和 XML Schema。
XML 得到了广泛的支持,用各种主流的程序语言,比如 JAVA,C,
PHP 等都可以操作 XML 文档,各大数据库都有专门支持和处理 XML 的模块。
四、实验内容与步骤:1. 研究 XML 文件在网络环境下的传输与显示 在 B/S 模式下,客户端以后台或者异步的方式下载 XML,并在客户端处理 XML 内容,主要包括: (1)用 CSS 和 XSLT 样式表在浏览器中显示 XML 内容; (2)用 DOM、XSLT 以及 JavaScript 和 VBScript 等脚本语言在浏览器中处理 XML文档; (3)也可用 Flash、AS 等显示和处理 XML 文档。
1.1 用 XSLT 在浏览器中显示 XML 应用 XSLT 样式表时, 通常还会用到 XPathXPath 是一种文档寻址语言, 用它来遍历XML 文档,搜索符合特定条件的数据。
比如: (1)//harli01寻址名称为“harli01”的节元素点 (2)//app,寻址含有“app”属性的所有元素节点 通常是 XML 和 HTML 结合,即所谓的 XHTML,XML 和 XSLT 都从服务器端获得,XSLT负责将 XML 内容转换成 XHTML, 然后在浏览器上把它显示出来, 其中用 JavaScript 还可以操作 XML,使得页面按照要求显示出来。
实例:使用 XSLT 样式化 XML 一个经过 XML Schema 验证过的实例文档如图 1.1-1 所示,该文档使用了名称空间,名称空间名为 n, 名称空间 URI 为 http://DUBY2zou.com/2011/xml。
文档中内嵌了 DTD,该 DTD 定义了两个实体(浏览器支持外部 DTD, 但是 Mozilla Firefox 和 Chrome Browser并不支持含有实体定义的外部 DTD) 。
图 1.1-1 一个经 XML Schema 验证有效的实例文档 该实例文档关联的 Schema 文件 teamInfo.xsd 如下:ltxml versionquot1.0quot encodingquotUTF-8quotgtltxsl:stylesheet versionquot1.0quot xmlns:xslquothttp://www.w3.org/1999/XSL/Transformquotgtltxsl:template matchquotn:teamInfoquotgt lthtmlgt ltheadgt lttitlegt队员信息lt/titlegt ltstyle typequotstringquotgt .table_header color:yellow align:center lt/stylegt lt/headgt ltbodygt ltcentergt ltbgt队员信息lt/bgt ltp/gt ltxsl:apply-templates/gt lt/centergt lt/bodygt lt/htmlgtlt/xsl:templategtlt/xsl:stylesheetgt 在不使用 XSL 样式表之前,它在浏览器下显示如图 1.1-2 所示。
图 1.1-2 无样式表的 XML 文档 teamInfo.xml 在 XMl 中加入一行命令,声明引用 teamInfo.xsl 样式表: ltxml-stylesheet typequottext/xslquot hrefquotteamInfo.xslquotgt 该样式表在 XML 文档中添加了一些结构化元素,从而将其转换成一个 XHTML 文档,为了能更好的显示字体颜色和大小,我们外加了一个 CSS(下面将会讲到) ,但是遗憾的是 CSS 将会和 XML 的名称相冲突,所以我们去掉了 XML 名称空间。
最终,在浏览器中显示效果如图 1.1-3: 图 1.1-3 引用 XSL 后的 XML 在浏览器中的显示效果 该 teamInfo.xsl 文档片段如下:ltxml versionquot1.0quot encodingquotgb2312quotgtltxsl:stylesheet xmlns:xslquothttp://www.w3.org/1999/XSL/Transformquot versionquot1.0quotgt ltxsl:output methodquothtmlquot encodingquotgb2312quot indentquotyesquot/gt ltxsl:template matchquotteamInfoquotgt lthtmlgt ltheadgt ltlink relquotstylesheetquot hrefquotcommon.cssquot typequottext/cssquot /gt lttitlegt队员信息lt/titlegt lt/headgt ltbodygt lth1gt队员信息lt/h1gt ltxsl:apply-templates /gt lthr/gt DUBY2 Harli 2011. lt/bodygt lt/htmlgt lt/xsl:templategt ltxsl:template matchquotacademyquotgt 院系: lth3gtltxsl:value-of selectquotacademyquot/gt ltxsl:apply-templates /gtlt/h3gt lt/xsl:templategt ltxsl:template matchquotmajorquotgt 专业: lth3gtltxsl:value-of selectquotmajorquot/gt ltxsl:apply-templates /gtlt/h3gt lt/xsl:templategt ltxsl:template matchquotmemberquotgt 成员ltxsl:number countquotmemberquot/gt: lth2gtltxsl:value-of selectquotmemberquot/gt ltxsl:apply-templates /gtlt/h2gt lt/xsl:templategtlt/xsl:stylesheetgt XSLT 功能强大,它不但可以充分利用 XML 资源,而且还能对它进行加工和改造,但是它也有不足之处, 它使用复杂,而且因为要重新检索 XML 结构树,所以占用内存较多。
而 CSS 正好在控制输出的样式,例如色彩、字体、大小等方面有非常简洁的特点,消耗系统资源少,所以常常将 XSLT 和 CSS 结合起来使用,在服务端用 XSLT 处理文档,在客户端用 CSS 来控制显示。
1.2 用 CSS 在浏览器中显示 XML 整个的处理过程如图 1.3-1 所示。
服务器端将数据转换成 XML XML 文档 数据库 XHTML 文档 XSLT 文档 应用 CSS 浏览器显示 图 1.3-1XML 转换的过程 CSS 可以外联,也可以内嵌,它使用自己独有的语法规则,完美支持 XML 文档在浏览器中的显示,包括布局、文本、字体、色彩等多方面的定义。
实例:为 XML 实例文档添加 CSS 一个简单的 XML 文档如下:ltxml versionquot1.0quot encodingquotUTF-8quotgtltxml-stylesheet typequottext/cssquot hrefquottime.cssquotgtlt-- a time instant --gtlttime timezonequotPSTquotgtlthourgt11lt/hourgtltminutegt59lt/minutegtltsecondgt59lt/secondgtltmeridiemgtp.m.lt/meridiemgtltatomic signalquottruequot/gtlt/timegt 注意到,XML 文档的处理命令中引用了一个 CSS,该 CSS 如下:time font-size:40pt text-align: center time:before content: quotThe time is now: quothour font-family: sans-serif color: bluehour:after content: quot:quot color: blackminute font-family: sans-serif color: redminute:after content: quot:quot color: blacksecond font-family: sans-serif color: purplesecond:after content: quot quot color: blackmeridiem font-variant: small-caps该样式表为 XML 添加了一段文本,并且设置了时间颜色,设置显示效果如图 1.2-1 所示。
图 1.2-1 包含 CSS 的 XML 在 IE 和 Firefox 中的显示 我们可以看到,IE 对 CSS 的支持没有 Firefox 那么好,CSS 中添加的文本内容显示不了。
1.3 XML 文件在网络环境下的传输 Web 服务的通信中大量使用 XML 报文,在 HTTP 协议上运行的 Web 服务和万维网上运行的 HTML 网页服务很相似,都具有“请求信息—gt处理请求——gt应答信息”过程,如图 1.3-1 所示。
Web 服务请求 向服务器请求 harli 的个人资料 收到请求,处理信 息,调用数据库: SELECT FROM table Data 客户端 主服务器 Web 服务应答 ltCustomerHarligt ltCustomer id”7980”gt 数据库 图 1.3-1 XML 传输流程 XML 在客户端发出请求中充当远程调用报文的载体,在应答中充当返回信息的载体。
客户端发出的请求可以为 XML 形式,也可以基于 HTTP 协议,仅有 GET 或 POST 方法在 HTTP报文中发送请求。
应答方解析 XML 请求报文,执行相应的处理方法,然后返回 XML 应答报文。
客户端收到 XML 应答报文后,将应答报文解析为相应的信息,作一定的处理。
实例:加载 Web 服务器上的 XML 文档并在浏览器中显示 DOMDocument 类的 Load方法可以使用 HTTP 等协议加载 Web 服务器上的 XML 文档。
首先我们创建一个客户端网页代码(完整代码见附录 1.1.1) ,该代码调用 DOMDocument类的 Load方法获取服务器的实例文档:function LoadInfo WriteLog quot向服务器发出请求。
quot // 向服务器发送请求 g_xmlDoc.load quotInfo.aspxquot WriteLog quot已向服务器发出请求。
quot 另外,我们是用的异步加载方式,使程序使用后台线程加载文档,避免在文档加载期间客户端浏览器停止响应,Init函数完成对 DOMDocument 对象的初始化操作,然后使用 windows.setTimeout方法启动定时器,1 秒后执行 LoadInfo函数,加载完后,将触发 DOMDocument 的 onreadystatechange事件处理函数,通过该函数将文档的内容显示到浏览器网页中。
然后,再次调用 windows.setTimeout定时器,10 秒后再次执行 LoadInfo函数。
在服务器端,负责提供 XML 文档,是用 ASP.NET 写的,调用 XmlWriter.Create函数生成一个简单的 XML 实例文档(代码见附录)。
在浏览器上的调试效果如图 1.3-2。
图 1.3-2 异步加载 XML 文档并显示1.4 更多浏览器支持的 XMLHttpRequest 对象 MSXML 的 DOMDocument 对象仅支持 IE 浏览器,并且使用的是 HTTP 协议的 GET 方法(传递 URL) ,只能向服务器传送有限的数据,为了获得更多浏览器的支持,则应使用XMLHttpRequest。
一个完整的 XMLHttpRequest 实例如下:var xmlhttpnew XMLHttpRequestxmlhttp.openquotPOSTquotquothttp://localhost:1234/service.asmx/GetBillsquotfalsexmlhttp:sendquotcustomerID8120quotalertxmlhttp.responseXML.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 数据。
在 SQLServer 2005 中, 不但可以把数据库数据转换为 XML 文档, 而且也可以将良好格式的 XML文档转换成表型数据,而且还支持原生的 XML 数据格式。
首 先 我 们 来 将 XML 文 档 转 换 为 数 据 库 数 据 。
这 需 要 用 到 系 统 存 储 过 程sp_xml_preparedocument 的 OPENXML 函 数 , 其 中 , 系 统 存 储 过 程sp_xml_preparedocument 用来创建一个能被插入数据库的 XML 文档的内部表示, 该存储过 程 返 回 一 个 可 以 访 问 XML 文 档 内 部 表 示 的 句 柄 , 另 一 方 面 , 系 统 存 储 过 程sp_xml_removedocument 可以用来删除 XML 文档的内部表示。
实例:将 XML 数据插入到关系表中 插入之前的表如图 2.2-1 所示。
图 2.2-1 已有的关系表 插入的 XML 数据为:ltROOTgtltteamInfo idquot4quot namequotLilyquot sexquotfemalequot agequot19quotgtlt/teamInfogtlt/ROOTgt 如同上面的分析,用系统存储过程 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 文档如下:ltrow idquot1quot namequot邹天涌 quot sexquotmale quot agequot23quot /gtltrow idquot2quot namequot陈福 quot sexquotmale quot agequot21quot /gtltrow idquot3quot namequot陈拥强 quot sexquotmale quot agequot22quot /gt 另一种是 AUTO 模式,该模式支持生成嵌套的 XML 元素,默认情况下,FROM 子句中的每个表将映射到一个 XML 元素,SELECT 子句中的列将映射为属性,该方法如下SELECT FROM teamInfo FOR XML AUTO 执行命令后,得到 XML 文档如下:ltteamInfo idquot1quot namequot邹天涌 quot sexquotmale quot agequot23quot /gtltteamInfo idquot2quot namequot陈福 quot sexquotmale quot agequot21quot /gtltteamInfo idquot3quot namequot陈拥强 quot sexquotmale quot agequot22quot /gt EXPLICIT 模式和 PATH 模式能够更好的控制查询结果生成的 XML 格式,适合比较复杂的文档,PATH 模式的一个实例如下SELECT FROM teamInfo FOR XML PATH 执行命令后,得到 XML 文档如下:ltrowgt ltidgt1lt/idgt ltnamegt邹天涌 lt/namegt ltsexgtmale lt/sexgt ltagegt23lt/agegtlt/rowgtltrowgt ltidgt2lt/idgt ltnamegt陈福 lt/namegt ltsexgtmale lt/sexgt ltagegt21lt/agegtlt/rowgtltrowgt ltidgt3lt/idgt ltnamegt陈拥强 lt/namegt ltsexgtmale lt/sexgt ltagegt22lt/agegtlt/rowgt2.3 利用 Java DOM 解析 XML 实际上 Java 解析 XML 有三种常用的方法:DOM,SAX 和 JDOM,本实验我们只学习了JAVA DOM 的解析。
用于解析的实例文档 duby2.xml 片段如下:ltxml versionquot1.0quot encodingquotUTF-8quotgtltTeamMembergtltPERSON PERSONIDquotE01quotgt ltNAMEgt邹天涌lt/NAMEgt ltNUMBERgt0800710230lt/NUMBERgt ltTELgtlt/TELgt ltEMAILgtharlizou163.comlt/EMAILgtlt/PERSONgtltPERSON PERSONIDquotE02quotgt ltNAMEgt陈福lt/NAMEgt ltNUMBERgt0800710209lt/NUMBERgt ltTELgtlt/TELgt ltEMAILgtchenfu012sina.comlt/EMAILgtlt/PERSONgtltPERSON PERSONIDquotE03quotgt ltNAMEgt陈拥强lt/NAMEgt ltNUMBERgt0800710210lt/NUMBERgt ltTELgtlt/TELgt ltEMAILgtxiaoq1314gmail.comlt/EMAILgtlt/PERSONgtlt/TeamMembergt DOM 在 Java 语言 中的 实 现, 主 要靠 以 下 Java 的 类 和接 口: 解 析器 工 厂 类(DocumentBuilderFactory) ,解析器类(DocumentBuilder) ,文档树模型(Document),节点列表类(NodeList) ,节点类(Node) ,元素类(Element) ,属性类(Attr) 。
用于解析实例文档 duby2.xml 的 Java 源代码如下:import javax.xml.parsers.org.w3c.dom.class dom static void mainString args try DocumentBuilderFactory factory DocumentBuilderFactory.newInstance DocumentBuilder builderfactory.newDocumentBuilder Document docbuilder.parsequotcandidate.xmlquot.out.printlndoc.getImplementation NodeList nl doc.getElementsByTagNamequotPERSONquot for int i0iltnl.getLengthi Element nodeElement nl.itemi System.out.printquotNAME: quot System.out.printlnnode.getElementsByTagNamequotNAMEquot.item0.getFirstChild.getNodeValue System.out.printquotADDRESS: quot System.out.printlnnode.getElementsByTagNamequotADDRESSquot.item0.getFirstChild.getNodeValue System.out.printquotTEL: quot System.out.printlnnode.getElementsByTagNamequotTELquot.item0.getFirstChild.getNodeValue System.out.printquotFAX: quot System.out.printlnnode.getElementsByTagNamequotFAXquot.item0.getFirstChild.getNodeValue System.out.printquotEMAIL: quot System.out.printlnnode.getElementsByTagNamequotEMAILquot.item0.getFirstChild.getNodeValue System.out.println catchException e e.printStackTrace 用 用 在 DOS 下, javac 命令编译源代码, java 命令执行程序, 结果如图 2.3-1 所示。
图 2.3-1Java DOM 解析的 XML 文档2.4 .