重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Android内部采用Pull解析器对XML进行解析。
成都创新互联公司10多年企业网站设计服务;为您提供网站建设,网站制作,网页设计及高端网站定制服务,企业网站设计及推广,对户外休闲椅等多个领域拥有多年的网站制作经验的网站建设公司。
Pull解析器解析原理:
读取XML数据到字符数组中;
开始解析——挨个字符读取XML文件,判断是否符合XMl语法,如符合,则会触发对应的事件。
下面通过一个例子来说明。
比如要解析如下XML文件
gaohao 25 gaofeng 31
在domain层新建Person类,存放从XML解析出来的数据
public class Person { private Integer id; private String name; private Integer 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 Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
在业务层新建PersonService类,解析XML文件
public class PersonService { public static ListgetPersons(InputStream xml) throws Exception{ List persons = null; Person person = null; //使用Pull解析XML文件 //XmlPullParser pullParser = XmlPullParserFactory.newInstance().newPullParser();//得到Pull解析器 XmlPullParser pullParser =Xml.newPullParser();//也可以用该方法创建解析器 pullParser.setInput(xml, "UTF-8");//设置Pull解析器要解析的数据 //产生事件 int event = pullParser.getEventType(); //对事件进行判断 while (event != XmlPullParser.END_DOCUMENT) { switch (event) { case XmlPullParser.START_DOCUMENT://文档开始 persons = new ArrayList ();//存放解析数据数组的初始化 break; case XmlPullParser.START_TAG: if("person".equals(pullParser.getName())){ int id = new Integer(pullParser.getAttributeValue(0)); person = new Person(); person.setId(id); } if("name".equals(pullParser.getName())){ String name = pullParser.nextText();//得到后面的文本 person.setName(name); } if("age".equals(pullParser.getName())){ int age = new Integer(pullParser.nextText());//得到后面的文本 person.setAge(age); } break; case XmlPullParser.END_TAG: if ("person".equals(pullParser.getName())) { persons.add(person); person = null; } break; } //解析完第一个字符,会停止解析,要让其继续,需要调用如下方法 event = pullParser.next();//进入到后面的节点,触发case XmlPullParser.START_TAG事件,利用循环解析 } return persons; } }
通过以上步骤即可将XML文件中的数据解析出来,通过单元测试显示解析出来的数据
在AndroidManifest.xml文件中引入单元测试环境
新建一个单元测试方法
public class PersonServiceTest extends AndroidTestCase { private static final String TAG = "PersonServiceTest"; public void testPersons() throws Exception{ InputStream xml = this.getClass().getClassLoader().getResourceAsStream("person.xml"); Listpersons= PersonService.getPersons(xml); for (Person person : persons) { Log.i(TAG, person.toString()); } } }
执行该测试方法就会在LogCat控制台打印如下信息
03-28 06:13:45.375: INFO/PersonServiceTest(1247): Person [id=10, name=gaohao, age=25] 03-28 06:13:45.375: INFO/PersonServiceTest(1247): Person [id=11, name=gaofeng, age=31]
通过以上方法即可实现对XML文件中数据的解析。