一、在assets文件中写一个xml文件
<?xml version="1.0" encoding="UTF-8"?>
<persons>
<person id="23">
<name>李明</name>
<age>30</age>
</person>
<person id="20">
<name>李向梅</name>
<age>25</age>
</person>
</persons>
二、在service中写一个SAX解析的类
package com.example.service;
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 com.example.domain.Person;
public class XMLContentHandler extends DefaultHandler{
//解析的person对象存储到list集合中
private List<Person> persons;
//解析当前的person对象
public Person currentPerson;
//声明标签的名称
public String tagName;
//获取解析所有的person对象
public List<Person> getPersons() {
return persons;
}
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
//首先判断tagName是否为空
if(tagName!=null){
String data=new String(ch,start,length);
//判断标签是否为空
if(tagName.equals("name")){
currentPerson.setName(data);
}else if(tagName.equals("age")){//判断标签是否是age
currentPerson.setAge((short) Integer.parseInt(data));
}
}
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
//当person标签结束的时候把person对象存储到集合中
if(localName.equals("person")){
persons.add(currentPerson);
currentPerson=null;
}
this.tagName=null;
}
/**
* 文档开始触发的事件
*/
@Override
public void startDocument() throws SAXException {
super.startDocument();
persons=new ArrayList<Person>();
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
//判断解析的标签是否是person
if(localName.equals("person")){
currentPerson=new Person();
//把id属性的值解析出来 并且把id赋值给currentPerson对象
currentPerson.setId(Integer.parseInt(attributes.getValue(0)));
}
this.tagName=localName;
}
}
三、在Activity中获取SAX类的操作
package com.example.lession03_xml;
import java.io.InputStream;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import com.example.domain.Person;
import com.example.service.XMLContentHandler;
import com.example.service.XMLDomService;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.inputmethod.InputBinding;
import android.widget.Button;
import android.widget.Toast;
public class XmlActivity extends Activity {
//声明组件
public Button btn_sax,btn_dom,btn_pull;
public XMLDomService xmlDomService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置显示的视图
setContentView(R.layout.activity_xml);
xmlDomService=new XMLDomService();
//根据id获取组件
btn_sax=(Button) findViewById(R.id.btn_sax);
btn_dom=(Button) findViewById(R.id.btn_dom);
btn_pull=(Button) findViewById(R.id.btn_pull);
//为按钮注册事件
btn_sax.setOnClickListener(new MyOnclickListener());
btn_dom.setOnClickListener(new MyOnclickListener());
btn_pull.setOnClickListener(new MyOnclickListener());
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.xml, menu);
return true;
}
//匿名类
class MyOnclickListener implements OnClickListener{
@Override
public void onClick(View v) {
int id=v.getId();
switch (id) {
case R.id.btn_sax:
Toast.makeText(XmlActivity.this, "采用SAX解析", Toast.LENGTH_LONG).show();
try{
//SAX解析的工厂对象
SAXParserFactory factory=SAXParserFactory.newInstance();
//得到sax的解析器
SAXParser saxParser=factory.newSAXParser();
//创建handler对象
XMLContentHandler handlerService=new XMLContentHandler();
InputStream is=getAssets().open("csdn.xml");
//直接解析
saxParser.parse(is, handlerService);
//通过handlerService对象获取
Toast.makeText(XmlActivity.this, "----"+handlerService, Toast.LENGTH_LONG).show();
}catch(Exception e){
e.printStackTrace();
}
break;
case R.id.btn_dom:
InputStream is=null;
try{
//获取读取文件的输入流对象
is=getAssets().open("csdn.xml");
//采用dom解析
List<Person> persons=xmlDomService.parseXML(is);
//简单测试
//Toast.makeText(XmlActivity.this, ""+persons.get(0).getName(), Toast.LENGTH_LONG).show();
Toast.makeText(XmlActivity.this, "采用DOM解析"+persons.get(0).getName(), Toast.LENGTH_LONG).show();
}catch(Exception e){
e.printStackTrace();
}
break;
case R.id.btn_pull:
Toast.makeText(XmlActivity.this, "采用PULL解析", Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}
}