《解析XML(精品).pptx》由会员分享,可在线阅读,更多相关《解析XML(精品).pptx(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 广东硅谷学院广东硅谷学院第一章第一章第一章第一章 理论理论理论理论解析解析XML2 课程地位课程地位SEC课程体系课程体系S1:302CTBHTMLSQL-BaseSTBProject1:ADO.Net+WinForms C/SJavaScriptSQL-AdvJava S2:372Project2:JavaWeb+SQL B/S.NET/C#-AdvJavaWeb-BaseASP.Net-AdvS3:408ASP.Net-BaseNTCProject3:Logic CC#/WinFormsPhotoShop-BasePhotoshop-AdvOracleData-Struct.Net-Th
2、ree-TierEnterprise-Project-Design(企业级项目开发实训企业级项目开发实训)PHPJavaWeb-AdvLinuxSSH.NET方向方向JAVA方向方向Linux3 就业技能就业技能掌握掌握JAVAWebJAVAWeb可重用组件开发动态页面技术可重用组件开发动态页面技术掌握掌握JAVAWebJAVAWeb应用框架开发用技术应用框架开发用技术掌握掌握WebWeb服务的基础开发技术服务的基础开发技术4 本门课程任务本门课程任务学习并掌握学习并掌握JavaWebJavaWeb高级编程技能。并运用这些技能完高级编程技能。并运用这些技能完成网上书店项目。成网上书店项目。5
3、预习检查预习检查常用的解析常用的解析XMLXML的的APIAPI有哪些有哪些?DOMJDOM(Java+DOM)DOM4J(Dom For(Four/4)Java)SAX(SimpleAPI For XML)使用使用DOMDOM解析技术解析解析技术解析XMLXML文档时,文档时,XMLXML文档中的元素、文档中的元素、属性、属性、CDATACDATA段可以用段可以用DOMDOM树结构中的什么来代表?树结构中的什么来代表?节点节点使用使用DOMDOM解析技术动态生成解析技术动态生成XMLXML文件时主要使用哪一个对文件时主要使用哪一个对象?象?TransformerTransformer对象对象
4、6 本章任务本章任务使用使用DOMDOM解析技术将给定的解析技术将给定的examGrade.xmlexamGrade.xml文档进行解析,并输出文档进行解析,并输出到控制台上。到控制台上。使用使用DOMDOM解析技术根据需要动态生成解析技术根据需要动态生成XMLXML文档。文档。使用使用DOM4JDOM4J解析技术将给定的解析技术将给定的examGrade.xmlexamGrade.xml文档进行解析,并输出文档进行解析,并输出到控制台上。到控制台上。66 67了解XML和JSP技术的结合掌握使用DOM解析XML文档掌握DOM动态生成XML文档的方法了解使用JDOM解析和生成XML文档了解使用
5、了解使用DOM4JDOM4J解析和生成解析和生成XMLXML文档文档 本章目标本章目标XMLHTML8 XML XML和和JSPJSP技术的结合技术的结合什么是XML?Extend Markup Language(可扩展的标记语言)。标记语言的发展史:HyperText Markup Language,超文本标记语言适应性差太庞大,过于臃肿数据与表现混杂在一起标记语言标记语言(markup language),用一系列约定好的标记来对电子文档进行标记,以实现对电子文档的语义、结构、及格式的定义。这些标记必须很容易的和内容区分,并且易于识别。SGMLGML9 XML XML和和JSPJSP技术的
6、结合技术的结合为什么要使用XML?开放性:XML技术根据标准规范,允许在任何平台上读取和处理数据简单性:XML文档是纯文本,可以自由地在两个不同系统之间交换数据自我描述性:XML可以明确地表示数据模型中各个部分的意义结构和内容分离:XML中数据的显示和数据本身时区分开的可扩展性:使用XML可以按照自己的需要定制语言。张三 2010 XML XML和和JSPJSP技术的结合技术的结合什么时候使用XML?XML的应用范围非常广泛,但主要用于2个方面:一、用于配置文件(JAVA框架、WEB服务器、应用软件等)二、交换数据(跨语言、跨平台、跨设备、跨数据库),可以将一篇XML看成一个小型的数据库11解
7、析解析XMLXML技术简介技术简介常用的解析XML技术:DOMJDOMDOM4JSAX基于树模型基于事件模型12解析解析XMLXML技术简介技术简介基于树模型和基于事件模型的各自优缺点:基于树模型核心是节点,并且理论上关于树的算法很完善,能够方便获得节点的信息,能够方便在节点之间进行导航。不管XML文件有多大,都必须一次性将其读取到内存,然后才能构建树结构。examGradeListadvanceMathexamineeNamegradeadvanceMathexamineeNamegrade基于事件模型核心是事件驱动,可以按需读取,不必一次性将整个XML文档读取到内存,所以解析数据的速度快。
8、使用SAX编码比较困难,很难同时访问统一文档中的多处不同数据。DOM4J是JDOM的一个分支,提供了更加易用的API和XPath的支持JDOM是JAVA语言特定的API,其中主要结构是类,所以编码方便。目前JDOM已经纳入JSR102规范13解析解析XMLXML技术简介技术简介基于树模型解析技术的发展:DOM完全遵循W3C的DOM规范,体系结构中主要是接口,编码较麻烦。14 DOM DOM解析解析XMLXML技术概述技术概述 DOM(Document Object Model,文档对象模型)是W3C制定的一套标准接口。它独立于语言和平台,提供了构成DOM的不同对象的定义没有提供特定的实现。使用
9、DOM的对象,开发人员可以对于XML文档进行读取、搜索、修改、添加、删除等操作。什么是DOM解析技术?15 DOM DOM解析解析XMLXML技术技术APIAPIDOM规范的核心是树结构模型树结构模型,这个树结构模型包含了XML文档的元素、属性和内容等。XMl文档中的每个元素、属性、CDATA段等都可以用DOM树结构中的节点节点来代表。接口说明NodeNodeDOMDOM中的基本数据类型,表示树中的一个节点中的基本数据类型,表示树中的一个节点Document Document 继承自继承自NodeNode的,表示整个文档的,表示整个文档Element Element 接口,继承自接口,继承自N
10、odeNode,表示一个元素节点,表示一个元素节点AttrAttr继承自继承自NodeNode的,表示一个属性节点的,表示一个属性节点TextText 继承自继承自CharacterDataCharacterData,表示文本节点,表示文本节点16 DOM DOM解析解析XMLXML技术技术APIAPIDocument接口:代表整个XML文档,所有其他的Node都已树形结构的方式有序的包含在其中。可以通过遍历这棵树来得到XML文档的内容。方法说明Attr Attr createAttribute(String createAttribute(String name)name)创建一个属性节点创
11、建一个属性节点(Attr(Attr对象对象),并可以在其后,并可以在其后使用使用setAttributeNodesetAttributeNode方法来放置某个方法来放置某个ElementElement对象中。对象中。Element getDocumentElementElement getDocumentElement()()返回文档的根元素返回文档的根元素NodeList NodeList getElementsByTagName getElementsByTagName(String name)(String name)返回一个返回一个NodeListNodeList对象对象17 DOM
12、DOM解析解析XMLXML技术技术APIAPINode接口:DOM结构中最为基本的对象,代表了文档树种的一个抽象的节点。在实际使用时很少使用Node这个对象,而是使用它的子类。方法说明Node appendChild(Node Node appendChild(Node childeNode)childeNode)为这个节点添加一个子节点,并放在最后,如为这个节点添加一个子节点,并放在最后,如果这个子节点已经存在则删除后再添加果这个子节点已经存在则删除后再添加Node getFirstChild()Node getFirstChild()如果节点存在子节点,则返回第一个子节点;如果节点存在子节
13、点,则返回第一个子节点;如果没有返回如果没有返回nullnull。Short getNodeType()Short getNodeType()返回节点类型返回节点类型String getNodeName()String getNodeName()返回节点名称返回节点名称String getNodeValue()String getNodeValue()继承自继承自CharacterDataCharacterData,表示文本节点,表示文本节点boolean hasChildNodesboolean hasChildNodes()()判断这个节点是否有子节点判断这个节点是否有子节点18 DOM
14、DOM解析解析XMLXML技术技术APIAPINodeList接口:提供了一个有序节点Node的集合。方法说明int getLength()int getLength()返回列表中的返回列表中的NodeNode的数目的数目Node item(int index)Node item(int index)返回指定位置的返回指定位置的NodeNode对象对象19 DOM DOM解析解析XMLXML技术技术APIAPIElement接口:Element代表的是XML文档中的标签元素,继承于Node。方法说明String getAtrribute String getAtrribute (String
15、name)(String name)返回节点中返回节点中namename参数指定的属性值。参数指定的属性值。Attr getAttributeNode Attr getAttributeNode(String name)(String name)获取由获取由namename指定的属性节点。指定的属性节点。void removeAttributevoid removeAttribute(String name)(String name)删除删除namename指定的属性。指定的属性。如何使用DOM技术解析XMl文档:一、一、通过DocumentBuilderFactory抽象类的静态方法newI
16、nstance()创建DOM解析器的工厂实例。二、通过DocumentBuilderFactory实例的方法newDocument()得到DOM解析器。三、把需要解析的XML文档转化为输入流,以便DOM解析器能够进行解析。四、解析XML文档的输入流,得到一个Document。五、通过Document得到XMl文档的根节点。六、DOM技术采用NodeList存放Node的所有子节点,所以我们可以使用循环的方式得到节点下的所有子节点。七、取得节点的属性值。String grade=exam.getAttributes().getNamedItem(“grade”).getNodeValue();S
17、ystem.out.println(grade);NodeList exams=root.getChildNodes();for(int i=0;i exams.getLength();i+)Node exam=exams.item(i);Element root=doc.getDocumentElement();20 DOM DOM解析解析XMLXML的步骤的步骤DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();DocumentBuilder builder=factory.newDocumentBuild
18、er();InputStream is=new FileInputStream(“src/examGrade.xml”);Document doc=builder.parse(is);21 DOM DOM解析解析XMLXML在使用DOM技术解析XMl文档,需要循环取得节点的子节点的内容时可以通过类型判断来进行读取,它的类型是Node.ELEMENT_NODE。子节点子节点for(Node node=exam.getFirstChild();node!=null;node=node.getNextSibling()if(node.getNodeType()=Node.ELEMENT_NODE)i
19、f(node.getNodeName().equals(examineeName)String stuName=node.getFirstChild().getNodeValue();System.out.print(stuName+t);if(node.getNodeName().equals(grade)String grade=node.getFirstChild().getNodeValue();System.out.println(grade+t);22使用DOM解析XML技术将给定的examGrade.xml文档进行解析,并将获取内容输出到控制台上。8分钟时间分钟时间 DOM DO
20、M解析解析XMLXML现场编程现场编程根节点根节点子节点子节点子节点子节点23 DOM DOM生成生成XMLXMLTransformerFactory transformerFactory=TransformerFactory.newInstance();Transformer transformer=transformerFactory.newTransformer();DOMSource domSource=new DOMSource(document);File file=new File(src/newXML.xml);FileOutputStream out=new FileOutp
21、utStream(file);StreamResult xmlResult=new StreamResult(out);transformer.transform(domSource,xmlResult);使用DOM技术动态生成XML文件:一、使用TransformerFactory类建立一个TransformerFactory对象。二、使用工厂实例transformerFactory创建Transformer对象。三、将根据需要进行变换内容的Document对象封装到DOMSource对象中。四、准备新文件输出流,将输出流放入StreamResult对象中。五、使用Transformer实例
22、的transform方法进行转换,将变换的内容映射到新的XML文档中,完成工作。24使用DOM解析技术生成新的XML(newXML.xml)文档。8分钟时间分钟时间 DOM DOM生成生成XMLXML现场编程现场编程根节点根节点根节点的属性根节点的属性子节点子节点25 小结小结 1 1DOMDOM技术解析技术解析XMLXML文档的步骤是什么?文档的步骤是什么?一、一、通过DocumentBuilderFactory抽象类的静态方法newInstance()创建DOM解析器的工厂实例。二、通过DocumentBuilderFactory实例的方法newDocument()得到DOM解析器。三、把
23、需要解析的XML文档转化为输入流,以便DOM解析器能够进行解析。四、解析XML文档的输入流,得到一个Document。五、通过Document得到XMl文档的根节点。六、DOM技术采用NodeList存放Node的所有子节点,所以我们可以使用循环的方式得到节点下的所有子节点。七、取得节点的属性值。DOMDOM技术生成技术生成XMLXML文档的步骤是什么?文档的步骤是什么?一、使用TransformerFactory类建立一个TransformerFactory对象。二、使用工厂实例transformerFactory创建Transformer对象。三、将根据需要进行变换内容的Document对
24、象封装到DOMSource对象中。四、准备新文件输出流,将输出流放入StreamResult对象中。五、使用Transformer实例的transform方法进行转换,将变换的内容映射到新的XML文档中,完成工作。26什么是JDOM?JDOM是一个开源项目,它基于树形结构,利用纯JAVA对XML文档实现解析、生成、序列化。使用JDOM的优点:JDOM的目的是成为Java特定文档模型,它简化与XML的交互 并且比使用DOM实现更快。JDOM提供了更简单的访问XML信息的基础方法。除了XML文档之外,JDOM还可以访问其他数据源。JDOM JDOM解析解析XMLXML技术概述技术概述27JDOM
25、API主要由6个包构成:JDOM JDOM解析解析XML APIXML API包说明org.jdomorg.jdom解析解析XMlXMl文档所用到的基础类文档所用到的基础类org.jdom.outputorg.jdom.output用于输出的类,以进行文档转化输出用于输出的类,以进行文档转化输出org.jdom.inputorg.jdom.input读取读取XMLXML文档的类文档的类org.jdom.adaptersorg.jdom.adapters 与与DOMDOM适配的适配的javajava类类org.jdom.transfororg.jdom.transform m将将JDOM XML
26、JDOM XML文档接口转换为其他文档接口转换为其他XMLXML文档接口的类文档接口的类org.jdom.filterorg.jdom.filter包含了包含了XMLXML文档的过滤器类文档的过滤器类28Document 类:JDOM JDOM解析解析XML APIXML API方法说明boolean hasRootElementboolean hasRootElement()()判断文档是否有根节点判断文档是否有根节点element getRootElementelement getRootElement()()返回文档的根节点返回文档的根节点29Element 类:JDOM JDOM解析解
27、析XML APIXML API方法说明attribute attribute getAttributegetAttribute(String name)(String name)根据指定的根据指定的namename获取属性获取属性List getChildren()List getChildren()以以ListList的方式返回该节点的所有子节点的方式返回该节点的所有子节点String getChildTextString getChildText(String name)(String name)返回指定返回指定namename的节点的文本内容的节点的文本内容String String g
28、etAttributeValuegetAttributeValue(String name)(String name)返回指定返回指定namename的属性的的文本内容的属性的的文本内容30如何使用JDOM解析XML文档:JDOM JDOM解析解析XMLXML的步骤的步骤SAXBuilder builder=new SAXBuilder();try Document readDoc=builder.build(src/examGrade.xml);catch(Exception e)e.printStackTrace();Element exams=readDoc.getRootElement
29、();List list=exams.getChildren(advanceMath);for(int i=0;i list.size();i+)Element exam=(Element)list.get(i);信息输出.一、实例化一个合适的解析器对象二、以包含XML数据的文件为参数构建一个文档对象document三、获得根元素,然后使用JDOM API提供的对与元素、属性等操作方法进行操作31如何使用JDOM生成XML文档:JDOM JDOM生成生成XMLXML的步骤的步骤Element root=new Element(examGradeList);Document doc=new Do
30、cument(root);.root.addContent(sourceName);Format format=Format.getCompactFormat();.XMLOutputter XMLout=new XMLOutputter(format);tryXMLout.output(doc,new FileOutputStream(src/jdomNewXml.xml);catch(Exception e)e.printStackTrace();一、创建文件前必须先声明根节点,每个XML文档有且只有一个根节点 二、利用根节点创建XML文档实例Document三、为根节点添加属性和属性值四
31、、设置XML文档输出格式五、调用XMLOutputter的output方法将doc文档内容输出到指定文件中代码演示代码演示32使用JDOM解析技术解析XML(newXML.xml)文档。小结小结 2 28分钟时间分钟时间33什么是DOM4J?DOM4J是JDOM的一种智能分支。它合并了许多超出基本XML文档表示的功能,包括集成的XPath支持、XML Schema支持以及用于大文档或流化文档的基于事件的处理。它还提供了构建文档表示的选项,它通过DOM4J API和标准DOM接口具有并行访问功能。DOM4J是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,
32、同时它也是一个开放源代码的软件。越来越多的Java软件都在使用DOM4J来读写XML,特别值得一提的是连Sun的JAXM也在用DOM4J.DOM4J DOM4J解析解析XMLXML概述概述XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。34DOM4J的使用方式类似于JDOM。DOM4J DOM4J解析解析XMLXML的步骤的步骤File f=new File(src/examGrade.xml);SAXRe
33、ader reader=new SAXReader();Document doc;try doc=reader.read(f);Element root=doc.getRootElement();Element foo;for(Iterator i=root.elementIterator(advanceMath);i.hasNext();)foo=(Element)i.next();System.out.print(姓名:+foo.elementText(examineeName);System.out.println(t 成绩:+foo.elementText(grade);一、实例化一个
34、合适的解析器对象二、使用解析器读取XML文档获得对象document三、获得根元素,然后遍历节点代码演示代码演示35如何使用JDOM生成XML文档:DOM4J DOM4J生成生成XMLXML的步骤的步骤Document doc=DocumentHelper.createDocument();Element root=doc.addElement(examGradeList);Element stuEle=root.addElement(advanceMath);stuEle.addElement(examineeName).addText(张三);stuEle.addElement(grade
35、).addText(89);OutputFormat format=OutputFormat.createCompactFormat();format.setIndentSize(4);format.setNewlines(true);XMLWriter out=new XMLWriter(new FileOutputStream(src/dom4jNewXML.xml),format);out.write(doc);一、使用DocumentHelper的createDocument方法获得document对象。二、向document对象中添加根节点。三、为根节点添加属性和属性值。四、设置XM
36、L文档输出格式。五、调用XMLWriter的write方法将doc文档内容输出到指定文件中。代码演示代码演示36 小结小结 3 3DOM4JDOM4J解析技术作为解析技术作为JDOMJDOM解析技术的延伸和扩展,在对解析技术的延伸和扩展,在对于于XMLXML解析以及生成解析以及生成XMLXML时,步骤都是类似的。时,步骤都是类似的。DOM4JDOM4J性能比性能比DOMDOM、JDOMJDOM好,连好,连SunSun的的JAXMJAXM也在用也在用DOM4JDOM4J。目前许多开源项目中大量采用。目前许多开源项目中大量采用DOM4JDOM4J,例如大名鼎鼎,例如大名鼎鼎的的HibernateH
37、ibernate也用也用DOM4JDOM4J来读取来读取XMLXML配置文件。配置文件。37DOM解析技术解析解析技术解析XML文档的步骤是什么?文档的步骤是什么?一、一、通过DocumentBuilderFactory抽象类的静态方法newInstance()创建DOM解析器的工厂实例。二、通过DocumentBuilderFactory实例的方法newDocument()得到DOM解析器。三、把需要解析的XML文档转化为输入流,以便DOM解析器能够进行解析。四、解析XML文档的输入流,得到一个Document。五、通过Document得到XMl文档的根节点。六、DOM技术采用NodeLis
38、t存放Node的所有子节点,所以我们可以使用循环的方式得到节点下的所有子节点。七、取得节点的属性值。本章总结38DOMDOM解析技术生成解析技术生成XMLXML文档的步骤是什么?文档的步骤是什么?一、使用TransformerFactory类建立一个TransformerFactory对象。二、使用工厂实例transformerFactory创建Transformer对象。三、将根据需要进行变换内容的Document对象封装到DOMSource对象中。四、准备新文件输出流,将输出流放入StreamResult对象中。五、使用Transformer实例的transform方法进行转换,将变换的内
39、容映射到新的XML文档中,完成工作。本章总结39JDOM主要由哪几个包组成?主要由哪几个包组成?本章总结包说明org.jdomorg.jdom解析解析XMlXMl文档所用到的基础类文档所用到的基础类org.jdom.outputorg.jdom.output用于输出的类,以进行文档转化输出用于输出的类,以进行文档转化输出org.jdom.inputorg.jdom.input读取读取XMLXML文档的类文档的类org.jdom.adaptersorg.jdom.adapters 与与DOMDOM适配的适配的javajava类类org.jdom.transfororg.jdom.transform m将将JDOM XMLJDOM XML文档接口转换为其他文档接口转换为其他XMLXML文档接口的类文档接口的类org.jdom.filterorg.jdom.filter包含了包含了XMLXML文档的过滤器类文档的过滤器类40作业作业必做题必做题编写一个编写一个JavaJava程序,使用程序,使用DOMDOM解析器解析指定的解析器解析指定的XMLXML文件,文件,将内容输出到控制台上,并计算并输出课程的平均成绩。将内容输出到控制台上,并计算并输出课程的平均成绩。提交方式提交方式上课之前以压缩包方式提交,命名格式:班级+姓名+课程名+章节名.rar提交时间提交时间下次上课之前
限制150内