第7章XML的高级应用.ppt
XML技术及应用第七章 XML的高级应用,水利水电出版社,古凌岚、罗佳等编著,知识要点,.NET技术对XML的支持ASP.Net中实现对XML文档的处理Java技术对XML的支持基于Java的DOM实现对XML文档的处理基于Java的DOM4J实现对XML文档的处理,7.1.NET技术对XML的支持,Microsoft.NET Framework简介 Microsoft.NET Framework是构成Microsoft.NET平台的核心部分。由公共语言运行库(CLR,Common Language Runtime)和Framework类库(FCL,Framework Class Library)两个部分构成。,7.1.NET技术对XML的支持,Microsoft.NET Framework对XML提供的支持 ADO.NET的对象模型是以XML为核心而设计的,它在System.Xml命名空间提供了丰富的XML支持。,7.1.NET技术对XML的支持,Microsoft.NET Framework对XML提供的支持 ADO.NET对XML文档操作有:可从ADO.NET的数据集对象DataSet读出XML格式的数据,用于与其它分布式应用程序间的数据传送;可将XML数据填充到DataSet对象,用于界面显示,或是更新数据库;可从DataSet读取具有XML架构的XML格式数据,使之可序列化到流或文件中;可从流或文件中将XML数据加载到文档对象模型(DOM)对象中,而后填充到DataSet对象或是直接作为XML文档,对数据进行处理。,7.2 ASP.NET中实现对XML文档的操作,在ASP.Net中实现XML文档的读写方法写XML方法WriteXML语法:WriteXml(目标文件名,写入方式)写入方式为XmlWriteMode(枚举类型)。XmlWriteMode的枚举值有DiffGram、IgnoreSchema、WriteSchema三个,7.2 ASP.NET中实现对XML文档的操作,在ASP.Net中实现XML文档的读写方法读XML方法ReadXML语法:ReadXml(目标文件名),7.2 ASP.NET中实现对XML文档的操作,综合实例:使用ASP.Net和XML实现售书管理模块问题 书店管理系统的售书管理,需要由工作人员从图书列表中选择客户所需要的图书,加入购物清单,对购物清单进行处理(修改数量、删除订单),产生本次销售的销售清单,生成相应的XML格式文档,本次销售结束(结账)还应将此次销售清单汇总到销售单文档中。,7.2 ASP.NET中实现对XML文档的操作,实现效果,7.2 ASP.NET中实现对XML文档的操作,分析设计售书管理模块中的Web页面根据售书业务流程设计程序确定所涉及的XML数据文档关键问题之一:如何通过DataSet处理XML数据文档关键问题之二:实现嵌套XML数据文档的写入方法关键问题之三:销售单号如何自动生成完整实现代码问题扩展:将数据集对象中的表转换为指定格式或结构的XML文档,7.2 ASP.NET中实现对XML文档的操作,解决设计售书管理模块中的Web页面,售书模块设计图,7.2 ASP.NET中实现对XML文档的操作,根据售书业务流程设计程序,7.2 ASP.NET中实现对XML文档的操作,确定所涉及的XML数据文档书籍信息文档(BOOKLIB.xml)销售单信息文档(SELL.xml)员工信息文档(EMPLOYEE.xml)书籍分类信息文档(CATEGORIES.xml),7.2 ASP.NET中实现对XML文档的操作,如何通过DataSet处理XML数据文档.NET Framework提供了XmlDataDocument类与DataSet类的同步机制,即DataSet与XmlDataDocument使用同一组数据,若DataSet对数据进行了更改,则更改会在XmlDataDocument对象中得到反映,反之亦然。,7.2 ASP.NET中实现对XML文档的操作,例如:/创建XmlDataDocument对象XmlDataDocument xmlDataDoc=new XmlDataDocument();DataSet ds=new DataSet();/通过XmlDataDocument的ReadXml方法加载XML文档xmlDataDoc.DataSet.ReadXml(Server.MapPath(source.xml);/填充DataSetds=xmlDataDoc.DataSet;/对DataSet中的数据进行处理/写回XML文档xdd.Save(Server.MapPath(shippers.xml);,7.2 ASP.NET中实现对XML文档的操作,实现嵌套XML数据文档的写入方法 DataSet与XmlDataDocument同步机制中,提供了创建表关系DataRelation对象,设置其Nested属性,即可以实现表关系中的子行嵌套在父列中。,7.2 ASP.NET中实现对XML文档的操作,实现嵌套XML数据文档的写入方法 实现步骤:创建SELL表和SELLDETAIL表结构创建SELL表和SELLDETAIL表对象,将销售图书详细信息存入SELLDETAIL表中,将销售操作员编号、此笔销售金额、销售日期存入SELL表创建DataSet对象,用表SELL 和SELLDETAIL填充,加入SELLID字段为关联、Nested属性为真的DataRelation对象写入嵌套的XML文档。,7.2 ASP.NET中实现对XML文档的操作,销售单号如何自动生成利用DataSet与 XmlDataDocument的同步机制,将销售单XML数据读入DataSet对象,从DataSet对象获取最近一次销售单号,并产生新的销售单号 完整代码实现(略),7.2 ASP.NET中实现对XML文档的操作,单元练习 酒店管理系统网上订房模块,需要根据客户的查询条件进行客房信息查询,查询条件可以是单个条件(如客房类型),也可以是多条件(如客房价格、床位数量等)组合,若存在该客房,则显示客房详细信息,否则,显示“暂无此类客房”的消息。,7.3 Java技术对XML的支持,Java解析XML文档,有四种处理方法:基于树节点文档对象模型(Document Object Module)的DOM基于事件驱动的XML简单API(Simple API for XML)的SAX 专为Java设计基于树节点的处理XML 工具包JDOM(Java Document Object Model)基于面向接口处理xml文档的DOM4J,7.3 Java技术对XML的支持,DOM DOM是一种与平台、语言无关的,处理XML文档的官方W3C标准。DOM将XML文档视为具有层次结构的节点树,DOM中的每一项均为特殊形态的节点对于任何节点都可以进行搜索、增加、修改或删除处理处理前,需要分析并构造树,并加载整个XML文档到内存中,将占用较大的内存空间,从而造成程序处理速度缓慢。,7.3 Java技术对XML的支持,SAX 由XML-dev的邮件列表所发展而来的 基本思想:当一个XML元素分析完,就调用相应的事件处理方法进行处理,即边解析边处理,一旦满足某个特定条件,还可以停止解析工作。SAX的处理方式类似于流媒体,不需要将整个XML文档加载至内存,对于大型文档来说将极大地提高处理效率,7.3 Java技术对XML的支持,JDOM 第一个专为Java程序员设计的处理XML API,不支持如DOM严格的树形结构,简化了与XML的交互 通过JDOM提供的方法,获取节点集的集合形态,可以直接对元素进行操作,7.3 Java技术对XML的支持,DOM4J 由dom4j.org 出品的一个开源XML解析包,与JDOM类似,应用于Java 平台处理XML、XPath 和XSLT 基于面向接口的Java XML API 具有性能优异、功能强大和使用简单的特点,7.3 Java技术对XML的支持,四种方法的比较 DOM4J性能最好,但选择具体使用哪种可视情况而定要求高性能,且不考虑移植,可采用DOM4J。希望编程简单,移植性好,且文档不是很大,可选用DOM文档大,可选用SAX,7.4 Java技术实现对XML文档的操作,利用JAXP进行DOM编程处理XML文档DOM的5个基本对象:Document、Node、NodeList、Element和Attr,7.4 Java技术实现对XML文档的操作,利用JAXP进行DOM编程处理XML文档Document对象,7.4 Java技术实现对XML文档的操作,利用JAXP进行DOM编程处理XML文档Node对象,7.4 Java技术实现对XML文档的操作,利用JAXP进行DOM编程处理XML文档NodeList对象,7.4 Java技术实现对XML文档的操作,利用JAXP进行DOM编程处理XML文档Element对象 Attr对象:代表了某个元素对象的属性,附属于Element对象,7.4 Java技术实现对XML文档的操作,实例:利用DOM实现对图书信息XML文档的读和写 问题 书店管理系统的图书库存管理,工作人员可 以对库存图书进行图书查询,以及增/删图 书。库存图书XML文档BOOKLIB.xml。,7.4 Java技术实现对XML文档的操作,取出的图书列表,实现效果,增加图书的效果,删除图书效果,7.4 Java技术实现对XML文档的操作,分析解析XML文档获取节点集,得到图书列表操作DOM中的节点,读取、增加以及删除图书信息写入XML文档主要实现代码,7.4 Java技术实现对XML文档的操作,解决解析XML文档步骤使用DocumentBuilderFacotry类的静态方法newInstance()创建一个解析器工厂,该方法根据一个系统变量来决定具体使用哪一个解析器通过其静态方法newDocumentBuilder()方法创建一个DocumentBuilder对象解析XML文档,7.4 Java技术实现对XML文档的操作,获取节点集,得到图书列表的过程通过DOM对象的getDocumentElement(),获取DOM树的根节点使用方法getElementsByTagName(String),得到NodeList节点集对象,7.4 Java技术实现对XML文档的操作,操作DOM中的节点,读取、增加以及删除图书信息读取图书信息NodeList.item(i)得到指定序号的Node对象利用getElementsByTagName(String)、getAttribute(String)、getTagName()访问该标签元素的文本、属性值、标签名称等信息。,7.4 Java技术实现对XML文档的操作,操作DOM中的节点,读取、增加以及删除图书信息增加新图书使用DOM的createElement(String)方法创建新元素使用Element对象的setAttribute(String,String)方法可为元素设置新属性。删除图书doc.getDocumentElement().removeChild(指定节点元素);说明:先获得欲删除的结点,而后移去该节点,7.4 Java技术实现对XML文档的操作,写入XML文档过程使用TransformerFactory的静态方法newInstance(),创建一个转换器工厂对象通过转换器工厂对象得到Transformer对象,代表一个特定的转换器对象。调用Transformer类的transfrom(Source,Result)方法,实现输出DOM到输出流对象。两个参数说明:数据源SourceDOM源对象,输出对象Result输出流StreamResult类对象,7.4 Java技术实现对XML文档的操作,单元练习 酒店管理系统入住资料管理,需要实现对入住信息的添加、修改处理,对于已结帐的客人,其入住信息的删除,同时与入住相关的客房信息也需要随之更新状态。,7.4 Java技术实现对XML文档的操作,DOM4J处理XML文档的基本思想:将DOM树的节点集返回到一个集合,遍历DOM树。DOM4J包含的接口,7.4 Java技术实现对XML文档的操作,DOM4J的常用对象:Document(文档)Element(元素)Node(节点)Attribute(属性)Text(文本),7.4 Java技术实现对XML文档的操作,Document(文档),Element(元素),7.4 Java技术实现对XML文档的操作,Node(节点),7.4 Java技术实现对XML文档的操作,综合实例:使用Java和DOM4J实现售书功能模块问题 书店管理系统的售书功能,由工作人员从图书列表中选择客户所需要的图书,对购物清单进行处理(修改数量、删除订单),产生本次销售的销售清单,并保存到XML格式的销售信息文档。,7.4 Java技术实现对XML文档的操作,实现效果,图书信息列表,销售清单,销售汇总信息,7.4 Java技术实现对XML文档的操作,分析根据售书业务流程设计程序确定所涉及的XML数据文档关键问题之一:如何解析XML文档,获取图书列表关键问题之二:如何创建DOM对象,以产生本次销售清单关键问题之三:如何实现写入XML文档,保存销售清单完整实现代码问题扩展:高效率访问DOM对象的机制,7.4 Java技术实现对XML文档的操作,解决根据售书业务流程设计程序 售书管理模块的方法:,7.4 Java技术实现对XML文档的操作,确定所涉及的XML数据文档书籍信息文档(BOOKLIB.xml)销售单信息文档(SELL.xml)销售清单文档(销售单号+销售日期构成文件名)员工信息文档(EMPLOYEE.xml)书籍分类信息文档(CATEGORIES.xml),7.4 Java技术实现对XML文档的操作,解析XML文档,获取图书列表DOM4J中有两个解析XML文档的对象DOMReader和SAXReader DOMReaderSAXReader创建DOM对象,以产生销售清单的步骤生成一个新的购物车 判断是否已在购物车中,7.4 Java技术实现对XML文档的操作,实现写入XML文档,保存销售清单创建一个FileWriter对象作为参数调用Document类的write()方法 完整实现代码(略),7.4 Java技术实现对XML文档的操作,问题扩展:高效率访问DOM对象的机制递归遍历提高效率Visitor模式DOM4J支持Visitor(访问者)模式,Visitor模式是GOF设计模式之一主要思想:封装对某种数据结构元素的操作。将数据结构与数据结构上的操作解耦,使得操作集合的变化与数据结构无关。将有关的操作(对元素的操作、对属性的操作)集中在访问者类中,使得程序员可以跨等级结构访问节点。Visitor模式非常适合于数据结构稳定的系统,且编码量大大减少。,7.4 Java技术实现对XML文档的操作,单元练习 酒店管理系统结账处理,包括客人的入住信息查询、结账处理、客房信息更新。结账处理将产生帐单文档,同时更新客房信息文档。要求利用DOM4J实现上述功能,并生成相应的XML文档。,