第9章Java中的XML编程

上传人:沈*** 文档编号:244240566 上传时间:2024-10-03 格式:PPT 页数:25 大小:189.50KB
返回 下载 相关 举报
第9章Java中的XML编程_第1页
第1页 / 共25页
第9章Java中的XML编程_第2页
第2页 / 共25页
第9章Java中的XML编程_第3页
第3页 / 共25页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,第,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,S
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!