解析 XML 有两种形式:

1、XMLReader

 XMLReaser  xmlReader = saxParser.getXMLReader();
xmlReadeer.setContentHandler(hangdler);
xmlREader.pase(new InputSource(is));

2、SAXParser

saxParser.parse(is, handler);

其实 SAXParser 是 JAXP(Java API for XML Processing) 对 XMLReader 的一个封装。

 import java.util.ArrayList;
import java.util.List; import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler; import android.util.Log; import com.wangjialin.domain.Person; public class SAXForHandler extends DefaultHandler { private static final String TAG = "SAXForHandler";
private List<Person> persons;
private String perTag ; // 通过此变量,记录前一个标签的名称。
Person person;  // 记录当前 Person public List<Person> getPersons() {
return persons;
} // 适合在此事件中触发初始化行为。
public void startDocument() throws SAXException {
persons = new ArrayList<Person>();
Log.i(TAG , "***startDocument()***");
} public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException { if("person".equals(localName)){
for ( int i = 0; i < attributes.getLength(); i++ ) {
Log.i(TAG ,"attributeName:" + attributes.getLocalName(i)
+ "_attribute_Value:" + attributes.getValue(i));
person = new Person();
person.setId(Integer.valueOf(attributes.getValue(i)));
}
}
perTag = localName;
Log.i(TAG , qName+"***startElement()***");
} public void characters(char[] ch, int start, int length) throws SAXException { String data = new String(ch, start, length).trim();
if(!"".equals(data.trim())){
Log.i(TAG ,"content: " + data.trim());
}
if("name".equals(perTag)){
person.setName(data);
}else if("age".equals(perTag)){
person.setAge(new Short(data));
}
} public void endElement(String uri, String localName, String qName) throws SAXException { Log.i(TAG , qName + "***endElement()***");
if("person".equals(localName)){
persons.add(person);
person = null;
}
perTag = null;
} public void endDocument() throws SAXException { Log.i(TAG , "***endDocument()***");
}
}

Person.java

 package com.wangjialin.domain;

 public class Person {

     private Integer id;
private String name;
private Short age; public Person(){} public Person(Integer id, String name, Short age) {
this.id = id;
this.name = name;
this.age = age;
} public Person(String name, Short age) {
this.name = name;
this.age = 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 "id=" + id + ",name=" + name+ ",age=" + age;
} }

JUnit 测试

 public void testSAXGetPersons() throws Throwable{

         InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("wangjialin.xml");
SAXForHandler saxForHandler = new SAXForHandler();
// 获取 SAX 解析器的工厂对象
SAXParserFactory spf = SAXParserFactory.newInstance();
// 创建解析器对象
SAXParser saxParser = spf.newSAXParser();
// 设定解析的文件和自己定义的事件处理器对象
saxParser.parse(inputStream, saxForHandler); List<Person> persons = saxForHandler.getPersons();
inputStream.close(); for(Person person:persons){
Log.i(TAG, person.toString());
}
}

【参考】

http://blog.csdn.net/redarmy_chen/article/details/12951649

最新文章

  1. Android IOS WebRTC 音视频开发总结(二五)-- webrtc优秀资源汇总
  2. Struts2(十二)使用验证框架验证数据较验
  3. javascript和“主流大型语言”(c# JAVA C++等)的差异
  4. 转载Entity Framework全面教程
  5. Hibernate学习笔记--------3.缓存
  6. CentOS的Redis内存分配策略配置
  7. 解决cocos2d-X 2.0版本后创建的Android项目提示org.cocos2dx.lib.Cocos2dxActivity找不到问题
  8. 在Ubuntu 11.10工具栏上用数字显示网速、CPU负荷和内存占用量『译』
  9. 【.NET】字符串处理
  10. window.onload的使用心得
  11. 201521123031 《Java程序设计》第4周学习总结
  12. web开发|如何选择合适的webui框架
  13. aix 6.1系统怎么安装?这里有详细图文教程
  14. 初学servlet之使用web.xml配置
  15. Django之admin中管理models中的表格
  16. 社交CRM SCRM
  17. Luogu P3953 逛公园
  18. huffman编解码英文文本[Python]
  19. Dom4j中getStringValue()和getText()用法的区别
  20. 在配置文件里面设置bean 那么在类里面就要提供set方法用以注入

热门文章

  1. 用python实现各种排序算法
  2. 怎样使用word2013发布csdn博客
  3. 编译hbase-1.2.3源代码
  4. c# 协变和逆变的理解
  5. DevExpress中Tile Application窗体的模型架构图
  6. 译:Microsoft/ReactXP 简介
  7. C# winform 记住密码实现代码
  8. netcore 发布 到 windows server IIS 可能会报错
  9. .NET Core 和 .NET .Framework 速度比较
  10. 【mysql】使用Navicat连接数据库