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

前端之家收集整理的这篇文章主要介绍了解析XML格式数据的方式——Pull解析、SAX解析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

案例

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解析方式

#

  1. public class IndexActivity extends AppCompatActivity implements View.OnClickListener {
  2. ..................
  3. private void sendRequestWithHttpClient() {
  4. new Thread(new Runnable() {
  5. @Override
  6. public void run() {
  7. HttpClient httpClient = new DefaultHttpClient();
  8. HttpGet httpGet = new HttpGet("http://192.168.0.102" / get_data.xml);
  9. try {
  10. HttpResponse httpResponse = httpClient.execute(httpGet);
  11. StatusLine statusLine = httpResponse.getStatusLine();
  12. int code = statusLine.getStatusCode();
  13. if (code == HttpURLConnection.HTTP_OK) {
  14. HttpEntity entity = httpResponse.getEntity();
  15. String response = EntityUtils.toString(entity,"utf-8");
  16. InputStream is = entity.getContent();
  17. BufferedReader br = new BufferedReader(new InputStreamReader(is));
  18. String line = br.readLine();
  19. while (line != null) {
  20. parseXMLWithPull(line);
  21. line = br.readLine();
  22. }
  23.  
  24. }
  25. } catch (IOException e) {
  26. e.printStackTrace();
  27. }
  28.  
  29. }
  30. }).start();
  31. }
  32.  
  33. private void parseXMLWithPull(String xmlData) {
  34. try {
  35. XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
  36. XmlPullParser xmlPullParser = factory.newPullParser();
  37. StringReader stringReader = new StringReader(xmlData);
  38. xmlPullParser.setInput(stringReader);
  39. int eventType = xmlPullParser.getEventType();
  40. String id = "";
  41. String name = "";
  42. String version = "";
  43. while (eventType != XmlPullParser.END_DOCUMENT) {
  44. String nodeName = xmlPullParser.getName();
  45. Switch(eventType) {
  46. case XmlPullParser.START_TAG:
  47. if ("id".equals(nodeName)) {
  48. id = xmlPullParser.nextText();
  49. } else if ("name".equals(nodeName)) {
  50. name = xmlPullParser.nextText();
  51. } else if ("version".equals(nodeName)) {
  52. version = xmlPullParser.nextText();
  53. }
  54. break;
  55. case XmlPullParser.END_TAG:
  56. if ("app".equals(nodeName)){
  57. Log.d("Mainactivity","id is"+id);
  58. Log.d("Mainactivity","id is"+name);
  59. Log.d("Mainactivity","id is"+version);
  60. }
  61. break;
  62. default:
  63. break;
  64. }
  65. eventType=xmlPullParser.next();
  66. }
  67. } catch (XmlPullParserException e) {
  68. e.printStackTrace();
  69. } catch (IOException e) {
  70. e.printStackTrace();
  71. }
  72. }
  73. }

总结:1、首先将HTTP请求地址改成了http://192.168.0.102/get_data.xml; 192.168.0.102对于模拟器来说就是电脑本机的IP地址,在得到了服务器返回的数据后,我们并不在去发送一条消息,而是调用了parseXMLWithPull()方法来解析服务器返回的数据。

SAX解析方式

ContentHandler类

  1.  

MainActivity

  1.  

总结:

猜你在找的XML相关文章