您的位置:首页 > 其它

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;

}

}

结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: