xcqIntrnet应用解决的方案xml解析_第1页
xcqIntrnet应用解决的方案xml解析_第2页
xcqIntrnet应用解决的方案xml解析_第3页
xcqIntrnet应用解决的方案xml解析_第4页
xcqIntrnet应用解决的方案xml解析_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、回顾qxml的概念及意义qxml的文档结构qdtd和schema两种文档验证方法qxml的显示和格式转化技术了解通信系统的基本组成第二章第二章xml的解析 internet应用解决方案qxml文档解析的概念qdom解析xml的方法qsax解析xml的方法目标xml 解析解析 :解析包括读取 xml 文档并确定其结构和内容。xml的解析分基于事件驱动的解析器( sax)和基于树的解析器( dom)。dom:(document object model) 文档对象模型,w3c标准;解析器分析文档并在内存里创建对文档内容树状的表达方式,以便调用程序可以从树的顶部开始遍历,按照从一个树单元到另一个单元

2、的引用,从而找到需要的信息。sax:(the simple api for xml)用解析器读取文档,当解析器发现标签时告知程序它发现的标签。xml解析的概念dom举例-xml 文件:dom解析dom结构dom解析dom的包结构org.w3c.dom.document:定义分析、创建dom文档的一系列方法,是操作dom的基础。org.w3c.dom.element:提供了获取,修改xml元素名字和属性的方法;org.w3c.dom.node:提供了处理节点和子节点的方法。org.w3c.dom.nodelist: 提供了获得节点个数和当前节点的方法,这样就可以迭代的访问各个节点。常用 dom

3、方法document.getdocumentelement():返回 dom 树的根。(该函数是 document 接口的一个方法,没有定义其他的 node 子类型。) node.getfirstchild() 和 node.getlastchild():返回给定 node 的第一个和最后一个孩子。 node.getnextsibling() 和 node.getprevioussibling():返回给定 node 的下一个和上一个兄弟。 element.getattribute(string attrname):对于给定的 element,返回名为 attrname 的属性的值。如果需要

4、id 属性的值,可以使用 element.getattribute(id)。如果该属性不存在,该方法返回一个空字符串 ()。 dom解析documentbuilderfactory.newdocumentbuilder().parse()/解析一个外部的xml文件,得到一个document对象的dom树 documentbuilderfactory.newinstance().newdocumentbuilder().newdocument() /初始化一棵dom树 document.getdocumentelement().appendchild() /为一个标签结点添加一个子结点 docu

5、ment.createtextnode() /生成一个字符串结点 node.getchildnodes() /取得某个结点的所有下一层子结点 node.removechild() /删除某个结点的子结点 document.getelementsbytagname() /查找所有指定名称的标签结点 document.getelementbyid()/查找指定名称的一个标签结点,如果有多个符合,则返回某一个,通常是第一个 element.getattribute() /取得一个标签的某个属性的的值 element.setattribute() /设置一个标签的某个属性的的值 element.rem

6、oveattribute() /删除一个标签的某个属性 transformerfactory.newinstance().newtransformer().transform() /将一棵dom树写入到外部xml文件 dom解析关键代码 documentbuilderfactory factory = documentbuilderfactory.newinstance(); string path = d:/internet 应用解决方案/材料/demo.xml ; file xmlfile = new file(path); documentbuilder builer = factory

7、.newdocumentbuilder();/创建一个解析器对象 doc = builer.parse(new file(path); /使解析器指向您的 xml 文档 dom解析sax解析sax vs dom:dom 在内存中建立 xml 文档树。如果文档非常大,dom 树可能需要很大的内存。 dom 树包括许多对象表示 xml 源文档的内容。如果只需要文档中的少量信息,创建所有这些对象是一种浪费。 dom 解析器必须在代码访问之前建立整个 dom 树。如果解析非常大的 xml 文档,在等待解析器完成之前会有明显的延迟。 sax解析sax解析解析xml的基本步骤的基本步骤 : 首先获得一个实

8、现了sax接口的解析器 写一个符合sax标准的处理器类,并且把这个类注册到刚做好的解析器 解析器会把xml文件作为一个流读出来,然后再把文件流转换成一个事件流,这个事件流中的内容包括“文档开始”、“文档结束”、“元素开始”、“元素结束” 根据事件调用注册到解析器里的处理器里面的相应的方法,在解析器进行xml文件解析的同时,应用程序可以调用解析器提供的方法,对解析器的行为进行控制或获取解析器的状态 。sax解析saxapi saxparserfactory:saxparserfactory对象用来按照系统属性中的定义创建一个分析器的实例。 parser:org.xml.sax.parser接口定

9、义了类似setdocumenthandler的方法来创建事件处理函数。另外,该接口中还定义parser(uri)方法来对xml文档进行实际的分析工作。 contenthandler:当分析器遇到xml文档中的标记时,就会激活该接口中的startdocument,enddocument,startelement以及endelement等方法。另外,characters方法以及processingistruction方法也是在contenthandler接口中实现的。当分析器遇到元素内部的文本内容时就会激活characters方法,当分析器遇到处理指令时就会激活processingistructi

10、on方法。 errorhandler:当分析器在分析过程中遇到不同的错误时,errorhandler接口中的error,fatalerror或者warning方法就会被激活。 dtdhandler:当处理dtd中的定义时,就会调用该接口的方法。 entityresolver:当分析器要识别由uri定义的数据时,就会调用该接口中的resolveentity方法。sax解析sax编程实例:/需要引入下面的包import org.xml.sax.helpers.defaulthandler; import javax.xml.parsers.*; import org.xml.sax.*; impo

11、rt org.xml.sax.helpers.*; import java.util.*; import java.io.*; sax解析public class saxcounter extends defaulthandler private hashtable tags; / 这个hashtable用来记录tag出现的次数/ 处理文档前的工作public void startdocument() throws saxexception tags = new hashtable();/ 初始化hashtable/ 对每一个开始元属进行处理public void startelement(s

12、tring namespaceuri, string localname,string rawname, attributes atts) throws saxexception string key = rawname;object value = tags.get(key);system.out.println(tag名称:+key);if (value = null) / 如果是新碰到的标签,这在hastable中添加一条记录tags.put(key, new integer(1); else / 如果以前碰到过,得到其计数值,并加1int count = (integer) value

13、).intvalue();count+;tags.put(key, new integer(count);sax解析/ 解析完成后的统计工作public void enddocument() throws saxexception enumeration e = tags.keys();while (e.hasmoreelements() string tag = (string) e.nextelement();int count = (integer) tags.get(tag).intvalue();system.out.println(tag occurs + count + time

14、s);sax解析/ 程序入口,用来完成解析工作static public void main(string args) string filename = src/soap1.xml;saxparserfactory spf = saxparserfactory.newinstance();saxparser saxparser = null;try / 创建一个解析器saxparser对象saxparser = spf.newsaxparser();/ 得到saxparser中封装的sax xmlreader catch (exception ex) system.err.println(e

15、x);system.exit(1);try / 使用指定的contenthandler,解析给xml文件,saxparser.parse(filename,new saxcounter();system.out.println(ok); catch (saxexception se) system.err.println(se.getmessage();system.exit(1); catch (ioexception ioe) system.out.println(ioe);system.exit(1); jdomjdom针对文档对象模型的复杂性,人们提出了另外一种解决方案,即 jdom。

16、它由 brett mclaughlin 和 jason 所创建,使用 80-20 法则为最常用的 80% 的 xml 处理功能提供一种简单的 api。jdom 并没有尝试替代 dom,目前还只能用于 java 语言。jdomq特点:qjdom是java平台专用的 q没有层次性 jdomjdom编程创建一个 document :element carelement = new element(car);document mydocument = new document(carelement); 添加一个 attribute carelement.addattribute(new attribu

17、te(vin, 123fhg5869705iop90); 元素和子元素element make = new element(make);make.addcontent(toyota);carelement.addcontent(make); 用简洁形式添加元素 carelement.addcontent(new element(make).addcontent(toyota); jdom 添加其余的元素 carelement.addcontent(new element(model).addcontent(celica);carelement.addcontent(new element(ye

18、ar).addcontent(1997);carelement.addcontent(new element(color).addcontent(green);carelement.addcontent(new element(license) .addcontent(1abc234).addattribute(state, ca); 添加一条注释 carelement.addcontent(new comment(description of a car); 访问子元素 element yearelement = carelement.getchild(year); 除去子元素 boolean removed = carelement.removechild(year); jdom 将jdom转化为xml文本try xmloutputter outputter = new xmloutputter( , true); o

温馨提示

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

评论

0/150

提交评论