Android之SAX解析XML文件

本文详细介绍了如何使用SAX解析器解析XML文件,并通过JUnit进行测试验证。主要内容包括XML文件创建、SAX解析器实现及JUnit测试代码示例。

1>先编写一个XML文件。

<?xml version="1.0" encoding="utf-8"?> <persons> <person id="1"> <name>duantianlang</name> <age>23</age> </person> <person id="2"> <name>wangtianba</name> <age>33</age> </person> </persons>


这个没什么说的,就是个xml

2>然后先写业务层Service层。

package com.duantl.service; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; import com.duantl.domain.Person; /** * SAX解析XML * @author duantl * */ public class SAXPersonService { public List<Person> getPersons(InputStream inStream) throws Throwable{ SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); PersonParser personParser = new PersonParser(); parser.parse(inStream, personParser); inStream.close(); return personParser.getPersons(); } private final class PersonParser extends DefaultHandler{ private List<Person> persons = null; private String tag = null; private Person person = null; public List<Person> getPersons() { return persons; } @Override public void startDocument() throws SAXException { persons = new ArrayList<Person>(); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if("person".equals(localName)){ person = new Person(); person.setId(new Integer(attributes.getValue(0))); } tag = localName; } @Override public void characters(char[] ch, int start, int length) throws SAXException { if(tag!=null){ String data = new String(ch, start, length);//获取文本节点的数据 if("name".equals(tag)){ person.setName(data); }else if("age".equals(tag)){ person.setAge(new Short(data)); } } } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if("person".equals(localName)){ persons.add(person); person = null; } tag = null; } } }


3>JUnit测试一下

当然写JUnit的时候别忘记添加支持

<uses-library android:name="android.test.runner" />


<instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.duantl.xmlsax" android:label="Tests for My App" />package com.duantl.xmlsax; import java.io.InputStream; import java.util.List; import android.test.AndroidTestCase; import android.util.Log; import com.duantl.domain.Person; import com.duantl.service.SAXPersonService; public class PersonServiceTest extends AndroidTestCase { private static final String TAG = "PersonServiceTest"; public void testSAXGetPersons() throws Throwable{ SAXPersonService service = new SAXPersonService(); InputStream inStream = getClass().getClassLoader().getResourceAsStream("persons.xml"); List<Person> persons = service.getPersons(inStream); for(Person person : persons){ Log.i(TAG, person.toString()); } } }


4>测试成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值