java解析XML——Pull解析
来源:互联网 发布:数据字典怎么用 编辑:程序博客网 时间:2024/06/06 01:34
除了可以使用SAX或DOM解析XML文件之外,在Android中可以使用Android内置的Pull解析器解析XML文件。 Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。如果用在javaEE需要把其jar文件放入类路径中,因为Android已经集成进了Pull解析器,所以无需添加任何jar文件。android系统本身使用到的各种xml文件,其内部也是采用Pull解析器进行解析的。 Pull解析器的运行方式与SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。跟SAX不同的是, Pull解析器产生的事件是一个数字,而非方法,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值
Pull XML解析器早已经被google集成到Android sdk当中,它是google官方推荐的解析器。如果我们要在Java桌面、J2ME等当中使用Pull方式生成xml文件和
解析xml文件,需要用到kxml2;KXML解析器是基于普通XML PULL解析器的一个小巧的解析器,官网是http://kxml.org/,普通XML PULL解析器的官网是http://xmlpull.org/
XmlPull和Sax类似,是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此Xmlpull和 Sax都比较节约内存资源,不会象Dom那样要把所有节点以对橡树的形式展现在内存中。 但Xmlpull比Sax更简明,而且不需要扫描完整个流。
具体示例:
(1)xml文件内容:在工程跟目录下建立xml/data1.xml文件,内容如下:
(2) 解析:
以上的代码在Java项目或Android项目中都可以使用。在Android中还提供了另一个类:XmlResourceParser,XmlResourceParser是XmlPullParser的子类,使用如下:(在Androiddemo中,xml文件存放在手机存储的根目录下:data1.xml)
demo传送门:
https://github.com/215836017/ParseXML_java
https://github.com/215836017/ParserXML_android
注:上面Java的demo中用到的xml文件是当前目录下的xml/data1.xml文件。result.xml是生成的文件。data2.xml, data3.xml是用来比较解析时间的。
Android的demo中用到xml文件是存放在手机根目录下的data1.xml文件。
Pull XML解析器早已经被google集成到Android sdk当中,它是google官方推荐的解析器。如果我们要在Java桌面、J2ME等当中使用Pull方式生成xml文件和
解析xml文件,需要用到kxml2;KXML解析器是基于普通XML PULL解析器的一个小巧的解析器,官网是http://kxml.org/,普通XML PULL解析器的官网是http://xmlpull.org/
XmlPull和Sax类似,是基于流(stream)操作文件,然后根据节点事件回调开发者编写的处理程序。因为是基于流的处理,因此Xmlpull和 Sax都比较节约内存资源,不会象Dom那样要把所有节点以对橡树的形式展现在内存中。 但Xmlpull比Sax更简明,而且不需要扫描完整个流。
具体示例:
(1)xml文件内容:在工程跟目录下建立xml/data1.xml文件,内容如下:
<students> <student> <name sex="man">小明</name> <nickName>明明</nickName> <age>20</age> <address>北京</address> </student> <student> <name sex="woman">小红</name> <nickName>红红</nickName> <age>20</age> <address>上海</address> </student> <student> <name sex="man">小亮</name> <nickName>亮亮</nickName> <age>30</age> <address>广州</address> </student> <student-0> <name sex="man">小亮-0</name> <nickName>亮亮-0</nickName> <age>200</age> <address>广州-0</address> </student-0></students>
(2) 解析:
private void parseXml() { long startTime = System.currentTimeMillis(); System.out.println("开始解析:" + startTime); Bean1 bean = null; // XmlPullParser是android自带的,Java中默认不支持,因此需要下载kxml2.jar包 XmlPullParserFactory factory; try { factory = XmlPullParserFactory.newInstance(); factory.setNamespaceAware(true); XmlPullParser parser = factory.newPullParser(); // 初始化xmlPull解析器 parser.setInput(new FileInputStream(xmlFile), "utf-8"); int type = parser.getEventType(); // 无限判断文件类型进行读取 while (type != XmlPullParser.END_DOCUMENT) { switch (type) { case XmlPullParser.START_TAG: if (parser.getName().equals("students")) { datas = new ArrayList<>(); } else if (parser.getName().equals("student")) { bean = new Bean1(); } else if (parser.getName().equals("name")) { bean.setSex(parser.getAttributeValue(null, "sex")); bean.setName(parser.nextText()); } else if (parser.getName().equals("address")) { bean.setAddress(parser.nextText()); }else if(parser.getName().equals("age")){ bean.setAge(parser.nextText()); }else if (parser.getName().equals("nickName")) { bean.setNickName(parser.nextText()); } break; case XmlPullParser.END_TAG: if (parser.getName().equals("student")) { datas.add(bean); } break; default: break; } type = parser.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } long finishTime = System.currentTimeMillis(); long time = finishTime - startTime; System.out.println("结束解析: " + finishTime + "\nPull解析耗时:" + time); for(Bean1 student : datas){ System.out.println(student.toString()); } }
以上的代码在Java项目或Android项目中都可以使用。在Android中还提供了另一个类:XmlResourceParser,XmlResourceParser是XmlPullParser的子类,使用如下:(在Androiddemo中,xml文件存放在手机存储的根目录下:data1.xml)
private void resPullParseXml() { try { Bean1 bean = null; // XmlResourceParser是XMPullParser的子类 XmlResourceParser xrp = getResources().getXml(R.xml.data1); while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) { // 如果遇到开始标签 switch (xrp.getEventType()) { case XmlResourceParser.START_TAG: // 获取该标签的标签名 String tagName = xrp.getName(); if (tagName.equals("students")) { // datas = new ArrayList<Bean1>(); } else if (tagName.equals("student")) { bean = new Bean1(); } else if (tagName.equals("name")) {// 根据属性名来获取属性值 bean.setSex(xrp.getAttributeValue(null, "sex")); bean.setName(xrp.nextText()); } else if (tagName.equals("nickName")) { bean.setNickName(xrp.nextText()); } else if (tagName.equals("age")) { bean.setAge(xrp.nextText()); } else if (tagName.equals("address")) { bean.setAddress(xrp.nextText()); } break; case XmlResourceParser.END_TAG: if (xrp.getName().equals("student")) { datas.add(bean); } break; } xrp.next(); } } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
demo传送门:
https://github.com/215836017/ParseXML_java
https://github.com/215836017/ParserXML_android
注:上面Java的demo中用到的xml文件是当前目录下的xml/data1.xml文件。result.xml是生成的文件。data2.xml, data3.xml是用来比较解析时间的。
Android的demo中用到xml文件是存放在手机根目录下的data1.xml文件。
阅读全文
0 0
- java解析XML——Pull解析
- Java-xml解析 -PULL
- java Pull解析XML
- Java 解析 XML 文件之 PULL 解析
- java解析xml之PULL解析
- XML解析Pull解析
- XML解析---PULL解析
- 解析XML——DOM、Pull、SAX
- Android解析xml——pull
- Android XML文档解析(三)——Pull解析
- Android XML解析学习—Pull方式(HttpURLConnection xml)
- xml解析之pull解析
- xml解析(使用pull解析)
- android Pull解析(XML解析)
- xml解析之pull解析
- Pull解析器解析XML
- Xml 解析之pull解析
- pull解析器解析xml
- java 实现冒泡排序
- 图片上下排列3px间隔的消除方法
- who are you-实验吧1
- Could not find goal 'create' in plugin org.apache.maven.p plugin:3.0.1 among available goals crawl
- STL(二十四)数值算法
- java解析XML——Pull解析
- dmesg命令
- 位段
- Python3:《机器学习实战》之k近邻算法(3)识别手写数字
- TCP通信的几种方式
- 爬虫实战之三--mysql安装
- 17. Letter Combinations of a Phone Number
- 64位ubuntu无法安装32位软件,或者是运行32位.run等文件,出现`no such file or directory`问题
- 十连测d1T3