收藏 分享(赏)

XML程序设计第6章.ppt

上传人:ysd1539 文档编号:8409745 上传时间:2019-06-25 格式:PPT 页数:25 大小:151KB
下载 相关 举报
XML程序设计第6章.ppt_第1页
第1页 / 共25页
XML程序设计第6章.ppt_第2页
第2页 / 共25页
XML程序设计第6章.ppt_第3页
第3页 / 共25页
XML程序设计第6章.ppt_第4页
第4页 / 共25页
XML程序设计第6章.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、2009-10-20,1,XML程序设计 第6章,配合例子源代码一起使用,DOM解析器,2009-10-20,2,本章主要内容 初识DOM解析器 节点类型 Document节点 Element节点 Text节点 CDATASection节点 Attr节点 DocumentType节点 处理空白 使用DOM生成XML文件 难点 使用DOM生成XML文件,第6章 导读,2009-10-20,3,概述,XML解析器是XML和应用程序之间的一个软件组织,为应用程序从XML文件中解析出所需要的数据。有两种类型的解析器:基于DOM的解析器和基于事件的解析器,本章讲述基于DOM的解析器,下一章讲述基于事件的

2、解析器(SAX)。,2009-10-20,4,6.1 DOM解析器,DOM解析器的核心是在内存中建立和XML文件相对应的树形结构数据,XML文件的标记、标记的文本内容等都会和内存中树形结构数据的某个节点相对应。,2009-10-20,5,6.1.1 DOM标准,DOM(Document Object Model,文档对象模型)是W3C制定的一套规范标准,各种语言可以按着DOM规范给出解析XML文件的解析器。DOM规范中所指的文件相当的广泛,其中包括XML文件以及HTML文件。Java语言通过把DOM规范中的接口用Java的接口(interface)写下来,并给出实现这些接口的类的集合,从而实现

3、DOM规范的Java语言绑定(Java language binding)。,2009-10-20,6,6.1.2 初识JAXP_1,按着W3C制定的DOM规范,Sun公司发布的JDK1.4的后续版本中提供了解析XML文件的API(Java API for XML Parsing,JAXP),JAXP实现了DOM规范的Java语言绑定,给出了DOM规范指定的接口,并给出实现这些接口的类的集合。,2009-10-20,7,6.1.2 初识JAXP_2,在JAXP(Java API for XML Parsing,JAXP)中,DOM解析器是DocumentBuilder类的一个实例,该实例由Do

4、cumentBuilderFactory负责创建。步骤有3步。1.使用javax.xml.parsers包中的DocumentBuilderFactory类调用其类方法newInstance()实例化一个DocumentBuilderFactory对象DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();2.步骤1得到的DocumentBuilderFactory对象调用newDocumentBuilder()方法返回一个DocumentBuilder对象(DocumentBuilder类在javax.xml.p

5、arsers包中) domParser(称做DOM解析器),例如:DocumentBuilder domParser=factory.newDocumentBuilder(); 3.步骤2中得到的DOM解析器调用 public Document parse(File f)方法解析参数f指定的XML文件,该方法返回的对象是实现了Document接口的一个实例(Document接口在org.w3c.dom包中),例如: Document document=domParser.parse(new File(“student.xml“) ;,2009-10-20,8,6.1.2 初识JAXP_3,DO

6、M解析器domParse调用parse方法返回的对象document是由一些Node对象所构成,Node对象被习惯地称作节点,这些节点被组成树形结构。Document的结构和XML标记组成的树形结构相同,即document就是DOM解析器在内存中建立的和XML文件相对应的树形结构数据。应用程序只要分析内存中的树形结构数据document,就可以获得XML文件中的各种数据了。,2009-10-20,9,6.1.3 Doucument对象的结构,DOM解析器负责在内存中建立Document对象,即调用parse方法返回一个实现Document接口的对象,简称Document对象。也称Documen

7、t对象为Document节点。应用程序可以从Document节点的子孙节点中获取整个XML文件中数据的细节。Document节点是“树”的根节点,该“树”由实现了Node接口的类的实例所组成,XML文件中的标记都和Document节点的某个Node子节点相对应。 例题6.1 p135,2009-10-20,10,6.1.3 example6_1.xml文件对应的Document节点,2009-10-20,11,6.2.1 Node接口,6.2 节点的类型,Doucumen接口也是Node接口的子接口,也就是说,parse方法将整个被解析的XML文件封装成一个节点返回(XML文件和内存中的Doc

8、ument节点相对应),并且该节点和它的子节点组成树形结构数据。因此,应用程序可以从Document节点的子孙节点中获取整个XML文件中数据的细节。,2009-10-20,12,6.2.2 Node 接口的常用方法,short getNodeType()该方法返回一个表示节点类型的常量(Node接口规定的常量值),例如,对于Element节点,getNodeType()方法返回的值为 Node.ELEMENT_NODE NodeList getChildNodes()返回一个由当前节点的所有子节点组成的NodeList对象。 Node getFirstChild()返回当前节点的第一个子节点。

9、 Node getLastChild()返回当前节点的最后一个子节点。 NodeList getTextContent()返回当前节点及所有子孙节点中的文本内容。,2009-10-20,13,6.2.3 节点的子孙关系,为了解析规范的XML文件,DOM规范规定了各种类型节点之间可以形成的子孙关系,比如,Document节点有且仅有一个Element节点,也可以有一个DocumentType节点(规范的XML文件有且仅有一个根标记,也可以有一个与其关联的DTD文件),Element节点可以有Element子节点和Text子节点(规范的XML文件中的标记可以有子标记和文本)。,2009-10-20

10、,14,6.2.4使用递归方法输出节点中的数据,节点调用getNodeType()方法返回一个表示节点类型的常量(Node接口规定的常量值),因此我们可以通过判断节点的类型来输出和节点相关的数据,比如当节点类型的Element节点时,就输出节点的名字,当节点是Text节点时就输出节点中的数据等。例题6.2 p138,2009-10-20,15,6.3 Document节点,解析器的parse方法将整个被解析的XML文件封装成一个Document节点返回,应用程序可以从该节点的子孙节点中获取整个XML文件中数据的细节。 Document节点的两个直接子节点的类型分别是DocumentType类型

11、和Element类型,其中的DocumentType节点对应着XML文件所关联的DTD文件,通过进一步获取该节点子孙节点来分析DTDL文件中的数据;而其中的Element类型节点对应着XML文件的根节点,通过进一步获取该Element类型节点子孙节点来分析XML文件中的数据。Document节点常用方法见P139 .,2009-10-20,16,6.4 Element节点,Element节点是Document节点的最重要的子孙节点,因为被解析的XML文件的标记对应着这样类型的节点。表示Element节点的常量是Node.ELEMENT_NODE, 一个节点用short getNodeType(

12、)方法返回的值如果等于Node.ELEMENT_NODE,那么该节点就是Element节点。Element 节点常用方法见P140 .例题6.3 p141(解析器获得的Document节点及其子孙节点的示意图如图6.6 ),2009-10-20,17,6.5 Text节点,规范的XML文件的非空标记可以有子标记和文本内容。在DOM规范中,解析器使用Element节点封装标记,用Text节点封装标记的文本内容,即Element节点可以有Element子节点和Text节点。 表示Text节点的常量是Node.TEXT_NODE,一个节点调用 short getNodeType()方法返回的值如果等

13、于Node.TEXT_NODE,那么该节点就是Text节点。Text节点使用String getWholeText()方法获取节点中的文本(包括其中的空白字符)。例题6.4 p143, 例题6.5 p145,2009-10-20,18,6.6 Attr节点,在XML文件中,属性并不是标记的子标记,因此,在DOM规范中,Att节点也不是Element节点的子节点。如果想解析XML文件中标记的属性,必须让对应的Element节点调用调用 NamedNodeMap getAttributes()方法。该方法返回的NamedNodeMap对象由有节点组成,这些节点可以被转换为Attr节点。Attr节点

14、通过调用String getName()方法返回属性的名字、调用String getValue()方法返回属性的值。 例题6.6 p146,2009-10-20,19,6.7 DocumentType节点,DocumentType节点是Document节点的一个子节点。 DocumentType节点对应着XML文件所关联的DTD文件,通过进一步获取该节点子孙节点来分析DTD文件中的数据。Document节点调用getDoctype() 返回当前节点的DocumentType子节点。例题6.7 p148,2009-10-20,20,6.8 处理空白,标记之间的缩进区域是为了使得XML文件看起来更

15、美观很形成的,但解析器并不知道这一点,所以解析器仍然认为它们是有用的文本数据(由空白类字符组成,如:tnx0Bfr)。 如果想让DOM解析器忽略缩进空白,即这些缩进空白不在Document中形成Text节点,那么XML文件必须是有效的,而且所关联的DTD文件必须规定XML文件的标记不能有混合内容,同时DocumentBuilderFactory对象在给出DOM解析器之前,必须调用 setIgnoringElementContentWhitespace(boolean whitespace)进行设置,将参数whitespace的的取值为true。 例题6.8 p150,2009-10-20,21

16、,6.9 验证规范性和有效性,JAXP(Java API for XML Parsing)提供的解析器默认地检查XML文件是否是规范的,并不检查XML文件是否是有效的,也就是说,DOM解析器调用parse()方法时,如果XML文件是规范的,parse()方法就返回一个实现了Document接口的对象,否则将显示XML文件中不符合规范的错误信息。即使XML文件关联了一个DTD,解析器也并不检查XML文件是否是有效的,即不检查XML文件是否遵守该DTD规定的限制条件。如果想要检查一个XML文件是否有效,必须让DocumentBuilderFactory对象factory事先设置是否检查XML文件的

17、有效性.如:factory.setValidating(true);,2009-10-20,22,6.10 使用DOM生成XML文件,对于一个给定的XML文件,通过使用解析器可以在内存中建立和XML结构相对应的树形结构数据。JAXP也能让我们使用内存中的树形结构数据建立一个新的XML文件。,2009-10-20,23,6.10.1 Transformer对象,可以对Document节点进行修改,然后使用Transformer对象将一个Document节点变换为一个XML文件(Transformer类在javax.xml.transform包中),需要经过如下步骤:1.使用javax.xml.t

18、ransform包中的TransformerFactory类建立一个对象:TransformerFactory transFactory=TransformerFactory.newInstance();2.使用步骤1中得到的transFactory对象调用newTransformer()方法得到一个Transformer对象:Transformer transformer=transFactory.newTransformer();3.将被变换的Document对象封装到一个DOMSource对象中(DOMSource类在javax.xml.transform.dom包中):DOMSourc

19、e domSource=new DOMSource(document);4.将变换要得到XML文件对象封装到一个StreamResult对象中(StreamResult类在javax.xml.transform.stream包中):File file=new File(“newXML.xml“);FileOutputStream out=new FileOutputStream(file);StreamResult xmlResult=new StreamResult(out); 5.最后Transformer 对象transformer 调用transform方法实施变换transforme

20、r.transform(domSource,xmlResult);,2009-10-20,24,6.10.2 用于修改Document的常用方法,Node接口是Document的父接口,提供了许多用来修改、增加和删除节点的方法: Node appendChild(Node newChild)Node removeChild(Node oldChild) throws DOMException Node replaceChild(Node newChild, Node oldChild)Attr removeAttributeNode(Attr oldAttr)void setAttribute(String name, String value) Text replaceWholeText(String content)void appendData(String arg) void insertData(int offset, String arg)void deleteData(int offset,int count)void replaceData(int offset,int count, String arg),2009-10-20,25,6.10.3 用DOM建立XML文件,例题6.9 p153, 例题6.10 p156,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报