pull解析器是Android系统中推荐使用对xml进行解析的一种方法。Pull解析器是一个开源的Java项目,
也可以用于javaEE项目中,但是必须加入架包,而在android开发中就不需要,因为SDK已经集成了。
要想清晰的对xml进行解析,必须得对xml结构有所了解,如下:
<?xml version = "1.0" encoding="UTF-8" ?> <!-- START_DOCUMENT --> <logs><!-- START_TAG --> <log id="1"><!-- START_TAG --> <name><!-- START_TAG --> dblog </name><!-- END_TAG --> <time>sss</time> </log><!-- END_TAG --> <log id="2"> <name>filelog</name> <time>sss</time> </log> </logs><!-- END_TAG --> <!-- END_DOCUMENT -->
其中START_DOCUMENT是xml开始标志位,END_DOCUMENT是xml的结束标志位,在解析操作的
过程中,都是在其两者之间进行一系列的处理的。而START_TAG跟END_TAG是一对标签的标志。
解析xml的步骤:
1.获取pull解析器。Xml.newPullParser();
2.设置要解析的对象。parser.setInput(in, "UTF-8") 设置输入流以及编码
3.parser.next() 获取下一个解析事件,得到一个事件代码,那么这里所说的事件就是指在上面所写的xml
中的标志位。其实在pull解析器就类似于游标,利用标识符则可以实时的知道该xml被解析到那个位置。
那么就以上xml写出如下解析方法:
public List<LogEntity>getXmlFileObject(InputStream xml) throws Exception{ List<LogEntity> logs = null; LogEntity log = null; XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(xml, "UTF-8"); int event = pullParser.getEventType(); while (event != XmlPullParser.END_DOCUMENT) { switch(event){ case XmlPullParser.START_DOCUMENT: logs = new ArrayList<LogEntity>(); break; case XmlPullParser.START_TAG: if ("log".equals(pullParser.getName())) { log = new LogEntity(); log.setId(Integer.parseInt(pullParser.getAttributeValue(0))); } if ("name".equals(pullParser.getName())) { log.setName(pullParser.nextText()); } if ("time".equals(pullParser.getName())) { log.setTime(pullParser.nextText()); } break; case XmlPullParser.END_TAG: if ("log".equals(pullParser.getName())) { logs.add(log); } break; } event = pullParser.next(); } return logs; }