解析xml文件
发布时间:2020-12-16 05:42:48 所属栏目:百科 来源:网络整理
导读:运行apache服务 在C:Program FilesApache Software FoundationApache2.4htdocs 文件里面新建一个 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 使用P
运行apache服务 <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解析 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,length);
}else if("name".equals(nodeName)){
name.append(ch,length);
}else if("version".equals(nodeName)){
version.append(ch,length);
}
}
@Override
public void endElement(String uri,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;
}
}
效果 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |