XML基础课件.ppt_第1页
XML基础课件.ppt_第2页
XML基础课件.ppt_第3页
XML基础课件.ppt_第4页
XML基础课件.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

XML基础,Xml的数据传输,XML,XML即可扩展标记语言(ExtensibleMarkupLanguage),是一种平台无关的表示数据的方法。简单地说,使用XML创建的数据可以被任何应用程序在任何平台上读取。甚至可以通过手动编码来编辑和创建XML文档。其原因是,XML与HTML一样,都是建立在相同的基于标记技术基础之上。,XML(ExtensibleMarkupLanguage)是一种可扩展的置标语言。XML来源于SGML(标准通用置标语言),但XML是它的简化,但保留了其精华。W3C于1998年2月批准了XML的1.0版本。成为一个国际标准。置标指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。,XMl的特点,XML文档是一个自我描述的数据集合XML的优点自我描述性可移植性以树结构描述数据提供可用于数据库的功能XML的缺点数据存取慢缺少数据库的功能在生产环境中将失效,文档格式定义DTD,XML的优点在于它允许您定义自己的有意义的标记,因此您可以最大程度地定制文档。但XML就是XML(可扩展),而人就是人(疯狂的人),这可能很快就会无法控制。解决方案是DTD,它指定了XML文档的标记。简而言之,DTD指定:可以在文档中存在的元素、那些元素可以具有的属性、在元素内部元素的层次结构以及元素在整个文档中出现的顺序。目的:确保文档有效,DTD(DocumentTypeDefinition,文档格式定义)。对于想利用XML文件来交换信息的实体来说,他们之间必须有一个约定即编写XML文件可以用哪些标记,母元素中能够包括哪些子元素,各个元素出现的顺序,元素中的属性怎样定义等。这样他们在用XML交换数据时才能够畅通无阻,这种约定称为DTD。可以把DTD看作编写XML文件的模板。对于同行业之间的XML数据交换,有一个固定的DTD将会方便很多。比如说,如果网上的各大电子商场的XML网页都遵循同一个DTD时,那么我们就可以轻松地依据这个DTD编写一个应用程序,去网上将我们感兴趣的东西自动抓回来。,格式正确的XML文档是满足以下三个基本结构需求的文档:有一个包含所有其它元素的父(或根)元素每个开始标记都有结束标记所有元素都正确嵌套的,DTD的第一行定义了XML文档的父元素:person。person元素有两个子元素:firstname和lastname。第二和第三行包含了元素属性#PCDATA,它表明firstname和lastname元素可能包含经过语法分析的字符数据(在这种情况下是文本)。DTD文件的最后一行描述了一个空标记:nothing。从清单3中的DTD可以看出,任何阅读我们的XML文档的人(以及对它进行语法分析的语法分析器)都知道person元素仅包含两个文本元素:firstname和lastname。此外,DTD规定,在整个文档中,firstname元素必须在lastname元素之前出现。,JaneFung,DTD中的内容,虽然DTD不是必需的,但它们确实带来方便。DTD适合三个基本用途。它能:对标记编制文档加强标记参数内部的一致性使XML语法分析器能够确认文档如果不对XML文档进行DTD定义,文档就无法由XML语法解析器进行确认。,XML解析读取XML文档并将文档分解为可进行分析的几个元素的过程处理XML文档解析器检查XML文档的有效性和格式规范创建解析树并将其传递给呈现代理程序呈现代理程序将显示此解析树解析器将创建一系列对象,用于显示与XML文档关联的样式表,解析器,1.DOM2.SAX3.JDOM4.DOM4J,解析器概述,文档对象模型dom,基于树和节点的文档对象模型(DocumentObjectModule)称为DOM,DOM采用建立树形结构的方式访问。DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用navigationAPIs访问所需的树节点来完成任务。可以很容易的添加和修改树中的元素。然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。,1。W3C制定的一套跨平台和语言标准,表示文档的内容和模型2。用Level(级别)的形式代替版本。Level1定义了文档中内容的功能查找方法。Level2提供了对XML,HTML和CSS等内容模型的模块选项。Level3制定中,为特定类型提供更多的工具如XML的验证公交等3。基于对象的将XML文档表示为树4。在内存中解析和存储XML文档5。允许随机访问文档的不同部分6。DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历,树模型每个项目都表示一个节点每个终端项目都表示一个叶节点直接上级节点表示父节点任何上级节点都表示祖先节点从树的一个部分可以到达树的任何其他部分,文档对象模型采用的模式树模式,请看下列“department.xml”XML文档:约瑟夫joe玛丽mary,DOM中“department.xml”的结构如下:,DOM解析函数,得到文档模型的根元素Elementroot=doc.getDocumentElement();元素Element的函数:StringgetTagName()-得到标签的名字StringgetAttribute(“unit”)-得到元素的unit属性值节点Node的函数:NodeListgetChildNodes()-得到子节点的集合NodegetFirstChild()-得到第一个子节点NodegetLastChild()-得到最后一个子节点,DOM解析函数,节点Node的函数:NodegetNextSibling()-得到下一个兄弟节点NodegetPreviousSibling()-得到前一个兄弟结点NodegetParentNode()-得到父节点NamedNodeMapgetAttributes()-得到所有的属性集合StringgetNodeName()-得到当前节点的名字StringgetNodeValue()-得到当前节点的值NodeList的函数intgetLength()-得到集合长度Nodeitem(intindex)-得到集合中的一个元素,要将XML文档读入DOM,请执行下列步骤:获得一个新DocumentBuilderFactory实例使用DocumentBuilderFactory构建DocumentBuilder使用DocumentBuilder中的parse()方法解析给定的文件将已解析的文档存储在Document对象中使用getElementsByTagName()方法从文档获得元素,使用DOM解析XML文档,使用DOM解析XML文档,DOM文档是使用Transformer类写入输出结果采用两个参数,即DOMSource和StreamResultDOMSource对象以DOM树形式来保存源树。StreamResult对象保存转换结果将XML数据写入输出结果的步骤如下:创建文档对象创建TransformerFactory程序的一个实例使用TransformerFactory创建Transformer类的一个实例使用Transform方法将源树处理至输出结果中,写XML文档函数,DocumentBuilder的函数:Documentdoc=builder.newDocument();-新建一个模型Document的函数:ElementcreateElement(Stringname)建立一个元素TextcreateTextNode(Stringdata)-创建一个文本节点Node的函数:NodeappendChild(Nodechild)-添加一个子节点Element的函数:voidsetAttribute(Stringname,Stringvalue)-设置元素的一个属性和属性值,DOM解析演示,MyXMLReader.javaMyXMLWriter.java,2019/12/15,25,可编辑,DOM最适用的情形在结构上修改XML文档时在内存中与其他应用程序共享文档时DOM的缺点将整个文档存储在内存中方法命名惯例不符合Java编程惯例,SAX,基于事件的XML简单API(SimpleAPIforXML)称为SAX,SAX采用的事件模型。SAX解析器在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。SAX对内存的要求通常会比较低,因为它让开发人员自己来决定所要处理的tag。特别是当开发人员只需要处理文档中所包含的部分数据时,SAX这种扩展能力得到了更好的体现。但用SAX解析器的时候编码工作会比较困难,而且很难同时访问同一个文档中的多处不同数据。,1。SAX(SimpleAPIforXML)基于事件驱动,使用回调机制将重要事件通知给客户端应用程序2。SAX的结构简单SAX应用程序的组件包括:应用程序创建一个解析器和一个文档处理程序告诉解析器使用哪个文档处理程序告诉解析器处理文档解析器将重要事件通知给文档处理程序文档处理程序处理通知,简单SAX的组件,用于XML解析的JavaAPI可使用SAX的普通API作为javax.xml包实现易于安装且快速更具一致性使用Factory设计模式创建要解析的对象,SAXParser类中可用的方法如下:,SAXParserHandler类解释如何捕获和响应各个事件startDocument()和endDocument()事件是在文档的起始处和结束处被激发的startElement()和endElement()事件是在遇到起始标记和结束标记时被激发的characters()事件是在遇到字符数据时被激发的使用SAX解析XML文档的步骤如下:创建SAXParserFactory的实例创建SAXParser的实例创建SAXParserHandler类使用parse()方法解析XML文档,SAX解析演示,SaxXMLReader.java演示,SAX最适用的情形在需要解析大型文档时在只需一个信息子集时SAX的缺点不能对文档进行随机访问只读只遍历文档一次,JDOM,JDOM:JasonHunter和BrettMcLaughlin开发的项目,JDOM的设计目标就是在读和创建XML时简化DOM,取代DOM。微软的MSXML解析器:微软已经给我们提供了一个XML语法解析器,即一个叫做MSXML.DLL的动态链接库(C语言),jdom包的结构包括:org.jdom包含了所有的xml文档要素的java类org.jdom.adapters包含了与dom适配的java类org.jdom.filter包含了xml文档的过滤器类org.jdom.input包含了读取xml文档的类org.jdom.output包含了写入xml文档的类org.jdom.transform包含了将jdomxml文档接口转换为其他xml文档接口org.jdom.xpath包含了对xml文档xpath操作的类,DOM4J,DOM4J:一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。,DOM4J包的结构包括:AttributeAttribute定义了XML的属性BranchBranch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为CDATACDATA定义了XMLCDATA区域CharacterDataCharacterData是一个标识借口,标识基于字符的节点。如CDATA,Comment,Text.CommentComment定义了XML注释的行为Document定义了XML文档DocumentTypeDocumentType定义XMLDOCTYPE声明ElementElement定义XML元素ElementHandlerElementHandler定义了Element对象的处理器ElementPath被ElementHandler使用,用于取得当前正在处理的路径层次信息EntityEntity定义XMLentity,DOM4J包的结构包括:NodeNode为所有的dom4j中XML节点定义了多态行为NodeFilterNodeFilter定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)ProcessingInstructionProcessingInstruction定义XML处理指令.Text定义XML文本节点.VisitorVisitor用于实现Visitor模式.XPathXPath在分析一个字符串后会提供一个XPath表达式,读取并解析XML文档:读写XML文档主要依赖于org.dom4j.io包,其中提供DOMReader和SAXReader两类不同方式,而调用方式是一样的。这就是依靠接口的好处。/从文件读取XML,输入文件名,返回XML文档publicDocumentread(StringfileName)throwsMalformedURLException,DocumentExceptionSAXReaderreader=newSAXReader();Documentdocument=reader.read(newFile(fileName);returndocument;取得Root节点publicElementgetRootElement(Documentdoc)returndoc.getRootElement();,遍历XML树DOM4J提供至少3种遍历节点的方法:1)枚举(Iterator)/枚举所有子节点for(Iteratori=root.elementIterator();i.hasNext();)Elementelement=(Element)i.next();/dosomething/枚举名称为foo的节点for(Iteratori=root.elementIterator(foo);i.hasNext();)Elementfoo=(Element)i.next();/dosomething/枚举属性for(Iteratori=root.attributeIterator();i.hasNext();)Attributeattribute=(Attribute)i.next();/dosomething,遍历XML树2)递归递归也可以采用Iterator作为枚举手段,但文档中提供了另外的做法publicvoidtreeWalk()treeWalk(getRootElement();publicvoidtreeWalk(Elementelement)for(inti=0,size=element.nodeCount();isize;i+)Nodenode=element.node(i);if(nodeinstanceofElement)treeWalk(Element)node);else/dosomething.,遍历XML树3)Visitor模式了解设计模式的人都知道,Visitor是GOF设计模式之一。其主要原理就是两种类互相保有对方的引用,并且一种作为Visitor去访问许多Visitable。我们来看DOM4J中的Visitor模式(快速文档中没有提供)只需要自定一个类实现Visitor接口即可。publicclassMyVisitorextendsVisitorSupportpublicvoidvisit(Elementelement)System.out.println(element.getName();publicvoidvisit(Attributeattr)System.out.println(attr.getName();调用:root.accept(newMyVisitor()注意,这个Visitor是自动遍历所有子节点的。如果是root.accept(MyVisitor),将遍历子节点。我第一次用的时候,认为是需要自己遍历,便在递归中调用Visitor,结果可想而知。,4.创建XMLpublicDocumentcreateDocument()Documentdocument=DocumentHelper.createDocument();Elementroot=document.addElement(root);Elementauthor1=root.addElement(author).addAttribute(name,James).addAttribute(location,UK).addText(JamesStrachan);Elementauthor2=root.addElement(author).addAttribute(name,Bob).addAttribute(location,US).addText(BobMcWhirter);returndocument;,5.文件输出一个简单的输出方法是将一个Document或任何的Node通过write方法输出FileWriterout=newFileWriter(foo.xml);document.write(out);美化输出或缩减格式,可以用XMLWriter类publicvoidwrite(Documentdocument)throwsIOExceptionXMLWriterwriter=newXMLWriter(newFileWriter(output.xml);writer.write(document);writer.close();/美化格式OutputFormatformat=OutputFormat.createPrettyPrint();writer=newXMLWriter(System.out,format)

温馨提示

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

评论

0/150

提交评论