XML的pull解析

来源:互联网 发布:视频录制软件电脑版 编辑:程序博客网 时间:2024/04/30 07:53

在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附带的pull解析器解析XML文件。

 Pull解析器是一个开源的java项目,既可以用于android,也可以用于JavaEE。

原理:将XML内容读取到一个字符数组中,switch,不同的元素触发不同的事件。
解析XML:

为了方便获取,XML文件直接放在SRC目录下

写一个java bean用来存储数据,在业务类中编写解析方法。
调用业务方法进行解析

测试时获得InputStream 类型的XML:this.getClass().getClassLoader().getResourceAsStream("person.xml");

parser.next()可以进入下一个元素并触发相应事件

空白节点属于文本节点,不处理
parser.nextText()可获得下一个文本节点的文本值

public static List<Person>  getPersons(InputStream xml)throws Exception{ XmlPullParser parser=Xml.newPullParser(); List<Person> persons=null; Person person=null; parser.setInput(xml, "UTF-8"); int event=parser.getEventType(); while(event!=XmlPullParser.END_DOCUMENT){  switch(event){  case XmlPullParser.START_DOCUMENT:  persons=new ArrayList<Person>();  break;  case XmlPullParser.START_TAG:   if("person".equals(parser.getName())){    person=new Person();    Integer id=new Integer(parser.getAttributeValue(0));    person.setId(id);   }else if("name".equals(parser.getName())){    person.setName(parser.nextText());   }else if("age".equals(parser.getName())){    person.setAge(new Integer(parser.nextText()));   }   break;  case XmlPullParser.END_TAG:   if("person".equals(parser.getName())){//这一句,试验时忘了加    persons.add(person);    person=null;   }    break;    }  event=parser.next(); } return persons;}}

案例错误:

业务方法中case XmlPullParsr.END_TAG: 忘了判断"person".equals(parser.getName());

测试时没有在清单文件中添加测试环境。


原创粉丝点击