1. 程式人生 > >使用pull方式和sax方式對xml文件進行解析

使用pull方式和sax方式對xml文件進行解析

tostring 需要 nts tag .com version thp response pri

這是我自己設置的xml文件

技術分享圖片

用一下方式獲取它的內容

try{
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
       //對於虛擬機而言的本地地址
.url("http://10.0.2.2/get_data.xml")
.build();
Response response =client.newCall(request).execute();
String responseData = response.body().string();
}catch (Exception e){
e.printStackTrace();
}

首先是pull方式

 xmlData是獲取到的xml文件內容 

private void parseXMLWithPull(String xmlData){
try{
Log.i(TAG, "parseXMLWithPull: ");
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(new StringReader(xmlData));
int eventType = xmlPullParser.getEventType();
String id ="";
String name = "";
String version = "";
while (eventType != XmlPullParser.END_DOCUMENT){
String nodeName = xmlPullParser.getName();
switch (eventType){
//開始解析某個節點
case XmlPullParser.START_TAG:{
switch (nodeName){
case "id":
id = xmlPullParser.nextText();
break;
case "name":
name = xmlPullParser.nextText();
break;
case "version":
version = xmlPullParser.nextText();
break;
default:
break;
}
break;
}
//結束解析某個節點
case XmlPullParser.END_TAG:{
if("app".equals(nodeName)){
Log.i(TAG, "id: "+id);
Log.i(TAG, "name: "+name);
Log.i(TAG, "version: "+version);
}
break;
}
default:
break;
}
eventType = xmlPullParser.next();
}
}catch (Exception e){
e.printStackTrace();
}
}

然後是Sax方式,這種方式需要新建一個類並使它繼承defaultHandler類
public class MyHandler extends DefaultHandler{
private String nodeName;
private StringBuilder id;
private StringBuilder name;
private StringBuilder version;
//開始解析xml時調用
@Override
public void startDocument() throws SAXException {
id = new StringBuilder();
name = new StringBuilder();
version = new StringBuilder();
}
//開始解析某個節點時調用
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
nodeName = localName;
//記錄當前節點名
}
//獲取節點內容時調用
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
switch (nodeName){
case "id": {
id.append(ch, start, length);
break;
}
case "name":{
name.append(ch,start,length);
break;
}
case "version":{
version.append(ch,start,length);
}

}
}

@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
if("app".equals(nodeName)){
Log.i("ContentHandler", "id: "+id.toString().trim());
Log.i("ContentHandler", "name: "+name.toString().trim());
Log.i("ContentHandler", "version: "+version.toString().trim());
//清空StringBuilder
id.setLength(0);
name.setLength(0);
version.setLength(0);
}
}

@Override
public void endDocument() throws SAXException {
super.endDocument();
}
}

使用pull方式和sax方式對xml文件進行解析