android利用pull技术来解析和生成xml文件
2013-08-24 22:47
585 查看
pull技术可以用于javaee项目中也可以应用于android项目中 如果在javaee项目中应用需要引用相应的jar包,android中不需要因为android总已经有了并且android系统本身来解析xml文件时也应用了pull技术
实体类
xml文件 放在src目录下
service文件
测试类文件
在ActivityManifast.xml文件中注意要引用测试类的包代码
实体类
package com.example.domain; 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; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public Person(Integer id, String name, Integer age) { super(); this.id = id; this.name = name; this.age = age; } public Person() { super(); } public void setAge(Integer age) { this.age = age; } }
xml文件 放在src目录下
<?xml version="1.0" encoding="UTF-8"?> <persons> <person id="23"> <name>liming</name> <age>30</age> </person> <person id="20"> <name>zhangxiaoxiao</name> <age>25</age> </person> </persons>
service文件
package com.example.service; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlSerializer; import android.util.Xml; import com.example.domain.Person; public class PersonService { /** *从xml中获取数据 * @param xml * @return * @throws Exception */ public static List<Person> getPersons(InputStream xml)throws Exception{ List<Person> persons=null; Person person=null; //得到pull解析器 XmlPullParser pullParser=Xml.newPullParser(); //为pull解析器设置要解析的xml数据 第一个参数要解析的xml第二个参数编码格式 pullParser.setInput(xml,"utf-8"); //产生一个事件 int event=pullParser.getEventType(); //如何不等于结束标签则循环遍历执行 while(event!=XmlPullParser.END_DOCUMENT){ switch(event){ //开始标签也就是 <?xml version="1.0" encoding="UTF-8"?>一段 case XmlPullParser.START_DOCUMENT: persons=new ArrayList<Person>(); break; /** * */ case XmlPullParser.START_TAG: //<person id="23"> if("person".equals(pullParser.getName())){ //得到属性 id int id=Integer.parseInt(pullParser.getAttributeValue(0)); person=new Person(); person.setId(id); } // <name>liming if("name".equals(pullParser.getName())){ String name=pullParser.nextText(); person.setName(name); } // <age>30 if("age".equals(pullParser.getName())){ int age=Integer.parseInt(pullParser.nextText()); person.setAge(age); } break; //结束的tag eg</age> </name> </person> case XmlPullParser.END_TAG: //如果是结束的tag是person 则把person放入persons中 继续往下执行 if("person".equals(pullParser.getName())){ persons.add(person); person=null; } break; } //得到开始之后需要执行pullParser.next()方法才会继续往下执行 event=pullParser.next(); } return persons; } /** * 保存数据到xml文件中 * @param persons * @throws Exception */ public static void save(List<Person> persons,OutputStream out)throws Exception{ XmlSerializer serializer=Xml.newSerializer(); serializer.setOutput(out,"UTF-8"); 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(); } }
测试类文件
package com.example.test; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import android.test.AndroidTestCase; import android.util.Log; import com.example.domain.Person; import com.example.service.PersonService; public class PersonServiceTest extends AndroidTestCase { private static final String TAG="PersonServiceTest"; //测试是否读取了xml文件 public void testXml() throws Exception{ InputStream xml=this.getClass().getClassLoader().getResourceAsStream("person.xml"); List<Person> persons=PersonService.getPersons(xml); for(Person person:persons){ Log.i(TAG, person.toString()); } } //测试是否转换为了xml文件 public void saveXml() throws Exception{ List<Person> persons=new ArrayList<Person>(); persons.add(new Person(11,"aaa",39)); persons.add(new Person(12,"bbb",12)); persons.add(new Person(13,"ccc",69)); //生成的xml文件放在当前目录所在包下 名字为itcast.xml; File xmlFile=new File(getContext().getFilesDir(),"itcast.xml"); FileOutputStream outstream=new FileOutputStream(xmlFile); PersonService.save(persons, outstream); } }
在ActivityManifast.xml文件中注意要引用测试类的包代码
相关文章推荐
- Android下Xml解析技术(四)、pull生成Xml文件
- 【Android网络开发の3】XML之PULL方式 解析和生成XML文件
- Android下Xml解析技术(三)、pull解析Xml文件
- Android开发之Pull解析读取和生成XML文件
- android 生成、pull解析xml文件
- Android下Xml解析技术(2)之PULL解析Xml文件
- Android_xml_pull解析和生成xml文件
- android学习——使用SAX、DOM 和 PULL 解析xml文件,及使用pull生成xml文件
- Android下Xml解析技术(四)、pull生成Xml文件
- Android使用PULL解析和生成XML文件
- Android下Xml解析技术(三)、pull解析Xml文件
- 使用XML序列化器生成XML文件和利用pull解析XML文件
- Android 中利用SAX ,Dom,pull解析 XML 文件
- android利用Pull解析器解析、生成XMl文件
- Android_15_pull解析Xml文件
- Java乔晓松-使用SAX,DOM,pull解析XML文件以及pull解析生成xml文件
- Android中pull解析和生成xml数据到一个字符串中
- android中pull解析xml文件
- android里pull解析xml文件
- Android中用pull解析与保存xml文件