您的位置:首页 > 其它

解析xml文件

2015-11-29 21:22 211 查看
运行apache服务

在C:\Program Files\Apache Software Foundation\Apache2.4\htdocs

文件里面新建一个get_data.xml

<apps>
<app>
<id>1</id>
<name>tom</name>
<version>1</version>
</app>
<app>
<id>2</id>
<name>jerry</name>
<version>2</version>
</app>
</apps>


使用Pull解析

package com.example.testsometing;

import java.io.IOException;
import java.io.StringReader;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class MainActivity extends Activity {

Handler handler ;
TextView tv_response;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv_response = (TextView) this.findViewById(R.id.response);
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
tv_response.setText(parseXMLWithPull(msg.obj.toString()));
break;
default:
break;
}
}
};

new Thread(new Runnable() {
@Override
public void run() {
try {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://10.0.2.2/get_data.xml");//指定访问的服务器地址是电脑本机
HttpResponse httpResponse = httpClient.execute(httpGet);
String response;
if(httpResponse.getStatusLine().getStatusCode() == 200){
//请求和相应都成功
HttpEntity entity = httpResponse.getEntity();
response = EntityUtils.toString(entity,"utf-8");
}
else{
response = "error";
}
Message msg = new Message();
msg.what = 1;
msg.obj = response;
handler.sendMessage(msg);

} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}
}

).start();
}

private String parseXMLWithPull(String str){
String string = "";
try {
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(new StringReader(str));

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:
if("id".equals(nodeName)){
id = xmlPullParser.nextText();
}else if("name".equals(nodeName)){
name = xmlPullParser.nextText();
}else if("version".equals(nodeName)){
version = xmlPullParser.nextText();
}
break;
//完成解析某个节点
case XmlPullParser.END_TAG:
if("app".endsWith(nodeName)){
string += id+":"+name+":"+version+"\n";
}
break;
default:
break;
}
eventType = xmlPullParser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return string;
}
}


使用SAX解析

ContentHandler.java

package com.example.handler;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class ContentHandler extends DefaultHandler{

private String nodeName;
private StringBuilder id;
private StringBuilder name;
private StringBuilder version;
public  String string = "";

//重新5个方法
@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 {
super.characters(ch, start, length);
//根据当前的结点名判断将内容添加到哪一个StringBuilder
if("id".equals(nodeName)){
id.append(ch, start, length);
}else if("name".equals(nodeName)){
name.append(ch, start, length);
}else if("version".equals(nodeName)){
version.append(ch, start, length);
}

}

@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if("app".equals(localName)){
string += id.toString().trim()+":"+name.toString().trim()+":"+version.toString().trim()+"\n";
//清空StringBuilder
id.setLength(0);
name.setLength(0);
version.setLength(0);
}
//因为上面的3行没有用{}起来,花了1个小时检查这个bug。。。。醉了

}

@Override
public void endDocument() throws SAXException {
// TODO Auto-generated method stub
}

//
public String getString(){
return string;
}

}


MainActivity.java

package com.example.testsometing;

import java.io.IOException;
import java.io.StringReader;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import com.example.handler.ContentHandler;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;

public class MainActivity extends Activity {

Handler handler ;
TextView tv_response;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

tv_response = (TextView) this.findViewById(R.id.response);
handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
tv_response.setText(parseXMLWithSAX(msg.obj.toString()));
break;
default:
break;
}
}
};

new Thread(new Runnable() {
@Override
public void run() {
try {
HttpClient httpClient = new DefaultHttpClient();
HttpGet httpGet = new HttpGet("http://10.0.2.2/get_data.xml");//指定访问的服务器地址是电脑本机
HttpResponse httpResponse = httpClient.execute(httpGet);
String response;
if(httpResponse.getStatusLine().getStatusCode() == 200){
//请求和相应都成功
HttpEntity entity = httpResponse.getEntity();
response = EntityUtils.toString(entity,"utf-8");
}
else{
response = "error";
}
Message msg = new Message();
msg.what = 1;
msg.obj = response;
handler.sendMessage(msg);

} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}
}

).start();
}

private String parseXMLWithSAX(String str){
String string = "";

try {
SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader xmlReader = factory.newSAXParser().getXMLReader();
ContentHandler contentHandler = new ContentHandler();
//将ContentHandler实例设置到XMLReader中
xmlReader.setContentHandler(contentHandler);
//开始解析
xmlReader.parse(new InputSource(new StringReader(str)));
string = contentHandler.getString();
}  catch (IOException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
}
return string;
}

}


效果

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