Android开发之解析XML-SAX

来源:互联网 发布:yy网络用语什么意思 编辑:程序博客网 时间:2024/05/22 09:02

Android网络数据传递常用的有xml,json,html等,今天写一下项目中用到的解析Xml的方法---Sax解析

步骤1,新建一个数据类,如

class Person{

private String name="";

private String age="";

public void setName(String name){

this.name = name;

}

public String getName(){

return name;

age同理

}这个对象中有名字和年龄字段

2,创建Sax的事件处理类,这个类要继承DefaultHandler这个类,解析的工作就是在这个类中实现的。其中有几个实现的方法 startDocument();startElement(String uri, String localName, String qName,Attributes attributes),characters(char[] ch, int start, int length); endElement();endDocument().对应着解析中的各个步骤。


class PersonSaxXml extends DefaultHandler{

private Person person;
public Person getPerson () {
return person;
}
public void setPerson (Person person) {
this.person=person;
}

//如果返回的数据中有数组

private List<Person > mPerson ;

public List<Person > getMPerson() {
return mPerson ;
}
public void setMPerson(List<Person >mPerson ) {
this.mPerson =mPerson ;
}

private String local;
//文档的开始
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
mPerson =  new ArrayList<Person >();
}
//元素开始
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
this.local = localName;
if(local.equalsIgnoreCase("")){
person= new Person();
}
}
//s数据开始
public void characters(char[] ch, int start, int length)
throws SAXException {
if(local!=null){
String data = new String(ch,start,length);
if(local.equalsIgnoreCase("name")){//判断是否为名字的字段
if(data!=null&&!data.equalsIgnoreCase("")){
person.setName(data.trim());
}
}else if(local.equalsIgnoreCase("age")){//是否为年龄
if(data!=null&&!data.equalsIgnoreCase("")){
person.setAge(data.trim());
}
}
}
local = null;
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
if(local.equalsIgnoreCase("list")){//如果是数组,在对象结束的时候加入list中
mPerson.add(person);
}
local =null;
}
@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
super.endDocument();
}

}

3.第三步,创建sax解析方法:

具体:  String xml ="";

 StringReader mReader = new StringReader(xml);

` InputSource is =  new InputSource(mReader);//创建输入流InputSource


try {

//创建工厂类SAXParserFactory 
SAXParserFactory msSaxParserFactory = SAXParserFactory
.newInstance();

//SAXParserFactory 得到SaxParser
SAXParser msSaxParser = msSaxParserFactory.newSAXParser();
//创建上一步中写的解析类
PersonSaxXml saxXml = newPersonSaxXml ();

//得到XMLReader实例

XMLReader msXmlReader = msSaxParser.getXMLReader();
msXmlReader.setContentHandler(saxXml);
msXmlReader.parse(mInputSource);//将解析工具类和输入流注册到XMLReader中


List<Person > mPerson = saxXml.getMPerson();//从解析工具类中得到结果
} catch (Exception e) {
e.printStackTrace();
}

Ok这样sax解析就完成了

0 0
原创粉丝点击