android Pull方式解析xml文件


xml文件如下:

<?xml version="1.0" encoding="utf-8"?> <persons> <person id="1"> <name>zhangsan</name> <age>11</age> </person> <person id="2"> <name>lisi</name> <age>18</age> </person> <person id="3"> <name>wangwu</name> <age>20</age> </person> </persons>
解析代码如下:

package com.pdsu.file.xml; 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.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; import android.util.Xml; /** * 采用pull方式解析xml文件 * * @author huangyinge * */ public class PersonXML { /** * 读取xml文件 * * @param is * xml文件输入流 * @return person列表 * @throws XmlPullParserException */ public List<Person> readXML(InputStream is) throws Exception { List<Person> persons = null; Person person = null; // 得到xmlpull解析器 XmlPullParser xmlPull =XmlPullParserFactory.newInstance().newPullParser(); xmlPull.setInput(is, "UTF-8"); int eventType = xmlPull.getEventType(); // 循环遍历每个元素只到文档末尾 while (eventType != XmlPullParser.END_DOCUMENT) { switch (eventType) { case XmlPullParser.START_DOCUMENT:// 文档开始,只执行一次 persons = new ArrayList<Person>(); break; case XmlPullParser.START_TAG: {// 标签开始 if ("person".equals(xmlPull.getName())) { int id = Integer.parseInt(xmlPull.getAttributeValue(0)); person = new Person(); person.setId(id); } if ("name".equals(xmlPull.getName())) { String name = xmlPull.nextText(); person.setName(name); } if ("age".equals(xmlPull.getName())) { int age = Integer.parseInt(xmlPull.nextText()); person.setAge(age); } break; } case XmlPullParser.END_TAG: { if ("person".equals(xmlPull.getName())) { persons.add(person); person =null; } break; } } eventType = xmlPull.next(); } return persons; } /** * 保存xml文件 * @param persons * @throws Exception */ public void saveXML(List<Person> persons,OutputStream os) throws Exception{ XmlSerializer xmlSerializer = XmlPullParserFactory.newInstance().newSerializer(); xmlSerializer.setOutput(os,"UTF-8"); xmlSerializer.startDocument("UTF-8", true); xmlSerializer.startTag(null, "persons"); for(Person person:persons){ xmlSerializer.startTag(null, "person"); xmlSerializer.attribute(null, "id", String.valueOf(person.getId())); xmlSerializer.startTag(null, "name"); xmlSerializer.text(person.getName()); xmlSerializer.endTag(null, "name"); xmlSerializer.startTag(null, "age"); xmlSerializer.text(String.valueOf(person.getAge())); xmlSerializer.endTag(null, "age"); xmlSerializer.endTag(null, "person"); } xmlSerializer.endTag(null, "persons"); xmlSerializer.endDocument(); os.flush(); os.close(); } } 测试类代码:

package com.pdsu.file.xml; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.junit.Test; import android.test.AndroidTestCase; import com.pdsu.file.xml.Person; import com.pdsu.file.xml.PersonXML; public class PersonXMLTest extends AndroidTestCase{ @Test public void testReadXML() throws Exception{ InputStream is = this.getClass().getClassLoader().getResourceAsStream("person.xml"); PersonXML personXml = new PersonXML(); List<Person> persons = personXml.readXML(is); for(Person person :persons){ System.out.println(person); } } @Test public void save() throws Exception{ List<Person> persons = new ArrayList<Person>(); persons.add(new Person(1,"name1",11)); persons.add(new Person(2,"name2",112)); persons.add(new Person(3,"name3",113)); persons.add(new Person(4,"name4",114)); PersonXML personXml = new PersonXML(); FileOutputStream fos = new FileOutputStream(getContext().getFilesDir()+File.separator+"person.xml"); personXml.saveXML(persons, fos); } }


转载于:https://www.cnblogs.com/hibernate3-example/archive/2011/12/29/2492691.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值