XML数据类型解析常常会用到两种方式,一种是Pull解析方式,另一种是SAX解析方式。
Pull解析方式:
通过创建XmlPullParseFactory对象,借助这个对象创建XmlPullParse对象,之后调用XmlPullParse对象的setInput()方法,将服务器返回的XML类型的输入传入即可。
XmlPullParseFactory factory=XmlPullParseFactory.newInstance();
XmlPullParse xmlPullParse=factory.newPullParse();
xmlPullParse.setInput(XML类型数据);
解析过程:
通过getEvenType()方法得到当前解析的时间,然后在一个while循环中进行不断解析,若当前解析的事件不等于XmlPullParse.END_DOCUMENT,说明还未解析完,通过next()方法获取下一个解析事件。
在while循环中通过getName()方法获取节点的名字,跟我们创建的名字进行比较,若相等,通关调用nextText()方法来获取节点的具体内容。
int evenType=xmlPullParse.getEvenType();
while(evenType!=XmlPullParse.END_DOCUMENT){
String noteName=xmlPullParse.getName();
switch(evenType){
case XmlPullParse.START_TAG:{
if(“id”.equals(noteName)){
id=xmlPullParse.nextText();
}
}
break;
default:
break;
}
evenType=xmlPullParse.next();
}
SAX解析方式:
SAX解析需要新建一个类继承自DefaultHandle类,并重写5个方法,startDocument()方法在XML开始解析的时候调用,startElement()方法在开始解析某个节点时调用,characters()在获取节点的具体内容时调用,endElement()在完成解析某个节点时调用,endDocument()在完成XML解析时调用。
其中startElement()、characters()、endElement()方法有参数。其中character()方法可以调用多次。
public class MYHandle extends DefaultHandle{
@Override
public void startDocument() throws SAXException{
}
@Override
public void startElement(String uri,String localName,String qName,Attributes attributes)throws SAXException{
}
@Override
public void characters(char[] chars,int start,int length)throws SAXException{
}
@Override
public void endElement(String uri,String localName,String qName)throws SAXException{
}
@Override
public void endDocument() throws SAXException{
}
}
创建完类之后,进行解析时候,需要先创建一个SAXParseFactory对象,通过这个对象创建一个XMLReaderd对象,同时创建一个你创建的类的对象,并通过调用XMLReader对象的setContentHandle()方法将所创建的类的对象传入,最终调用XMLReader对象的parse()方法将所要解析的数据传入即可。
SAXParseFactory factory=SAXParseFactory.newInstance();
XMLReader xmlReader=factory.newSAXparse().getXMLReader();
MYHandle myHandle=new MYHandle();
xmlReader.setContentHandle(myHandle);
xmlReader.parse(所要解析的数据);