加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

解析XML格式数据的方式——Pull解析、SAX解析

发布时间:2020-12-16 08:55:40 所属栏目:百科 来源:网络整理
导读:案例 解析XML格式的数据 搭建Web服务器 Pull解析方式 SAX解析方式 ContentHandler类 MainActivity 案例 http://www.jb51.cc/article/p-opmxadok-mn.html 解析XML格式的数据 搭建Web服务器 1、搭建一个简单的Web服务器,在这个服务器上提供一段XML文本,然后
    • 案例
    • 解析XML格式的数据
      • 搭建Web服务器
      • Pull解析方式
      • SAX解析方式
        • ContentHandler类
        • MainActivity

案例

http://www.52php.cn/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:ApacheApache2htdocs目录下,在这里创建一个名为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

 
 

总结:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读