




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章 Java中的XML编程,9.1 使用DOM解析XML,解析器工厂类DocumentBuilderFactory DocumentBuilderFactory类是DOM中的解析器工厂类,开发这要使用DOM操作XML首先必须需要建立一个解析器工厂实例,以便利用这个工厂类实例来获得一个具体的解析器对象。 示例代码如下: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();,9.1 使用DOM解析XML,解析器类DocumentBuilder DocumentBuilder类是DOM中的解析器类,开发者可以使其从XML文档获取DOM文档实例。当获得一个解析器工厂类对象后,使用它的静态方法newDocumentBuilder()将可以获得一个DOM解析器对象,示例代码如下: DocumentBuilder db = dbf.newDocumentBuilder();,文档树模型Document,Document对象代表了一个XML文档的树模型。所有其它的Node,都以一定的顺序包含在Document对象之内,排列成一个树形的结构。 解析器类DocumentBuilder的parse()方法接受一个XML文档名作为输入参数,将返回一个Document实例 示例代码:Document doc = db.parse(“message.xml“);,此外还可以把要解析的XML文档转化为输入流,然后将输入流对象作为parse()方法的输入参数,以便DOM解析器解析它,示例代码如下: InputStream is=new FileInputStream(“message.xm“); Document doc=db.parse(is); 使用Document对象的getElementsByTagName()方法,可以得到一个NodeList对象,一个Node对象代表了一个XML文档中的一个标签元素,而NodeList对象所代表的是一个Node对象的列表。 NodeList nl = doc.getElementsByTagName(“message“);,主要的方法有: createAttribute(String):用给定的属性名创建一个Attr对象,并可在其后使用setAttributeNode方法来放置在某一个Element对象上面。 createElement(String):用给定的标签名创建一个Element对象,代表XML文档中的一个标签,然后就可以在这个Element对象上添加属性或进行其它的操作。 createTextNode(String):用给定的字符串创建一个Text对象,Text对象代表了标签或者属性中所包含的纯文本字符串。如果在一个标签内没有其它的标签,那么标签内的文本所代表的Text对象是这个Element对象的唯一子对象。 getElementsByTagName(String):返回一个NodeList对象,它包含了所有给定标签名字的标签。 getDocumentElement():返回一个代表这个DOM树的根节点的Element对象,也就是代表XML文档根元素的那个对象。,节点列表类NodeList,节点列表类NodeList就是代表了一个包含一个或者多个Node的列表。可以简单的把它看成一个Node的数组,可以通过下列方法来获得列表中的元素: GetLength():返回列表的长度。 Item(int):返回指定位置的Node对象。 可以使用NodeList对象的item()方法来得到列表中的每一个Node对象,节点类Node,Node对象代表了文档树中的一个抽象的节点。Node对象所包含的主要的方法有: appendChild(org.w3c.dom.Node):添加一个子节点,并放在所有子节点的最后,如果这个子节点已经存在,则先把它删掉再添加进去。 getFirstChild():如果节点存在子节点,则返回第一个子节点,getLastChild()方法返回最后一个子节点。 getNextSibling():返回在DOM树中这个节点的下一个兄弟节点,getPreviousSibling()方法返回其前一个兄弟节点。 getNodeName():根据节点的类型返回节点的名称。 getNodeType():返回节点的类型。 getNodeValue():返回节点的值。,节点类Node,hasChildNodes():判断是不是存在有子节点。 hasAttributes():判断这个节点是否存在有属性。 getOwnerDocument():返回节点所处的Document对象。 insertBefore(org.w3c.dom.Node new,org.w3c.dom.Node ref):在给定的一个子对象前再插入一个子对象。 removeChild(org.w3c.dom.Node):删除给定的子节点对象。 replaceChild(org.w3c.dom.Node new,org.w3c.dom.Node old):用一个新的Node对象代替给定的子节点对象。 要提取message标签内的内容,通常会使用Node对象的getNodeValue()方法:,元素类Element,Element对象所包含的主要的方法有: getElementsByTagName(String):返回一个NodeList对象,它包含了在这个标签中其下的子孙节点中具有给定标签名字的标签。 getTagName():返回一个代表这个标签名字的字符串。 getAttribute(String):返回标签中给定属性名称的属性的值。在这儿需要主要的是,应为XML文档中允许有实体属性出现,而这个方法对这些实体属性并不适用。这时候需要用到getAttributeNodes()方法来得到一个Attr对象来进行进一步的操作。 getAttributeNode(String):返回一个代表给定属性名称的Attr对象。,属性类Attr,Attr对象代表了某个标签中的属性。 Attr继承于Node,但是因为Attr实际上是包含在Element中的,它并不能被看作是Element的子对象,因而在DOM中Attr并不是DOM树的一部分 Attr其实是被看作包含它的Element对象的一部分,它并不作为DOM树中单独的一个节点出现。这一点在使用的时候要同其它的Node子对象相区别。,解析器工厂类DocumentBuilderFactory,解析器类DocumentBuilder,文档对象Document,元素Element,属性Attr,节点Node,节点集NodeList,9.2 使用SAX解析XML,SAX是事件驱动的,SAX解析的方式非常类似流媒体的分析处理方式,这种解析模式能够随着文档的读入过程立即开始解析,而不需要等待文档中所有的数据被读入结束后再开始解析。适合于内存较小的应用场合。除此之外,应用程序甚至不必解析整个文档,它可以在某个条件得到满足时停止解析后面的文档。 SAX解析XML文档的基本原理为:首先获得一个实现SAX接口的解析器,然后编写一个符合SAX标准的处理器类,并且把这个类注册到刚生成的解析器,然后开始解析XML文件,解析器会把XML文档作为一个流读出来,并将文件流转换成一个事件流,最后根据事件调用定义在解析器里的事件处理方法对流中的事件做出响应。,SAX的事件驱动模型,五种事件,startDocument:表明SAX解析器发现了文档的开始 public void startDocument() endDocument:表明SAX解析器已经发现了xml文档的结尾 public void endDocument() startElement:SAX解析器发现了xml文件中的一个元素的开始标签,同时返回该元素的名称以及元素属性的名称 public void startElement(String namespace,string localname,String qName,Attribute atts),元素的非限定名,元素的限定名,有命名空间前缀,元素所有属性,五种事件,endElement:表明SAX解析器发现了xml文档中一个元素的结束标签,返回元素的名称和相关的命名空间 public void endElement(String namespace,String localName,String qName) Character:表明SAX解析器发现了xml文档中的一个元素的文本信息,返回一个字符串数组、数组的偏移量和一个长度变量,通过这些访问到所发现的文本信息。 public void character(char ch,int start,int length),Java SAX的API,SAXParserFactory:一个根据系统属性生成parser实例的解析器工厂类。其功能与DOM中的DocumentBuilderFactory类相同。 SAXParser:一个定义了不同种类的parser()方法的接口。SAXParser是一个与SAX事件通讯的处理器,可以使用自定义的handler来处理事件。 SAXReader:SAXParser中包含了一个SAXReader,当要使用SAXReader的getXMLReader()方法的时候就需要配置它。 DefaultHandler:类DefaultHandler实现了ContentHandler、ErrorHandler、DTDHandler和EntityResolver接口,通过继承这个类,我们可以实现解析XML文档的所有任务。,Java SAX的API,ContentHandler:当遇到XML文档中的标签时,就将会调用这个接口中的startDocument、endDocument、startElement和 endElement 方法。当遇到XML文档中的元素内容时,将调用characters方法。 ErrorHandler:当遇到不同类型的错误的时候分别调用相应的错误方法,这些方法包括:error、fatalError和warning等。 DTDHandler:该接口所定义的方法只用在处理DTD信息的时候。 EntityResolver:该接口中的resolveEntity方法只在遇到URI标识数据的时候才调用。,9.3 使用JDOM解析XML,JDOM是一个开源项目,它基于树型结构,利用纯Java的技术对XML文档实现解析、生成、序列化以及多种操作。 JDOM 直接为Java编程服务。它利用更为强有力的Java语言的诸多特性(方法重载、集合概念以及映射),把SAX和DOM的功能有效地结合起来。 JDOM中的类主要包括SAXBuilder、DOMBuilder、Document、XMLOutputter、Element和Attribute等,JDOM的API,SAXBuilder类 JDOM中的SAXBuilder类会使用SAX来建立一个JDOM的解析树。它可以通过build()方法由指定的输入数据流建立一个文件,返回一个Document对象。 DOMBuilder类 JDOM中的DOMBuilder类会使用DOM来建立一个JDOM的解析树。它可以通过build()方法由指定的输入数据流建立一个文件,返回一个Document对象。 Document类 Document类的一个实例用来描述一个XML文档。这个文档类是轻量级的,它可以包括文档类型、处理指令对象、根元素和注释对象等内容。,JDOM的API,构造一个包含根元素的Document对象 Element root = new Element(“books”); Document doc = new Document(root); root.setText(“书”); XMLOutPutter类 将XML文档写入一个特定的OutputStream流中。其中output()方法用于将XML文档输出到指定的位置,既可以是标准的输出System.out,也可以是File对象或者OutputStream对象。 XMLOUTPutter outp = new XMLOUTPutter (); outp.output(doc,System.out);,JDOM的API,Element类 在JDOM中,XML元素就是Element类的实例。Element类有两种主要的操作,一个是浏览元素树,另一个是移动元素。 获得根元素 Element root = doc.getRootElement(); 获得根元素的所有子元素的一个列表 List allChildren = root.getChildren(); 通过名字获得指定的子元素列表 List namedChildren = root.getChildren(name); 根据指定名称得到第一个元素 Element child = root.getChild(name);,JDOM的API 2-2,List allChildren = root.getChildren(); /删除第四个元素 allChildren.remove(3); /删除所有名称是jack的子元素 allChildren.removeALL(root.getChildren(jack); /在集合末尾添加新元素 allChildren.add(new Element(tom); /在集合开头添
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 解除合同协议书去哪里拿
- 包车服务协议合同
- 商业借款协议合同
- 空调出租合同协议书简单
- 作品评选活动合同协议
- 变压器搬迁协议合同书
- 拆除居间合同协议书范本
- 合同款项代收协议
- 冬奥会普京合同协议
- 共有土地协议合同
- 供应链管理系统建设方案
- 瓶装液化气送气工培训
- 【MOOC】中医与辨证-暨南大学 中国大学慕课MOOC答案
- 零星维修工程 投标方案(技术方案)
- 风电制氢制甲醇一体化示范制氢制甲醇项目可行性研究报告写作模板-申批立项
- 2024年教科版(广州版)英语五年级上册期中模拟测试卷(无答案)
- 2024年人力资源行业变革:人工智能在招聘中的应用
- 2024-2030年中国玩偶行业发展前景预测及竞争力策略分析报告
- 上门按摩企业标准操作实务白皮书-爱尚往约企业标准开源手册 2024
- 吉利并购沃尔沃绩效分析
- DB11T 1028-2021 民用建筑节能门窗工程技术标准
评论
0/150
提交评论