一、SAX解析
1、承继DefaultHandler类,重写startDocument、startElement、character、endElement、endDocument办法,startDocument在读取时调用,可写一些实例化列表等;startElement在读取每个标签时调用,经过判别前史标签需求是否为需求获取的值的头;characters用来读取标签中的值;endElement读取标签的完毕,用来保存characters获取的值;endDocument一般不做处理。
2、调用,用SAXParser或许XMLReader来解析
SAXParser解析
SAXHandlerParseService saxForHandler = new SAXHandlerParseService(); SAXParserFactory spf = SAXParserFactory.newInstance(); SAXParser saxParse = spf.newSAXParser(); saxParse.parse(input, saxForHandler); ListMapString, Object>> userList = saxForHandler.getUser(); |
XMLReader解析
SAXHandlerParseService saxForHandler = new SAXHandlerParseService();
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser saxParse = spf.newSAXParser();
// 为xmlReader设置内容处理器
XMLReader reader = saxParse.getXMLReader();
reader.setContentHandler(saxForHandler);
// 开端赋值
reader.parse(new InputSource(new StringReader(xml)));
List> userList = saxForHandler.getUser();
在解析时,一定要当心,不要疏忽空白的当地,Sax解析器会把它认为是一个TextNod
二、PULL解析
与SAX相似,相同有START_DOCUMENT、START_ELEMENT、CHARACTERS、END_ELEMENT、END_DOCUMENT
1、实例化XmlPullParser解析器,设置输入编码(setInput),取得事情类型(getEventType),用SAX相同的处理进行,next()办法往下持续读取
三、DOCUMENT解析
1、实例化DocumentBuilderFactory,代码如下:
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(input);
Element root = document.getDocumentElement();
2、跟xml传入的数据结构进行处理
3、回来需求的列表值即可
工程下载:ParseTest.rar
四、三者差异
DOM:
解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以运用 DOM 接口来操作这个树结构。
长处:整个文档树在内存中,便于操作;支撑删去、修正、重新排列等多种功用;
缺陷:将整个文档调入内存(包含无用的节点),浪费时间和空间;
运用场合:一旦解析了文档还需屡次拜访这些数据;硬件资源足够(内存、CPU)
SAX/PULL:
事情驱动。当解析器发现元素开端、元素完毕、文本、文档的开端或完毕等时,发送事情,程序员编写呼应这些事情的代码,保存数据。
长处:不必事前调入整个文档,占用资源少
缺陷:不是耐久的;事情往后,若没保存数据,那么数据就丢了;无状况性;从事情中只能得到文本,但不知该文本属于哪个元素;
运用场合:只需XML文档的少数内容,很少回头拜访;一次性读取;机器内存少;
留意:SAX 解析器不创立任何目标。