案例
http://www.jb51.cc/article/p-opmxadok-mn.html
解析XML格式的数据
搭建Web服务器
1、搭建一个简单的Web服务器,在这个服务器上提供一段XML文本,然后我们在程序里去访问这个服务器,在对得到的XML文本进行解析。
1、需要下载一个Apache服务器的安装包,下载地址:http://httpd.apache.org/download.cgi
2、下载完成后双击就可以安装了,然后一直点击Next,会提示让你输入自己的域名,随便填一个域名就行了,接着继续一直点击Next会提示让你选择程序安装路径,这里我选择安装到C:\Apache目录下,之后在继续点击Next就可以完成安装了。
3、安装成功后服务器会自动启动起来,可以在浏览器地址栏中输入127.0.0.1,如果出现下图界面,就说明服务器已经启动成功了。4、进入到C:\Apache\Apache2\htdocs目录下,在这里创建一个名为get_data.xml的文件,然后编辑这个文件,并加入如下XML格式文件。
Pull解析方式
#
- public class IndexActivity extends AppCompatActivity implements View.OnClickListener {
- ..................
- private void sendRequestWithHttpClient() {
- new Thread(new Runnable() {
- @Override
- public void run() {
- HttpClient httpClient = new DefaultHttpClient();
- HttpGet httpGet = new HttpGet("http://192.168.0.102" / get_data.xml);
- try {
- HttpResponse httpResponse = httpClient.execute(httpGet);
- StatusLine statusLine = httpResponse.getStatusLine();
- int code = statusLine.getStatusCode();
- if (code == HttpURLConnection.HTTP_OK) {
- HttpEntity entity = httpResponse.getEntity();
- String response = EntityUtils.toString(entity,"utf-8");
- InputStream is = entity.getContent();
- BufferedReader br = new BufferedReader(new InputStreamReader(is));
- String line = br.readLine();
- while (line != null) {
- parseXMLWithPull(line);
- line = br.readLine();
- }
-
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
-
- }
- }).start();
- }
-
- private void parseXMLWithPull(String xmlData) {
- try {
- XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
- XmlPullParser xmlPullParser = factory.newPullParser();
- StringReader stringReader = new StringReader(xmlData);
- xmlPullParser.setInput(stringReader);
- 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".equals(nodeName)){
- Log.d("Mainactivity","id is"+id);
- Log.d("Mainactivity","id is"+name);
- Log.d("Mainactivity","id is"+version);
- }
- break;
- default:
- break;
- }
- eventType=xmlPullParser.next();
- }
- } catch (XmlPullParserException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
总结:1、首先将HTTP请求地址改成了http://192.168.0.102/get_data.xml; 192.168.0.102对于模拟器来说就是电脑本机的IP地址,在得到了服务器返回的数据后,我们并不在去发送一条消息,而是调用了parseXMLWithPull()方法来解析服务器返回的数据。
SAX解析方式
ContentHandler类
MainActivity
总结: