已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java高级程序设计第四章,Java处理XML,回顾,数组与其它容器的区别体现在三个方面:效率,类型识别以及可以持有基本类型的数据。java.util里面有一个Arrays类,它包括了一组可用于数组的static方法,这些方法都是一些实用工具。Java2的容器类要解决“怎样持有对象”,而它把这个问题分成两大类:Collection和Map。容器的选择和常用容器的使用及实现,本章目标,了解Java处理XML的几种解析工具了解DOMAPI使用DOM解析XML文件使用SAX解析XML文件使用JDOM解析XML文件使用dom4j解析XML文件,XML的概念,XML即可扩展的标记语言,可以定义语义标记(标签),是元标记语言。XML不像超文本标记语言HTML,HTML只能使用规定的标记,对于XML,用户可以定义自己需要的标记。XML(eXtensibleMarkupLanguage)和HTML(HyperTextMarkupLanguage)师出同门,都是从SGML(StandardGeneralizedMarkupLanguage)延伸而出的标记语言,XML解析,Java处理XML的相关工具,JAXPDOMJDOMSAXdom4j,JAXP,JAXP是JavaAPIforXMLProcessing的英文字头缩。用于XML文档处理的使用Java语言编写的编程接口。JAXP支持DOM、SAX、XSLT等标准。JAXP既可以和具体实现DOMAPI、SAXAPI的各种XML解析器联合工作,又可以和具体执行XSLT标准的XSLT处理器联合工作。JAXP不提供语法分析功能。,DOM,DOM,DocumentObjectModel,文档对象模型。DOM是html和xml文档的编程接口规范,和平台、语言是无关的。利用dom规范,能够实现dom文档和xml之间的相互转换,遍历、操作相应dom文档的内容。DOM规范的核心就是树模型。,JDOM,JDOM是Java和DOM的结合体。JDOM致力于建立一个完整的基于Java平台的、通过Java代码来访问、操作并输出XML数据。JDOM是用Java语言读、写、操作XML的新API函数。简单、高效、优化。,SAX,SAX,SimpleAPIForXML。非W3C官方所提供的标准,“民间”的事实标准。SAX在概念上与DOM完全不同。非文档驱动,是事件驱动的。事件驱动:一种基于回调机制的程序运行方法。SAX解析器装载XML文件时,它遍历XML文档并在其主机应用程序中产生事件(经由回调函数、指派函数或者任何可调用平台完成这一功能)表示这一过程。,dom4j,dom4j是一个Java的XMLAPI,类似于jdom,用来读写XML文件的。性能优异功能强大简单易用开放源代码。,使用DOM操作XML-基本原理,使用DOM操作XML-工作原理,使用DOM接口操作XML-Documen接口,使用DOM操作XML-Node接口,使用DOM操作XML-NodeList接口,使用DOM操作XML-Element接口,使用DOM操作XML-Attr接口,Attr对象继承Node接口,表示Element对象中的属性。但由于“属性”实际上不是一个子节点,DOM不会将它们看作文档树的一部分。DOM认为元素的属性是其特性,而不是一个来自于它们所关联的元素的独立的身份。,使用DOM操作XML-读取XML,建立一个解析器工厂。DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();,利用DocumentBuilder的parse()方法接受一个XML文档名作为输入参数,返回一个Document对象。Document对象代表了一个XML文档的树模型。Documentdoc=builder.parse(“books.xml);,以利用这个工厂来获得一个具体的解析器对象。DocumentBuilderbuilder=dbf.newDocumentBuilder();,使用DOM操作XML-读取XML,通过Node对象的getNodeValue()方法提取某个标签内的内容。node.getElementsByTagName(NAME).item(0).getFirstChild().getNodeValue(),使用Document对象的getElementsByTagName()方法,得到一个NodeList对象,它是XML文档中的标签元素列表,可以使用NodeList对象的item()方法来得到列表中的每一个Node对象。NodeListnl=doc.getElementsByTagName(book);For(inti=0;in1.getlength();i+)Elementnode=(Element)nl.item(i);,使用DOM操作XML-读取XML,publicstaticArrayListgetBookArrayList(Stringuri)ArrayListlist=newArrayList();tryDocumentBuilderFactoryDBfactory=DocumentBuilderFactory.newInstance();DocumentBuilderDBbuilder=DBfactory.newDocumentBuilder();Documentdoc=DBbuilder.parse(uri);NodeListnodeList=doc.getElementsByTagName(book);for(inti=0;inodeList.getLength();i+)Stringbooktitle=doc.getElementsByTagName(booktitle).item(i).getFirstChild().getNodeValue();Stringauthor=doc.getElementsByTagName(author).item(i).getFirstChild().getNodeValue();Stringprice=doc.getElementsByTagName(price).item(i).getFirstChild().getNodeValue();Bookbook=newBook();book.setBookTitle(booktitle);book.setAuthor(author);book.setPrice(price);list.add(book);catch(Exceptione)e.printStackTrace();returnlist;,使用DOM操作XML-创建XML,publicstaticvoidmain(Stringargs)throwsException/DOM工厂创建document对象DocumentBuilderFactorydbf=DocumentBuilderFactory.newInstance();DocumentBuilderdb=dbf.newDocumentBuilder();Documentdocument=db.newDocument();/在内存中组织DOM对象document.setXmlVersion(1.0);Elementroot=document.createElement(root);Attratr=document.createAttribute(id);atr.setValue(aa);root.setAttributeNode(atr);root.appendChild(document.createElement(书);document.appendChild(root);/创建Xml文件转换器TransformerFactorytranf=TransformerFactory.newInstance();Transformertrans=tranf.newTransformer();/给文件转换器设置字符编码trans.setOutputProperty(encoding,utf-8);/定义转换器输入对象DOMSourcesource=newDOMSource(document);/定义转换器输出对象Resulttarget=newStreamResult(test.xml);trans.transform(source,target);,用SAX操作XML基本原理,XML解析器,特定于应用程序的处理器,SAXAPI,XML文档,输出,XML处理器,输入,用SAX操作XML基本原理,SAX工作原理:顺序解析,事件驱动,程序,main(.),startDocument(.)startElement(.)characters(.)endElement()endDocument(),Sax解析器,用户,提供的,处理程序,XML,输入,事件,用SAX操作XML常用事件,用SAX操作XML读取XML,第一步:和DOM一样,需要建立一个解析器工厂SAXParserFactoryspf=SAXParserFactory.newInstance();第二步:创建一个解析器对象SAXParsersaxParser=spf.newSAXParser();第三步:将解析器和XML文档联系起来,开始解析saxParser.parse(newFile(filename),newsax();,用SAX操作XML读取XML,trySAXParserFactoryparserFactory=SAXParserFactory.newInstance();MySaxParser1MySaxParser1Instance=newMySaxParser1();SAXParserparser=parserFactory.newSAXParser();parser.parse(uri,MySaxParser1Instance);catch(IOExceptionexception)exception.printStackTrace();catch(SAXExceptionexception)exception.printStackTrace();catch(ParserConfigurationExceptionexception)exception.printStackTrace();catch(FactoryConfigurationErrorexception)exception.printStackTrace();,用SAX操作XML解析XML,publicvoidcharacters(charch,intstart,intlength)throwsSAXExceptionStringstrObj=newString(ch,start,length);if(!strObj.startsWith(n)System.out.println(值:+strObj);publicvoidendDocument()throwsSAXExceptionSystem.out.println(解析xml文档结束n);publicvoidendElement(Stringurl,StringlocalName,StringqName)throwsSAXExceptionSystem.out.println(qName+元素解析结束n);publicvoidstartDocument()throwsSAXExceptionSystem.out.println(解析xml文档开始:n);publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattributes)throwsSAXExceptionSystem.out.println(qName+元素解析开始);,SAX和DOM的比较,SAX,DOM,有限的标准功能,加载完整的XML文档,适合大型文档节省大量内存空间,事件驱动,易于修改文档,适用于小型文档多次操作XML数据,用JDOM操作XML简介,JDOM的全称是JavaDocumentObjectModel,和DOM类似,JDOM也使用对象树来表示XML文档,但是这些对象的工作方式对Java程序员更加的直观。JDOM使用SAX解析器来分析XML文档,构建JDOM树。可以在/上下载最新版本的JDOM,用JDOM操作XMLAPI简介,用JDOM操作XML读取XML,try/创建解析器对象SAXBuilderbuilder=newSAXBuilder();/解析XML文档,获取一个Document对象Documentdoc=builder.build(newFile(src/my/xml/book.xml);/得到根元素Elementroot=doc.getRootElement();/得到根元素所有子元素的集合ListallChildren=root.getChildren();for(inti=0;iallChildren.size();i+)Elementbook=(Element)allChildren.get(i);/得到一本书元素System.out.print(书名:+book.getChild(name).getText();System.out.println(t作者:+book.getChild(author).getText();catch(Exceptione)e.printStackTrace();,用dom4j操作XML简介,dom4j是一种用于解析XML文档的开放源代码的XML框架。在dom4j的网站上(),是这样描dom4j的“dom4j是一个简单的灵活的开放源代码的库支持XML、XPath和XSLT。Dom4jAPI使用了java集合框架并完全支持DOM、SAX和JAXP”。,用dom4j操作XML创建XML文档,Documentdoc=DocumentHelper.createDocument();ElementeltRoot=DocuementHelper.CreateElement(“students”);doc.setRootElement(eltRoot);ElementeltRoot=DocumentHelper.createElement(“student”);Documentdoc=DocumentHel
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年东营技师学院单招综合素质考试题库含答案详解【完整版】
- 2025年崆峒专修学院高职单招职业适应性测试考试题库带答案详解AB卷
- 2025年洛阳瀍河职业学院单招职业技能考试模拟试卷及参考答案详解(模拟题)
- 2026年黑龙江省鹤岗市高职单招职业技能考试模拟试卷附完整答案详解【考点梳理】
- 2027年陕西宝鸡渭滨职业学院单招职业技能考试题库附参考答案详解(满分必刷)
- 2025年汝河职业学院高职单招职业技能考试模拟试卷及完整答案详解(易错题)
- 2027年湖南幼儿师范高专单招职业技能考试模拟试卷含答案详解【黄金题型】
- 2027年平顶山外国语学院高职单招职业技能考试模拟试卷1套附答案详解
- 2026年洧水职业学院单招综合素质考试题库及完整答案详解【夺冠系列】
- 2026年广东省东莞市单招综合素质考试题库及参考答案详解【达标题】
- 2025太原五中高一英语分班考试真题含答案
- 2026年教师创新能力测试题及答案
- 危重症患者家属沟通
- 教学课件道德与法治部编版(2024版)七年级初一上册4.2让家更美好课件01
- 2024年可行性研究报告投资估算及财务分析全套计算表格(含附表-带只更改标红部分-操作简单)
- 电动汽车充电桩安装检修赛项考试题库500题(含答案)
- 2024年重庆沙坪坝区西部重庆科学城沙兴实业发展集团有限公司招聘笔试参考题库含答案解析
- 临床营养学(重点)
- 招商银行智慧营销体系规划方案(2022年-2023年)
- Weiss′s 功能性缺陷程度(父母问卷)
- 灰岩地区长大隧道机械化快速施工技术
评论
0/150
提交评论