第一行代码总结:10网络:10.3解析XML格式数据:

来源:互联网 发布:张伯伦场均数据 编辑:程序博客网 时间:2024/05/22 09:43

在网络上传输的数据是格式化后的数据,这种数据会有一定的结构规格和语义,当另一方收到数据消息之后就可以按照相同的结构规格进行解析,从而取出他想要的那部分内容。

最常用的格式有两种:XML和JSON.

· 解析XML格式的数据有多种方式,这里介绍两种:Pull解析和SAX解析。

比起XML,JSON的主要优势在于它的体积更小,在网络上传输的时候更省流量。缺点在于,它的语义较差,看起来不如XML直观。(代码量更少)

· 解析JSON数据的方法有多种方法,可以使用官方提供的JSONObject,也可以使用谷歌的开源库GSON,另外,第三方开源库如Jackson,FastJson等也非常不错。

搭建一个最简单的Web服务器:   

在这个服务器上提供一段XML文本,然后我们在程序里去访问这个服务器,再对得到的XML文本进行解析。

有很多服务器类型可供选择,这里使用Apache服务器。

1、可执行文件安装??????????????????

2、配置安装

 

 

10.3.1 Pull解析方式

步骤:

1、首先获取一个XmlPullParserFactory的实例,主要调用其静态方法newInstance()得到。

   XmlPullParserFactory factory =XmlPullParserFactory.newInstance();

2、然后利用XmlPullParserFactory的实例,调用newPullParser()方法,得到XmlPullParser对象。

   XmlPullParser xmlPullParser =factory.newPullParser();

3、然后调用XmlPullParser的setInput()方法将服务器返回的XML数据设置进去就可以开始解析了。

   xmlPullParser.setInput(new StringReader(xmlData));

   注意:这里的StringReader类是Reader类的子类。public class StringReaderextends ReaderAspecialized Reader that reads characters from a String in a sequential manner.

4、具体解析的时候,首先通过XmlPullParser类的getEventType()方法得到当前的解析事件。Returns the type of the current event(START_TAG, END_TAG, TEXT, etc.)

  int eventType = xmlPullParser.getEventType();//得到当前解析事件

5、然后在一个while循环中不断地进行解析,如果当前的解析事件不等于XmlPullParser.END_DOCUMENT,说明解析工作还没完成,调用XmlPullParser的next()方法可以获取下一个解析事件。

   String id = “”;

   String name = “”;

   String version = “”;

   while(eventType !=XmlPullParser.END_DOCUMENT){

      ……

      eventType = xmlPullParser.next();

   }

6、在while循环中,通过XmlPullParser类的getName()方法得到当前结点的名字,如果发现结点名等于id,name,或version,就调用nextText()方法来获取结点内具体的内容,每当解析完一个app结点后就将获取到的内容打印出来。

   Stringid = “”;

   String name = “”;

   String version = “”;

   while(eventType !=XmlPullParser.END_DOCUMENT){

      String nodeName =xmlPullParsr.getName();//得到当前结点的名字

      //开始解析某个结点

      switch(enventType){

      case XmlPullParser.START_TAG:{

          if(“id”.equals(nodeName)){

              id = xmlPullParser.nextText();

          } else if (“name”.equals(nodeName)){
              name =xmlPullParser.nextText();

          } elseif(“version”.equals(nodeName)){

              version =xmlPullParser.nextText();

          }

          break;

      }

      //完成解析某个结点

      case XmlPullParser.END_TAG:{

           if(“app”.equals(nodeName)){

              Log.d(“MainActivity”,”id is “ +id);

              Log.d(“MainActivity”,”name is “ +name);

              Log.d(“MainActivity”,”version is“ + version);

           }

           break;

      }

 

      default:

           break;

      }

      eventType = xmlPullParser.next();//获取下一个解析事件

   }

0 0