解析xml文件
2015-11-29 21:22
211 查看
运行apache服务
在C:\Program Files\Apache Software Foundation\Apache2.4\htdocs
文件里面新建一个get_data.xml
使用Pull解析
使用SAX解析
ContentHandler.java
MainActivity.java
效果
在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; } }
效果
相关文章推荐
- php使用http_build_query,parse_url,parse_str创建与解析url
- 从现在开始记录吧
- BZOJ 4341 [CF253 Printer] 解题报告
- 1.0 windows10系统安装步骤(1)
- 1.0 windows10系统安装步骤(1)
- c++11 final与override说明符
- 51单片机PWM波调光
- POJ1679 The Unique MST(次小生成树)
- Imageloader使用
- 第十二周学习总结
- 张国祥老师在宁波麒麟贸易集团公司讲授绩效薪酬管理
- 《leetCode》:Search a 2D Matrix
- GeekHades 非常喜欢的电影
- ubuntu环境安装git
- 打破应试教育的思想才是重生之路
- 挖掘微信Web网页版通信的全过程
- 第十二章 process.tar.gz中代码的运行
- Sqlite(数据库)
- JavaScript的继承
- 用 Jenkins 打包 iOS