SAX解析
2016-05-04 23:21
211 查看
第一步,在res目录下新建一个raw文件夹,然后new一个.xml文件如 tt.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>NEwii</name>
<age>21</age>
</person>
<person id="20">
<name>Willwii</name>
<age>25</age>
</person>
</persons>
第二步,在src下新建一个实体类Person 内容如下:
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 + "]";
}
}
第三步,再新建一个类,用于解析xml文件的类SAXForHandler,内容如下:
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;
public class SAXForHandler extends DefaultHandler{
private static final String TAG="SAXForHandler";
private List<Person> persons;
private String perTag;
Person person;
public List<Person> getPersons(){
return persons;
}
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
persons=new ArrayList<Person>();
Log.d(TAG,"****startDocument()*****");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
if("person".equals(localName)){
for(int i=0;i<attributes.getLength();i++){
Log.i(TAG,""+attributes.getLocalName(i)
+"attributes"+attributes.getValue(i)
);
person=new Person();
person.setId(Integer.valueOf(attributes.getValue(i)));
}
}
perTag=localName;
Log.i(TAG, qName+"*****startElement----");
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
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));
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
Log.i(TAG,qName+"***endElement***");
if("person".equals(localName)){
persons.add(person);
person=null;
}
perTag=null;
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
Log.i(TAG,"***endDocument()****");
}
}
第四步,在MainActivity中回调SAXForHandler中的方法 如下:
public class MainActivity extends Activity {
private static InputStream is;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
sax_xml();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public List<Person> sax_xml() throws Exception{
is = getResources().openRawResource(R.raw.tt);
Log.d("TAG","is==="+is);
SAXForHandler handler = new SAXForHandler();
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser();
parser.parse(is,handler);
List<Person> list = handler.getPersons();
Log.d("TAG","list===="+list.toString());
is.close();
return list;
}
}
结果如下:
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>NEwii</name>
<age>21</age>
</person>
<person id="20">
<name>Willwii</name>
<age>25</age>
</person>
</persons>
第二步,在src下新建一个实体类Person 内容如下:
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 + "]";
}
}
第三步,再新建一个类,用于解析xml文件的类SAXForHandler,内容如下:
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;
public class SAXForHandler extends DefaultHandler{
private static final String TAG="SAXForHandler";
private List<Person> persons;
private String perTag;
Person person;
public List<Person> getPersons(){
return persons;
}
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
persons=new ArrayList<Person>();
Log.d(TAG,"****startDocument()*****");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
if("person".equals(localName)){
for(int i=0;i<attributes.getLength();i++){
Log.i(TAG,""+attributes.getLocalName(i)
+"attributes"+attributes.getValue(i)
);
person=new Person();
person.setId(Integer.valueOf(attributes.getValue(i)));
}
}
perTag=localName;
Log.i(TAG, qName+"*****startElement----");
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
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));
}
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
// TODO Auto-generated method stub
super.endElement(uri, localName, qName);
Log.i(TAG,qName+"***endElement***");
if("person".equals(localName)){
persons.add(person);
person=null;
}
perTag=null;
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
Log.i(TAG,"***endDocument()****");
}
}
第四步,在MainActivity中回调SAXForHandler中的方法 如下:
public class MainActivity extends Activity {
private static InputStream is;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
try {
sax_xml();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public List<Person> sax_xml() throws Exception{
is = getResources().openRawResource(R.raw.tt);
Log.d("TAG","is==="+is);
SAXForHandler handler = new SAXForHandler();
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = spf.newSAXParser();
parser.parse(is,handler);
List<Person> list = handler.getPersons();
Log.d("TAG","list===="+list.toString());
is.close();
return list;
}
}
结果如下:
相关文章推荐
- java是值传递还是引用传递。
- SDAU dp专题 1004
- Hadoop 2.x Hdfs Shell 命令
- 27.重构讲解 - IntelliJ IDEA 使用教程
- ZZUOJ10407 最大岛屿
- vc++编译连接原理与过程
- JSP处理流程图示
- 26.Debug 介绍 - IntelliJ IDEA 使用教程
- 介绍几个图论和复杂网络的程序库 —— BGL,QuickGraph,igraph和NetworkX
- FLEXnet Licensing Error Codes
- Hadoop安装教程_单机/伪分布式配置_CentOS6.4/Hadoop2.6.0
- PHP底层的运行机制与原理
- 【HUSTOJ】1033: 质因子分解
- Python 类与元类的深度挖掘 II
- KMP模板
- LeetCode 127. Word Ladder
- 现成的emacs配置
- iOS自定义控件(@IBDesignable与@IBInspectable)
- Android进程
- 凸优化笔记