使用XmlPull解析XML
来源:互联网 发布:淘宝查假冒伪劣处罚 编辑:程序博客网 时间:2024/05/18 03:33
package com.popo.xml;import java.io.IOException;import java.io.StringReader;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import java.util.Set;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;public class XmlPullTest {public static void main(String[] args) {LinkedList<Data> stack = null;Data parent = null;Data self = null;Data root = null;try {XmlPullParserFactory f = XmlPullParserFactory.newInstance();f.setNamespaceAware(true);XmlPullParser xmlPullParser = f.newPullParser();xmlPullParser.setInput(new StringReader(SAXTest.xml));StringBuilder tab = new StringBuilder();int eventType = xmlPullParser.getEventType();while (eventType != XmlPullParser.END_DOCUMENT) {if (eventType == XmlPullParser.START_DOCUMENT) {// 初始化 root linklistroot = new Data();// 初始话栈stack = new LinkedList<Data>();// 把root进栈stack.addFirst(root);} else if (eventType == XmlPullParser.START_TAG) {tab.append("\t");String s = tab + "<" + xmlPullParser.getName();// 创建自己self = new Data();self.name = xmlPullParser.getName();// 获取父对象这里应该 出栈后 在入栈 但是用 linkedList 直接获取栈顶数据 就不用 进行出入栈操作了parent = stack.peekFirst();// 自己进栈stack.addFirst(self);// 把自己添加到parent里面去addSelfInParent(self, parent, xmlPullParser.getName());// 填充属性int count = xmlPullParser.getAttributeCount();if (count > 0) {self.attr = new HashMap<String, String>();}for (int i = 0; i < count; i++) {s += " " + xmlPullParser.getAttributeName(i) + "="+ xmlPullParser.getAttributeValue(i);self.attr.put(xmlPullParser.getAttributeName(i), xmlPullParser.getAttributeValue(i));}} else if (eventType == XmlPullParser.END_TAG) {// 解析完后自己出栈stack.removeFirst();self=stack.getFirst();} else if (eventType == XmlPullParser.TEXT) {if(self!=null) self.data=xmlPullParser.getText();}try {eventType = xmlPullParser.next();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}stack = null;parent = null;self = null;} catch (XmlPullParserException e) {// TODO Auto-generated catch blocke.printStackTrace();}System.out.println(root);}/** * * @param self * @param parent * @param key */@SuppressWarnings("unchecked")private static void addSelfInParent(Data self, Data parent, String key) {// TODO Auto-generated method stubif (parent.son == null) {parent.son = new HashMap<String, ArrayList<Data>>();ArrayList<Data> d = new ArrayList<Data>();parent.son.put(key, d);d.add(self);} else {if (parent.son.containsKey(key)) {parent.son.get(key).add(self);} else {ArrayList<Data> d = new ArrayList<Data>();parent.son.put(key, d);d.add(self);}}}}
用到了 上一篇文章中的Data对象
XMLPull与 SAX 设计思想是一样的,因此这里也用到了栈
- 使用xmlpull解析xml
- 使用XmlPull解析XML
- 使用Xmlpull解析xml
- 轻松使用xmlpull解析xml
- 轻松使用xmlpull解析xml
- 轻松使用xmlpull解析xml
- Android--使用XMLPull解析xml
- android使用xmlpull方式解析xml示例
- Andriod 使用XmlPull解析XML文件
- xmlpull解析XML
- xml解析-xmlpull
- xmlpull解析xml
- xml请求,xmlpull解析
- android应用中使用xmlpull解析xml文档失败
- Java使用SAX,XmlPull两种方式解析XML
- 用xmlpull解析xml文件
- 使用xmlpull创建xml文件
- 轻松使用xmlpull创建xml
- 实例repeater 分页、表头不动、添加列序号(dataset实现)
- js通过Class Name获取一个对象的数组
- xen体系结构
- 【转载】Lua 脚本语法说明
- Linux驱动调试的Debugfs的使用简介
- 使用XmlPull解析XML
- 数据结构——树小结代码
- zoj 3631 Watashi's BG(搜索)
- mtk android lcm 打印log信息方法
- Sybase ASE v15.x中查询本月最后一天的日期的3种实现方法
- 虚拟设备和 Open Virtualization Format
- Combox 属性 dropdown 和droplist的区别
- 捕捉Ruby正则表达式用法精髓
- USB启动盘制作,WinPE、Puppy、Ubuntu