您的位置:首页 > 其它

解析一个XML文件: XML解析器

2013-10-14 20:55 344 查看

解析一个XML文件: XML解析器

public class MainActivity extends Activity implements OnClickListener
{
[align=left]
[/align]
      private 
Button  bt;
    private 
SmsBean sms;
[align=left]    private List<SmsBean> smsList;[/align]
[align=left]      [/align]
[align=left]      @Override[/align]
      protected void onCreate(Bundle
savedInstanceState) {
[align=left]             super.onCreate(savedInstanceState);[/align]
[align=left]            setContentView(R.layout. activity_main);[/align]
[align=left]            [/align]
             bt=(Button)
findViewById(R.id. bt);
[align=left]            [/align]
[align=left]             bt.setOnClickListener( this);[/align]
[align=left]            [/align]
[align=left]      }[/align]
[align=left]
[/align]
[align=left]      /**[/align]
[align=left]       * 解析 xml文件的方法[/align]
[align=left]       * @param v[/align]
[align=left]       */[/align]
[align=left]      @Override[/align]
      public void onClick(View
v) {
[align=left]             try {[/align]
[align=left]                   //创建pull解析器[/align]
[align=left]                  XmlPullParser parser = Xml. newPullParser();[/align]
[align=left]                  [/align]
[align=left]                   //pull解析器配置[/align]
[align=left]                  FileInputStream  fis= new FileInputStream(Environment.getExternalStorageDirectory().getPath()+ "/sms.xml");[/align]
[align=left]                  parser.setInput(fis, "UTF-8");[/align]
[align=left]                  [/align]
[align=left]                   //开始解析,获事件的类型[/align]
                   int eventType
= parser.getEventType();
[align=left]                   while(eventType!=XmlPullParser. END_DOCUMENT){    //当事件类型不等于END_DOCUMENT时,继续解析[/align]
[align=left]                        [/align]
[align=left]                        String tageName=parser.getName(); //得到解析节点的名称[/align]
[align=left]                        [/align]
                         switch (eventType)
{
[align=left]                         case XmlPullParser. START_TAG:    //当解析的事件是开始标签时[/align]
[align=left]                               if( "Sms".equals(tageName)){[/align]
[align=left]                                     smsList= new ArrayList<SmsBean>();[/align]
[align=left]                               }[/align]
[align=left]                               else if( "sms".equals(tageName)){[/align]
[align=left]                                     sms= new SmsBean();[/align]
[align=left]                                     sms.setName(parser.getAttributeValue(0));[/align]
[align=left]                              }[/align]
[align=left]                               else if( "address".equals(tageName)){[/align]
[align=left]                                     sms.setStress(parser.nextText());[/align]
[align=left]                              }[/align]
[align=left]                               else if( "content".equals(tageName)){[/align]
[align=left]                                     sms.setContent(parser.nextText());[/align]
[align=left]                              }[/align]
[align=left]                               else if( "tate".equals(tageName)){[/align]
[align=left]                                     sms.setDate(Integer. parseInt(parser.nextText()));[/align]
[align=left]                              }[/align]
[align=left]                              [/align]
[align=left]                              [/align]
[align=left]                               break;[/align]
[align=left]
[/align]
[align=left]                         case XmlPullParser. END_TAG:[/align]
[align=left]                               if( "Sms".equals(tageName)){[/align]
[align=left]                                     smsList.add( sms);[/align]
[align=left]                                     sms= null;[/align]
[align=left]                                    [/align]
[align=left]                              }[/align]
[align=left]                              [/align]
[align=left]                              [/align]
[align=left]                               break;[/align]
[align=left]                        }[/align]
[align=left]                        [/align]
[align=left]                        [/align]
[align=left]                        [/align]
[align=left]                        [/align]
[align=left]                  }[/align]
[align=left]                  [/align]
[align=left]                   //继续往下解析[/align]
[align=left]                  eventType=parser.next();[/align]
[align=left]                  [/align]
[align=left]                  [/align]
[align=left]                  [/align]
            } catch (Exception
e) {
[align=left]               e.printStackTrace();[/align]
[align=left]            }[/align]
[align=left]            [/align]
[align=left]      [/align]
[align=left]             sms.toString();[/align]
[align=left]            [/align]
[align=left]      }[/align]
[align=left]      [/align]
[align=left]      [/align]
[align=left]  }[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]--------------------------------------------------------------------------------------------------[/align]
[align=left]
[/align]
[align=left]解析网络上xml文件和json文件:[/align]
[align=left]
[/align]

public class PersonService
{
[align=left]
[/align]
      public List<Person>
getPersonsByXML() throws Exception {
[align=left]            URL url = new URL("http://192.168.1.100:8080/05.Web/persons.xml" );[/align]
[align=left]            HttpURLConnection conn = (HttpURLConnection) url.openConnection();[/align]
[align=left]            conn.setConnectTimeout(3000);[/align]
[align=left]            [/align]
             int code
= conn.getResponseCode();
             if (code
== 200) {
[align=left]                  InputStream in = conn.getInputStream();[/align]
[align=left]                   return parseXML(in);[/align]
[align=left]            }[/align]
             throw new RuntimeException( "网络异常:
" + code);
[align=left]      }[/align]
[align=left]
[/align]
[align=left]      /**[/align]
[align=left]       * 解析网络上的 xml文件[/align]
[align=left]       * @param in[/align]
[align=left]       * @return[/align]
[align=left]       * @throws Exception[/align]
[align=left]       */[/align]
      private List<Person>
parseXML(InputStream in) throws Exception
{
[align=left]            XmlPullParser parser = Xml. newPullParser();[/align]
[align=left]            parser.setInput(in, "UTF-8");[/align]
[align=left]            [/align]
[align=left]            List<Person> list = new ArrayList<Person>();[/align]
[align=left]            Person p = null;[/align]
[align=left]            [/align]
             for ( int type
= parser.getEventType(); type != XmlPullParser.END_DOCUMENT; type = parser.next())
{
                   if (type
== XmlPullParser. START_TAG) {
                         if ( "person".equals(parser.getName()))
{
[align=left]                              p = new Person();[/align]
[align=left]                              String id = parser.getAttributeValue(0);[/align]
[align=left]                              p.setId(Integer. parseInt(id));[/align]
[align=left]                              list.add(p);[/align]
                        } else if ( "name".equals(parser.getName()))
{
[align=left]                              String name = parser.nextText();[/align]
[align=left]                              p.setName(name);[/align]
                        } else if ( "age".equals(parser.getName()))
{
[align=left]                              String age = parser.nextText();[/align]
[align=left]                              p.setAge(Integer. parseInt(age));[/align]
[align=left]                        }[/align]
[align=left]                  }[/align]
[align=left]            }[/align]
[align=left]            [/align]
[align=left]             return list;[/align]
[align=left]      }[/align]
[align=left]
[/align]
[align=left]      /**[/align]
[align=left]       * 解析网络上的 json文件[/align]
[align=left]       * @return[/align]
[align=left]       * @throws Exception[/align]
[align=left]       */[/align]
      public List<Person>
getPersonsByJSON() throws Exception {
[align=left]            URL url = new URL("http://192.168.1.100:8080/05.Web/persons.js" );[/align]
[align=left]            HttpURLConnection conn = (HttpURLConnection) url.openConnection();[/align]
[align=left]            conn.setConnectTimeout(3000);[/align]
[align=left]            [/align]
             int code
= conn.getResponseCode();
             if (code
== 200) {
[align=left]                  InputStream in = conn.getInputStream();[/align]
[align=left]                   return parseJSON(in);[/align]
[align=left]            }[/align]
             throw new RuntimeException( "网络异常:
" + code);
[align=left]      }[/align]
[align=left]
[/align]
      private List<Person>
parseJSON(InputStream in) throws Exception
{
[align=left]            ByteArrayOutputStream out = new ByteArrayOutputStream();[/align]
             byte[]
buffer = new byte[8192];
[align=left]             int length;[/align]
             while ((length
= in.read(buffer)) != -1)
[align=left]                  out.write(buffer, 0, length);[/align]
[align=left]            in.close();[/align]
[align=left]            out.close();[/align]
[align=left]            [/align]
[align=left]            String json = new String(out.toByteArray());[/align]
[align=left]            List<Person> list = new ArrayList<Person>();[/align]
            JSONArray arr = new JSONArray(json);                   //
把String封装成JSON数组
             for ( int i
= 0; i < arr.length(); i++) {         // 遍历JSON数组
                  JSONObject obj = arr.getJSONObject(i);           //
获取每个JSON对象
[align=left]                  Person p = new Person();                              [/align]
                  p.setId(obj.getInt( "id"));                             //
从JSON对象中获取"id"字段的值
[align=left]                  p.setName(obj.getString( "name"));[/align]
[align=left]                  p.setAge(obj.getInt( "age"));[/align]
[align=left]                  list.add(p);[/align]
[align=left]            }[/align]
[align=left]             return list;[/align]
[align=left]      }[/align]
[align=left]
[/align]
[align=left]}[/align]

[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]
[align=left]
[/align]

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: