XML实用教程 教学课件 PPT 作者 耿祥义 张跃平 XML实用教程第6章

上传人:E**** 文档编号:89365079 上传时间:2019-05-24 格式:PPT 页数:22 大小:225KB
返回 下载 相关 举报
XML实用教程 教学课件 PPT 作者 耿祥义 张跃平 XML实用教程第6章_第1页
第1页 / 共22页
XML实用教程 教学课件 PPT 作者 耿祥义 张跃平 XML实用教程第6章_第2页
第2页 / 共22页
XML实用教程 教学课件 PPT 作者 耿祥义 张跃平 XML实用教程第6章_第3页
第3页 / 共22页
XML实用教程 教学课件 PPT 作者 耿祥义 张跃平 XML实用教程第6章_第4页
第4页 / 共22页
XML实用教程 教学课件 PPT 作者 耿祥义 张跃平 XML实用教程第6章_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《XML实用教程 教学课件 PPT 作者 耿祥义 张跃平 XML实用教程第6章》由会员分享,可在线阅读,更多相关《XML实用教程 教学课件 PPT 作者 耿祥义 张跃平 XML实用教程第6章(22页珍藏版)》请在金锄头文库上搜索。

1、2019/5/24,1,XML实用教程 第6章,配合例子源代码一起使用,Power point 制作:耿祥义 张跃平,基于DOM的解析器,2019/5/24,2,本章主要内容 初识DOM解析器 节点类型 Document节点 Element节点 Text节点 CDATASection节点 Attr节点 DocumentType节点 处理空白 使用DOM生成XML文件 难点 使用DOM生成XML文件,第6章 导读,2019/5/24,3,概述,XML解析器是XML和应用程序之间的一个软件组织,为应用程序从XML文件中解析出所需要的数据。 有两种类型的解析器:基于DOM的解析器和基于事件的解析器,

2、本章讲述基于DOM的解析器,下一章讲述基于事件的解析器(SAX)。,2019/5/24,4,6.1 初识DOM解析器,DOM(Document Object Model,文档对象模型)是W3C制定的一套规范标准,各种语言可以按着DOM规范给出解析XML文件的解析器。Sun公司发布的JDK1.4的后续版本中提供了解析XML文件的API(Java API for XML Parsing,JAXP)。,2019/5/24,5,6.1.1 创建DOM解析器的步骤_1,在JAXP(Java API for XML Parsing,JAXP)中,DOM解析器是DocumentBuilder类的一个实例,该

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

4、Parser(称做DOM解析器),例如: DocumentBuilder domParser=factory.newDocumentBuilder(); 3.domParser对象调用public Document parse(File f)方法解析参数f指定的XML文件,该方法返回的对象是实现了Document接口的一个实例(Document接口在org.w3c.dom包中),例如: Document document=domParser.parse(new File(“student.xml“) ;,2019/5/24,6,6.1.1 创建DOM解析器的步骤_2,DOM解析器在内存中建立和

5、XML文件相对应的树形结构数据。 应用程序只要分析内存中的树形结构数据,就可以获得XML文件中的各种数据了。,2019/5/24,7,6.1.2 Doucument对象的结构,在步骤3中,DOM解析器负责在内存中建立Document对象,即调用parse方法返回一个实现Document接口的对象,简称Document对象。也称Document对象为Document节点。应用程序可以从Document节点的子孙节点中获取整个XML文件中数据的细节。 Document节点是“树”的根节点,该“树”由实现了Node接口的类的实例所组成,XML文件中的标记都和Document节点的某个Node子节点相

6、对应。 例题6-1 p117,2019/5/24,8,6.1.2 example6_1.xml文件对应的Document节点,2019/5/24,9,6.2.1 Node接口,6.2 节点的类型,Doucumen接口也是Node接口的子接口,也就是说,parse方法将整个被解析的XML文件封装成一个节点返回(XML文件和内存中的Document节点相对应),并且该节点和它的子节点组成树形结构数据。因此,应用程序可以从Document节点的子孙节点中获取整个XML文件中数据的细节。,2019/5/24,10,6.2.2 Node 接口的常用方法,short getNodeType() 该方法返回

7、一个表示节点类型的常量(Node接口规定的常量值),例如,对于Element节点,getNodeType()方法返回的值为 Node.ELEMENT_NODE NodeList getChildNodes() 返回一个由当前节点的所有子节点组成的NodeList对象。 Node getFirstChild() 返回当前节点的第一个子节点。 Node getLastChild() 返回当前节点的最后一个子节点。 NodeList getTextContent() 返回当前节点及所有子孙节点中的文本内容。,2019/5/24,11,6.2.3 节点的子孙关系,为了解析规范的XML文件,DOM规范规

8、定了各种类型节点之间可以形成的子孙关系,比如,Document节点有且仅有一个Element节点,也可以有一个DocumentType节点(规范的XML文件有且仅有一个根标记,也可以有一个与其关联的DTD文件),Element节点可以有Element子节点和Text子节点(规范的XML文件中的标记可以有子标记和文本)。,2019/5/24,12,6.2.4使用递归方法输出节点中的数据,节点调用getNodeType()方法返回一个表示节点类型的常量(Node接口规定的常量值),因此我们可以通过判断节点的类型来输出和节点相关的数据,比如当节点类型的Element节点时,就输出节点的名字,当节点是

9、Text节点时就输出节点中的数据等。 例题6-2 p120,2019/5/24,13,6.3 Document节点,解析器的parse方法将整个被解析的XML文件封装成一个Document节点返回,应用程序可以从该节点的子孙节点中获取整个XML文件中数据的细节。 Document节点的两个直接子节点的类型分别是DocumentType类型和Element类型,其中的DocumentType节点对应着XML文件所关联的DTD文件,通过进一步获取该节点子孙节点来分析DTDL文件中的数据;而其中的Element类型节点对应着XML文件的根节点,通过进一步获取该Element类型节点子孙节点来分析XM

10、L文件中的数据。,2019/5/24,14,6.4 Element节点,Element节点是Document节点的最重要的子孙节点,因为被解析的XML文件的标记对应着这样类型的节点。表示Element节点的常量是Node.ELEMENT_NODE,一个节点用 short getNodeType()方法返回的值如果等于Node.ELEMENT_NODE,那么该节点就是Element节点。 Element节点经常使用下列方法获取和该节点相关的信 String getTagName() String getAttribute(String name) NodeList getElementsByTa

11、gName(String name) NodeList getElementsByTagNameNS(String namespaceURI,String localName) 。 boolean hasAttribute(String name) boolean hasAttributeNS(String namespaceURI, String localName) 例题6-3 p122,2019/5/24,15,6.5 Text节点,规范的XML文件的非空标记可以有子标记和文本内容。在DOM规范中,解析器使用Element节点封装标记,用Text节点封装标记的文本内容,即Element节

12、点可以有Element子节点和Text节点。 表示Text节点的常量是Node.TEXT_NODE,一个节点调用 short getNodeType()方法返回的值如果等于Node.TEXT_NODE,那么该节点就是Text节点。 Text节点使用String getWholeText()方法获取节点中的文本(包括其中的空白字符)。 例题6-4 p124, 例题6-5 p125,2019/5/24,16,6.6 Attr节点,在XML文件中,属性并不是标记的子标记,因此,在DOM规范中,Att节点也不是Element节点的子节点。如果想解析XML文件中标记的属性,必须让对应的Element节点

13、调用调用 NamedNodeMap getAttributes()方法。 该方法返回的NamedNodeMap对象由有节点组成,这些节点可以被转换为Attr节点。 Attr节点通过调用String getName()方法返回属性的名字、调用String getValue()方法返回属性的值。 例题6-6 p127,2019/5/24,17,6.7 DocumentType节点,DocumentType节点是Document节点的一个子节点。 DocumentType节点对应着XML文件所关联的DTD文件,通过进一步获取该节点子孙节点来分析DTD文件中的数据。Document节点调用getDoc

14、type() 返回当前节点的DocumentType子节点。 例题6-7 p128,2019/5/24,18,6.8 处理空白,标记之间的缩进区域是为了使得XML文件看起来更美观很形成的,但解析器并不知道这一点,所以解析器仍然认为它们是有用的文本数据(由空白类字符组成,如:tnx0Bfr)。 如果想让DOM解析器忽略缩进空白,即这些缩进空白不在Document中形成Text节点,那么XML文件必须是有效的,而且所关联的DTD文件必须规定XML文件的标记不能有混合内容,同时DocumentBuilderFactory对象在给出DOM解析器之前,必须调用 setIgnoringElementCon

15、tentWhitespace(boolean whitespace)进行设置,将参数whitespace的的取值为true。 例题6-8 p130,2019/5/24,19,6.9 验证规范性和有效性,JAXP(Java API for XML Parsing)提供的解析器默认地检查XML文件是否是规范的,并不检查XML文件是否是有效的,也就是说,DOM解析器调用parse()方法时,如果XML文件是规范的,parse()方法就返回一个实现了Document接口的对象,否则将显示XML文件中不符合规范的错误信息。 即使XML文件关联了一个DTD,解析器也并不检查XML文件是否是有效的,即不检查

16、XML文件是否遵守该DTD规定的限制条件。如果想要检查一个XML文件是否有效,必须让DocumentBuilderFactory对象factory事先设置是否检查XML文件的有效性.如: factory.setValidating(true);,2019/5/24,20,6.10.1 Transformer对象,6.10 使用DOM生成XML文件,我们可以对Document节点进行修改,然后使用Transformer对象将一个Document节点变换为一个XML文件(Transformer类在javax.xml.transform包中),需要经过如下步骤: 1.使用javax.xml.transform包中的TransformerFactory类建立一个对象: TransformerFactory transFactory=TransformerFactory.newInstance(); 2.使用步骤1中得到的transFactory对象调用n

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号