Android:采用SAX解析XML实例
来源:互联网 发布:nginx 集群配置 编辑:程序博客网 时间:2024/06/01 19:46
接着之前的部分现在要编写代码解析如下的person.xml文件
<?xml version="1.0" encoding="utf-8"?><persons> <person id="23"> <name>liming</name> <age>30</age> </person> <person id="20"> <name>xiaohong</name> <age>25</age> </person></persons>
程序结构图如下
person类用于保存信息
SAXPersonService负责解析
package wade.domain;public class Person { private Integer id; private String name; private Short 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 [id=" + id + ", name=" + name + ", age=" + age + "]"; }}
public class SAXPersonService { public List<Person> getPersons(InputStream inputStream) throws Throwable { SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser =factory.newSAXParser(); PersonParser personparse = new PersonParser(); //void parse(InputStream is, DefaultHandler dh) //throws SAXException, IOException parser.parse(inputStream, personparse); inputStream.close(); return personparse.getPersons(); } //内部类重写了回调函数 private class PersonParser extends DefaultHandler{ private List<Person> persons=null; private Person person=null; private String tag=null;//用于存储读到的元素节点 public List<Person> getPersons() { return persons; } @Override public void startDocument() throws SAXException { persons= new ArrayList<Person>();//初始化persons } @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.equals(new Short(data)); } } } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { //假设<s:person id="20">,则 //uri="s", //localName="person", //qName="s:person" //attributes得到所有的属性名和属性值 if("person".equals(localName)){ person = new Person(); person.setId(new Integer(attributes.getValue(0))); } tag=localName; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if("person".equals(localName)){ persons.add(person); person=null; } tag=null; } }}
使用junit进行测试
public class SAXPersonServiceTest extends AndroidTestCase{ private static final String TAG = "SAXPersonServiceTest"; public void testGetPersons() throws Throwable{ SAXPersonService service = new SAXPersonService(); InputStream inStream = getClass().getClassLoader().getResourceAsStream("person.xml"); List<Person> persons=service.getPersons(inStream); for(Person p:persons){ Log.i(TAG, p.toString()); } }}
结果
说明正确解析了xml文件。
0 0
- Android:采用SAX解析XML实例
- android中采用SAX方式解析XML
- Android:采用SAX解析XML的原理
- sax解析xml实例
- Xml-Sax解析实例
- sax 解析xml实例
- SAX解析XML实例
- SAX解析XML文件-采用自定义布局
- android SAX解析XML
- Android SAX解析XML
- android SAX解析XML
- android xml-----Sax解析
- Android SAX解析XML
- Android SAX解析XML
- Android SAX解析XML
- Android SAX解析XML
- Android SAX 解析 XML
- Android SAX解析XML
- leetcode 日经贴,Cpp code -Valid Sudoku
- 织梦安装在子目录会出现问题的解决技巧集合
- 如何让IE10运行64位的JRE
- ios客户端学习-日期和字符串互转,前一天后一天,星期几
- Linux下谁在消耗我们的cache
- Android:采用SAX解析XML实例
- Android中判断网络连接是否可用及监控网络状态
- linux一键安装web环境全攻略(推荐用xshell和xftp)
- perl 子程序传递参数
- openMP的一点使用经验
- 查看MYSQL数据库中所有用户及拥有权限
- Spring-----5、Spring容器中的bean
- 浅谈HTTP中Get与Post的区别
- python 函数入门