《XML应用编程》PPT课件.ppt_第1页
《XML应用编程》PPT课件.ppt_第2页
《XML应用编程》PPT课件.ppt_第3页
《XML应用编程》PPT课件.ppt_第4页
《XML应用编程》PPT课件.ppt_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第八章 XML应用编程,引言,XML 仅仅用来存放数据,其他的工作都交给相应的应用程序来完成。例如,XML数据的显示是由样式单文件来控制的。 更多的针对XML数据的操作,如XML数据的读写,XML数据的添加、删除、修改、查询、管理等工作,都需要用户利用XML编程接口开发相应的应用程序来完成。,本章目标,XML 编程接口与解析器 DOM接口介绍 DOM文档对象模型 DOM的常用接口 SAX接口概述 SAX工作原理 SAX编程一般步骤 遍历XML文档的SAX程序 SAX错误的处理,XML 编程接口与解析器,XML编程接口指的是应用程序操作XML文档所使用的API函数的集合。 DOM接口 SAX接口

2、 这些编程接口需要由XML解析器实现,应用程序为了能够处理XML文档几乎都需要一个XML解析器,XML 编程接口与解析器,解析器能够检查文档是否严格遵守XML规范,也能够判断一个XML文档是否遵守DTD/Schema标准(如果该XML文档有DTD/Schema的话)。 目前XML解析器有许多种类和版本,较为常见的XML解析器主要有:IBM XML4J、Apache Xerces、Sun JAXP、Microsoft MSXML、Oracle XML Parser for Java、James Clark XP等,,XML 编程接口与解析器,DOM接口介绍,DOM接口即文档对象模型(Docume

3、nt Object Model),是W3C(万维网联盟)的推荐标准。 W3C给出的定义为:“W3C 文档对象模型(DOM)是一个使程序和脚本有能力动态地访问和更新文档的内容、结构以及样式的平台和语言中立的接口” DOM接口把XML、HTML或动态HTML的文档看作是面向对象编程概念中的对象,称为文档对象 提供一整套浏览、处理、操作该文档对象及其内部数据的方法和命令,这些方法和命令的集合就构成了DOM API接口,支持 DOM 的 XML 解析器实现该接口。,DOM接口介绍,W3C DOM被分为3个部分: 核心DOM:用于任何结构化文档的标准模型; HTML DOM:用于HTML文档的标准模型;

4、 XML DOM:用于XML文档的标准模型。,DOM接口介绍,当您用一个 DOM 解析器来解析一个 XML 文档时,您将获得一个包含文档中所有元素的树结构。 DOM 解析器提供了添加、删除、修改XML的方法和属性。,DOM接口介绍,XML DOM处理XML文档的优点: 能保证正确的语法和格式 简化了文档的操作。 与数据库可以良好的转换。,DOM文档对象模型,XML 文档中的每个成分都是一个节点。DOM 是这样规定的: 整个文档是一个文档节点; 每个 XML 标记是一个元素节点; 包含在 XML 元素中的文本是文本节点; 每一个 XML 属性是一个属性节点; 注释属于注释节点。,DOM文档对象模

5、型, 上下五千年 王强 20056 30.00元 ,book7_1.xml,DOM文档对象模型,DOM文档对象模型,最常见的节点类型: 元素:元素是 XML 的基本构件。典型地,元素可以有其它元素、文本节点或两者兼有来作为其子节点。元素节点还是唯一可以有属性类型的节点。 属性:属性节点包含关于元素节点的信息,但实际上,不认为它是元素的子节点 文本:文本节点是文本。它可以包含许多信息或仅仅是空白。注意,文本总是存储在文本节点中。在DOM处理中,一个普遍的错误是认为元素节点包含文本。 文档(根节点):文档节点是整个文档中所有其它节点的父节点。(根节点不等于根元素节点!) 较不常见的节点类型:CDA

6、TA、注释、处理指令、DocType,DOM文档对象模型,DOM节点树上的每一个节点同时可以看作是一个对象,DOM编程与面向对象的程序设计非常类似., 上下五千年 王强 20056 30.00元 ,Document对象,处理指令对象,书库元素对象,Text对象上下五千年,属性对象,DOCTYPE对象,书元素对象,DOM文档对象模型,每一个对象同时可以看作是一个节点,每个节点对象都可以包含若干属性,包括: 节点类型:文档、元素、处理指令、文本、注释、属性等 名字:通常为所对应的标记的名字 值:元素类型节点的值属性为NULL; 父节点:Document对象没有父节点 子节点列表: 序号: 其他属性

7、:,DOM即是树模型,又是对象模型,DOM的常用接口,XML与Java具有天然的组合优势 Java提供了JAXP(Java API for XML Parsing)接口来使用SAX和DOM, JAXP接口包含了3个包。 org.w3c.dom,W3C推荐的用于XML标准规划文档对象模型的接口。 org.xml.sax,用于对XML进行语法分析的事件驱动的XML简单API(SAX)。 javax.xml.parsers,解析器工厂工具,程序员获得并配置特殊的语法分析器。,DOM的常用接口,包org.w3c.dom中所定义的接口主要有: Node接口 NodeList接口 Document接口 E

8、lement接口 Attr接口 NamedNodeMap接口 Text接口 其他的接口可参见:jaxp-1_3-fr-spec-apidocs文档,Node接口,Node接口,Node代表文档树中的单个节点 ,它是许多其他接口的超接口,类似于Java中的object接口。 每个节点都有nodeName、nodeValue属性,用于返回当前节点的名称和节点值。注意:所有元素的nodeValue的值为null,用getTextContent获得它的文本值。 每个节点都有一个getNodeType()方法用来获得当前节点类型,该方法返回值是表7-2所示的常量。,节点类型常量,Node接口提供的主要方

9、法,Node接口提供的主要方法(续),返回常用接口,NodeList接口,NodeList 接口提供对节点的有序集合的抽象,如Node接口的getChildNodes()方法所获得的就是一个NodeList对象。 NodeList 中的项可以通过从 0 开始的整数索引进行访问。NodeList接口所提供的主要方法有: getLength() 获得列表中的节点数; Item(i) 访问列表中的第i个节点(从0开始编号),例如: NodeList aa=person.getChildNodes() aa.getLength() aa.item(0),返回常用接口,Document接口,根节点,Do

10、cument.getDocumentElement(),Document.getDoctype(),是操作XML文档的入口节点,返回常用接口,Element接口,Element 代表文档中的一个元素。 由于Element接口继承自Node,所以继承了Node接口的方法、属性。 需要注意的是元素节点的的nodeValue的值为null,而不是元素内容,如果想获得元素内容可以使用它的getTextContent()方法。 除了从node继承的属性外,还有以下的一些属性、方法:,Element接口主要方法,Element接口主要方法(续),返回常用接口,Attr接口,Attr对象代表属性, Attr

11、 对象继承自Node 接口,但由于它们实际上不是元素的子节点,因此,Attr 接口从Node接口继承的方法getParentNode()、getPreviousSibling() 和 getNextSibling() 具有null 值 除了继承Node的属性方法外,还定义了下列的一些属性:,返回常用接口,NamedNodeMap接口,NamedNodeMap是一个具有名称的节点列表,例如node.getAttributes返回的就是一个NamedNodeMap对象 它支持NodeList对象的属性和方法;另外还有一些特殊的方法:,返回常用接口,Text接口,该Text 接口继承自Charact

12、erData,并且表示 Element 或 Attr 的文本内容。,返回常用接口,DOM编程一般步骤,DOM编程通常包括以下几个步骤: 创建一个解析器对象; 将您的 XML 文档传递给解析器,进行解析,产生DOM节点树对象; 处理DOM节点树; 保存DOM节点树。,DOM编程一般步骤,创建一个解析器对象; /首先利用DocumentBuilderFactory类的静态方法newInstance()得到解析器工厂实例 DocumentBuilderFactory domfac =DocumentBuilderFactory.newInstance(); /然后利用解析工厂的newDocument

13、Builder()方法得到解析器; DocumentBuilder dombuilder=domfac.newDocumentBuilder();,DOM编程一般步骤,将XML 文档传递给解析器,进行解析,产生Document对象 Document document=dombuilder.parse(new File(book7_2.xml); 或 Document document=dombuilder.newDocument();,DOM编程一般步骤,其他语言创建Document对象的方法 JScript Var myDocument=new ActiveXObject(“Microsof

14、t.XMLDOM”)myDocument.load(XML文件URL) VBScript dim doc Set doc=CreateObject(Microsoft.XMLDOM) VB Dim doc As ObjectSet Set doc=CreateObject(Microsoft.XMLDOM) ASP ,返回目标,遍历XML文档, 如何成为一个程序员 姜俊杰 胡鹏 赵艳 2006 49.99元 ,book7_2.xml,引入JAVA包; public class DOM7_1 public static void main(String args) try 创建一个解析器对象;

15、将XML 文档传递给解析器,进行解析,产生Document对象; 处理Document对象,以遍历XML文档; catch(Exception e) System.out.println(e); ,Dom7_1.java,简单遍历XML文档程序,引入JAVA包;,import org.w3c.dom.*; import javax.xml.parsers.*; import java.io.*;,返回DOM7_1.java,获得Document对象,DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); Docu

16、mentBuilder builder=factory.newDocumentBuilder(); Document document=builder.parse(new File(book7_2.xml);,返回DOM7_1.java,处理Document对象,Element root=document.getDocumentElement(); String rooName=root.getNodeName(); System.out.println(XML文件根元素的名称为:+rooName); System.out.println(根元素下的子元素有); NodeList childr

17、en=root.getChildNodes(); int size=children.getLength(); for(int i=0;i+content+); ,返回DOM7_1.java,遍历XML文档所有层次的元素,如何输出所有层次元素的元素名? 递归的方法 如何获取所有属性,是否有递归的问题?,遍历XML文档所有层次的元素,引入java包; public class DOM7_2 public static void main(String args) try 获得Document对象; 输出DTD内容; listNodes(document.getDocumentElement(),

18、); catch(Exception e) System.out.println(e); static void listNodes(Node node, String indent) 输出node节点; If(node节点有子节点) listNodes(list.item(i),indent+ ); ,Dom7_2.java,遍历XML文档DTD,获得DTD对象 DocumentType doctype=document.getDoctype(); 获得DTD的名字: String DTDName=doctype.getName(); 获得PUBLIC的标识 String publicId=

19、doctype.getPublicId(); 获得systemId的标识 String systemId=doctype.getSystemId(); 获得内部DTD: String internalDTD=doctype.getInternalSubset(); 获得实体集: NamedNodeMap map=doctype.getEntities();,返回目标,动态创建XML文档,第一步可以建立一个空Document对象; Document newDoc=builder.newDocument(); 第二步可以利用Document对象建立写到文件中的XML DOM树,该树反应了节点的层次

20、结构; 第三步将DOM树保存。下面具体介绍实现方法。,jaxp-1_3-fr-spec-apidocs,动态创建XML文档第二步,Document接口提供了创建其他节点对象的方法: createElement(元素名):创建元素 createComment(注释内容):创建注释 createProcessingInstruction(目标,指令):创建处理指令 createCDATASection(内容):创建CDATA部分 createTextNode(文本):创建文本节点 createAttribute(属性名):创建属性节点 setXmlVersion(“1.0”) appendChil

21、d:添加子节点,动态创建XML文档第二步,Element接口也提供了一些处理DOM树的方法: appendChild:添加子元素节点 setAttribute(属性名,属性值):添加属性节点 setAttributeNode(属性节点):添加一个属性节点 setTextContent(“”)设置元素文本数据 removeChild(节点名): 删除子节点 insertBefore(Node newChild, Node refChild) :将第一个参数指定的节点插入到第二个参数指定的子节点前面 removeAttribute(属性名):删除指定的属性 getElementsByTagName

22、:根据名字获取子元素 Attr接口提供的方法: setValue:设置属性值,动态创建XML文档第三步,保存DOM树需要使用TransformerFactory对象、Transformer对象、StreamResult对象、DOMSource对象等,因此在文档最前面需要引入相关包。 保存DOM树是利用Transformer对象的transform()方法转换实现的; transform()方法有两个参数,第一个参数是DOMSource对象,它封装了要输出的Document对象;第二个参数是StreamResult对象,它封装了输出的XML文档。,创建以下XML文档, 刘红 乒乓球 王江 看电视

23、 曹兵 下棋 ,学生信息表.xml,动态创建XML文档,引入相关JAVA包; public class DOM7_3 public static void main(String args) try 创建XML文档中需要的数据; 创建document节点对象; 创建DOM树; 保存DOM树 catch(Exception e) System.out.println(e); ,DOM7_3.java,返回目标,DOM节点树的修改与删除,setNodeValue(字符串):设置当前节点的值 setTextContent(字符串):设置节点的文本内容 removeChild(节点名): 删除子节点

24、insertBefore(Node newChild, Node refChild) :将第一个参数指定的节点插入到第二个参数指定的子节点前面 replaceChild(Node newChild, Node oldChild) :用新的子节点(第一个参数)去替换旧的子节点(第二个参数) removeAttribute(属性名):删除指定的属性 setAttribute(Stringname, Stringvalue) :添加属性 setAttributeNode(AttrnewAttr) :添加属性 SetValue(字符串):设置当前属性的属性值 replaceWholeText(字符串)

25、 :用指定的文本替换当前文本节点的所有文本值,返回目标,DOM7_4.java,SAX接口概述,SAX简易应用程序编写接口Simple API for XML。它并不是由W3C官方所提出的标准,而是“民间”的事实标准,是一种社区性质的讨论产物。几乎所有的XML解析器都会支持它。 与DOM比较,SAX是一种轻量型的处理XML文档的方法。,SAX接口概述,SAX具有如下主要优点: 可以解析任意大小的文件 适合创建自己的数据结构 适合小信息子集 简单 快速,SAX接口概述,SAX也存在以下不足之处 不能对文档做随机存取 难以实现复杂的查询 不能使用文档类型定义(DTD) 不可获取词法信息 SAX是只

26、读的 当前的浏览器不支持SAX,SAX工作原理,SAX提供了一种对XML文档进行顺序访问的模式,这是一种快速读写XML数据的方式。 当使用SAX分析器对XML文档进行分析时,会触发一系列事件,并激活响应的事件处理函数,从而完成对XML文档的访问,所以SAX接口也称作事件驱动接口。,SAX工作原理,委托事件模型,注册监听者:saxParser.parse(new File(Sax_1.xml),handler);,返回本章目标,SAX编程一般步骤,使用SAX编程一般包括以下3个步骤: 建立解析器对象; 为SAX解析器注册监听者,使用SAX解析器解析XML文档; 实现SAX事件处理器类。,建立解析

27、器对象,SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setNamespaceAware(true); spf.setValidating(true); SAXParser parser = spf.newSAXParser();,为SAX解析器注册监听者,解析XML文档,要使用SAXParser解析文档,只需调用它的parse()方法。 在此必须指定parse()方法的两个实参:第一个指定了要解析的XML文档,第二个是指定处理事件的对象,这个对象的类型应为DefaultHandler适配器类。 代码如下: SAX7_5

28、handler = new SAX7_5(); parser.parse(xmlFile, handler);,实现SAX事件处理器类,SAX API 实际上定义了几个监听者接口来处理事件: ContentHandler, DTDHandler, EntityResolver, ErrorHandler,Attributes,XMLReader 一个典型的SAX应用程序至少要提供一个ContentHandler接口。一个健壮的SAX应用程序还应该提供ErrorHandler接口。 DefaultHandler适配器类实现了ContentHandler、 DTDHandler、 EntityRe

29、solver 、ErrorHandler接口中的所有方法。,ContentHandler接口的方法,ContentHandler接口的方法,实现SAX事件处理器类,大多数情况下,您的 Java 代码将继承 DefaultHandler 适配器类。 例如: public class saxOne extends DefaultHandler ,此类继承了适配器类,可以做监听者,遍历XML文档, 李华 男 1978.9.12 92 Java ,student7_3.xml,遍历XML文档的SAX应用程序,import javax.xml.parsers.SAXParserFactory; impo

30、rt javax.xml.parsers.SAXParser; import org.xml.sax.SAXException; import java.io.File; import java.io.IOException; public class SAX7_6 public static void main(String args) File xmlFile = new File(student7_3.xml); SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser parser = null; spf.setN

31、amespaceAware(true); spf.setValidating(true); try parser = spf.newSAXParser(); SAX7_5 handler = new SAX7_5(); parser.parse(xmlFile, handler); catch(Exception e) e.printStackTrace(System.err); ,SAX7_6.java,遍历XML文档的SAX应用程序,import org.xml.sax.helpers.DefaultHandler; import org.xml.sax.Attributes; public class SAX7_5 extends DefaultHandler /文档开始事件处理方法 public void startDocument() System.out.println(文档开始 ); /文档结束事件处理方法 public void endDocument() System.out.println(文档结束); /元素开始事件处理方法 public void startElement(String uri, String localName, String qname, Attributes a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论