1、xml文件
<?xml version="1.0" encoding="utf-8"?> <persons> <person id="23"> <name>liming</name> <age>30</age> </person> <person id="20"> <name>lixiangmei</name> <age>25</age> </person> </persons>
2、实体类
package com.example.pullparsexml; public class person { private integer id; private string name; private short age; public person(){} public person(integer id, string name, short age) { this.id = id; this.name = name; this.age = age; } public integer getid() { return id; } public void setid(integer id) { this.id = id; } public string getname() { return name; } public void setname(string name) { this.name = name; } public short getage() { return age; } public void setage(short age) { this.age = age; } @override public string tostring() { return "person [age=" + age + ", id=" + id + ", name=" + name + "]"; } }
3、代码实现
package com.example.pullparsexml; import java.io.inputstream; import java.io.writer; import java.util.arraylist; import java.util.list; import org.xmlpull.v1.xmlpullparser; import org.xmlpull.v1.xmlserializer; import android.util.xml; public class pullparsexml { public static void save(list<person> persons, writer writer) throws throwable { xmlserializer serializer = xml.newserializer(); serializer.setoutput(writer); serializer.startdocument("utf-8", true); serializer.starttag(null, "persons"); for (person person : persons) { serializer.starttag(null, "person"); serializer.attribute(null, "id", person.getid().tostring()); serializer.starttag(null, "name"); serializer.text(person.getname()); serializer.endtag(null, "name"); serializer.starttag(null, "age"); serializer.text(person.getage().tostring()); serializer.endtag(null, "age"); serializer.endtag(null, "person"); } serializer.endtag(null, "persons"); serializer.enddocument(); writer.flush(); writer.close(); } public static list<person> getpersons(inputstream instream) throws throwable { list<person> persons = null; person person = null; xmlpullparser parser = xml.newpullparser(); parser.setinput(instream, "utf-8"); int eventtype = parser.geteventtype();// 产生第一个事件 while (eventtype != xmlpullparser.end_document) {// 只要不是文档结束事件 switch (eventtype) { case xmlpullparser.start_document: persons = new arraylist<person>(); break; case xmlpullparser.start_tag: string name = parser.getname();// 获取解析器当前指向的元素的名称 if ("person".equals(name)) { person = new person(); person.setid(new integer(parser.getattributevalue(0))); } if (person != null) { if ("name".equals(name)) { person.setname(parser.nexttext());// 获取解析器当前指向元素的下一个文本节点的值 } if ("age".equals(name)) { person.setage(new short(parser.nexttext())); } } break; case xmlpullparser.end_tag: if ("person".equals(parser.getname())) { persons.add(person); person = null; } break; } eventtype = parser.next(); } return persons; } }
以上就是具体分析pull方式解析xml的示例代码的详细内容。
