XML文件的三种解析

1.mianActivity

 1 package com.example.xml_demo;
 2 
 3 import android.os.Bundle;
 4 import android.app.Activity;
 5 import android.content.Intent;
 6 import android.content.IntentFilter;
 7 import android.view.Menu;
 8 import android.widget.Button;
 9 import android.view.View;
10 import android.widget.SimpleAdapter.ViewBinder;
11 
12 public class MainActivity extends Activity implements View.OnClickListener{
13 private Button dom;
14 private Button sax;
15 private Button pull;
16 private Intent intent;
17     @Override
18     public void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         setContentView(R.layout.activity_main);
21         init();
22     }
23     private void init(){
24         dom=(Button)findViewById(R.id.dom);
25         sax=(Button)findViewById(R.id.sax);
26         pull=(Button)findViewById(R.id.pull);
27         dom.setOnClickListener(this);
28         sax.setOnClickListener(this);
29         pull.setOnClickListener(this);
30     }
31     
32     @Override
33     public void onClick(View v) {
34         // TODO Auto-generated method stub
35         switch(v.getId()){
36         case R.id.dom:
37             intent=new Intent(this,DomActivity.class);
38             startActivity(intent);
39             break;
40         case R.id.sax:
41             intent=new Intent(this,SaxActivity.class);
42             startActivity(intent);
43             break;
44         case R.id.pull:
45             intent=new Intent(this,PullActivity.class);
46             System.out.println("1111");
47             startActivity(intent);
48             break;
49         }
50     }
51 
52  
53 }

Dom解析:

  1 package com.example.xml_demo;
  2 
  3 import java.io.IOException;
  4 import java.io.InputStream;
  5 import java.net.URL;
  6 import java.net.URLConnection;
  7 
  8 import javax.xml.parsers.DocumentBuilder;
  9 import javax.xml.parsers.DocumentBuilderFactory;
 10 import javax.xml.parsers.ParserConfigurationException;
 11 
 12 import org.w3c.dom.Document;
 13 import org.w3c.dom.Element;
 14 import org.w3c.dom.Node;
 15 import org.w3c.dom.NodeList;
 16 import org.xml.sax.SAXException;
 17 
 18 import android.app.Activity;
 19 import android.content.Intent;
 20 import android.os.Bundle;
 21 import android.widget.TextView;
 22 
 23 public class DomActivity extends Activity{
 24 private TextView domshow;
 25     @Override
 26     protected void onCreate(Bundle savedInstanceState) {
 27         // TODO Auto-generated method stub
 28         super.onCreate(savedInstanceState);
 29         setContentView(R.layout.dom);
 30         Intent intent=getIntent();
 31         domshow=(TextView)findViewById(R.id.domShow);
 32         new DocThread().start();
 33         
 34     }
 35     class DocThread extends Thread{  //在异步线程进行解析
 36 
 37         @Override
 38         public void run() {
 39             try {System.out.println("dom线程开始");                                 //通过DocumentBuilderFactory
 40                 DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); //的静态方法newInstance()获得DocumentBuilderFactory对象   
 41                 DocumentBuilder builder=factory.newDocumentBuilder();//获得DocumentBuilder对象
 42                 String httpurl="http://192.168.0.110:8080/AndroidServelet/baidu.com"; //从tomcat服务器获取数据
 43                 URL url=new URL(httpurl);
 44                 URLConnection urlconnection=url.openConnection();//开链接获得URLConnection对象
 45                 InputStream in=urlconnection.getInputStream();//通过urlConnection的getInputStream()方法获得InputStream对象
 46                 System.out.println("in");
 47                 try {
 48                     Document docment= builder.parse(in);//通过builder的parse()方法获得Document对象
 49                     Element allelement = docment.getDocumentElement();//getDocumentElement()方法获得所有节点
 50                     NodeList nodes = allelement.getElementsByTagName("yingcai");//获得标签为yingcai的所有节点
 51                 System.out.println(nodes.getLength());
 52                     for(int i=0;i<nodes.getLength();i++){
 53                         Element element = (Element)nodes.item(i);
 54                         NodeList childNodes = element.getChildNodes();//获取第一个“yingcai”下的所有子节点
 55                         final int lenght=childNodes.getLength();
 56                         DomActivity.this.runOnUiThread(new Runnable() {
 57                             
 58                             @Override
 59                             public void run() {
 60                                 // TODO Auto-generated method stub
 61                                 domshow.append("\n所有子节点的个数:"+lenght);
 62                             }
 63                         });
 64                         
 65                         final String attribute = element.getAttribute("name");
 66                         String password = element.getAttribute("password");
 67                         DomActivity.this.runOnUiThread(new Runnable() {
 68                             
 69                             @Override
 70                             public void run() {
 71                                 // TODO Auto-generated method stub
 72                                 domshow.append("\nname的属性值:"+attribute);
 73                             }
 74                         });
 75                         
 76                         System.out.println("name的属性值:"+attribute);
 77                         System.out.println("yingcai"+i);
 78                         for(int j=0;j<lenght;j++){ //遍历yingcai里所有的子节点
 79                             final Short type = childNodes.item(j).getNodeType();
 80                             
 81                             DomActivity.this.runOnUiThread(new Runnable() {
 82                                 
 83                                 @Override
 84                                 public void run() {
 85                                     // TODO Auto-generated method stub
 86                                     domshow.append("\ntype:"+type);
 87                                 }
 88                             });
 89                             System.out.println(type);
 90                             if(type==Node.ELEMENT_NODE){//ELEMENT_NODE的值为1表示元素节点(3表示文本节点)
 91                                 final String name = childNodes.item(j).getNodeName();
 92                                 System.out.println("标签名:"+name);
 93                                 
 94                                 DomActivity.this.runOnUiThread(new Runnable() {
 95                                     
 96                                     @Override
 97                                     public void run() {
 98                                         // TODO Auto-generated method stub
 99                                         domshow.append("\n标签名:"+name);
100                                     }
101                                 });
102                                 final String value = childNodes.item(j).getFirstChild().getNodeValue();
103                                 System.out.println("双标签中插入的值:"+value);
104                                 
105                                 DomActivity.this.runOnUiThread(new Runnable() {
106                                     
107                                     @Override
108                                     public void run() {
109                                         // TODO Auto-generated method stub
110                                         domshow.append("\n双标签中插入的值:"+value);
111                                     }
112                                 });
113                             }
114                         }
115                     }
116                    } catch (SAXException e){
117                     e.printStackTrace();
118                     System.out.println("a:"+e.getMessage());
119                    }
120                     }catch (IOException e){
121                     e.printStackTrace();
122                     System.out.println("b:"+e.getMessage());
123                     }catch (ParserConfigurationException e){
124                         System.out.println("c:"+e.getMessage());
125                     e.printStackTrace();}
126             
127         }
128         
129     }
130 
131 }

 Sax解析:

  1 package com.example.xml_demo;
  2 
  3 import java.io.IOException;
  4 import java.io.InputStream;
  5 import java.util.ArrayList;
  6 import java.util.List;
  7 
  8 import javax.xml.parsers.ParserConfigurationException;
  9 import javax.xml.parsers.SAXParser;
 10 import javax.xml.parsers.SAXParserFactory;
 11 
 12 import org.xml.sax.Attributes;
 13 import org.xml.sax.SAXException;
 14 import org.xml.sax.helpers.DefaultHandler;
 15 
 16 import android.app.Activity;
 17 import android.os.Bundle;
 18 import android.widget.TextView;
 19 
 20 public class SaxActivity extends Activity{
 21 private TextView textview;
 22 private List<YingCai> list;
 23 
 24     @Override
 25     protected void onCreate(Bundle savedInstanceState) {
 26         // TODO Auto-generated method stub
 27         super.onCreate(savedInstanceState);
 28         setContentView(R.layout.dom);
 29         textview=(TextView)findViewById(R.id.domShow);
 30         new SaxTread().start();
 31     }
 32 class SaxTread extends Thread{
 33 
 34     @Override
 35     public void run() {
 36         // TODO Auto-generated method stub
 37         try {
 38         try {
 39         SAXParserFactory factory=SAXParserFactory.newInstance();
 40         SAXParser saxparser = factory.newSAXParser();
 41         InputStream in = getResources().getAssets().open("test.xml"); //获取assets文件夹里的test.xml文件
 42         saxparser.parse(in, new MyDefaultHandler());
 43         
 44         } catch (IOException e) {
 45             // TODO Auto-generated catch block
 46             e.printStackTrace();
 47         }    
 48         } catch (ParserConfigurationException e) {
 49             // TODO Auto-generated catch block
 50             e.printStackTrace();
 51         } catch (SAXException e) {
 52             // TODO Auto-generated catch block
 53             e.printStackTrace();
 54         }
 55         SaxActivity.this.runOnUiThread(new Runnable() {
 56             
 57             @Override
 58             public void run() {
 59                 for(int i=0;i<list.size();i++){
 60                     YingCai yingcai = list.get(i);
 61                     textview.append("标签的名字:"+yingcai.getname()+"\n");
 62                     textview.append("tag的值:"+yingcai.gettag()+"\n");
 63                     textview.append("flag的值:"+yingcai.getflag()+"\n");
 64                     System.out.println(yingcai.getpasswrod());
 65                     textview.append("passwrod的值:"+yingcai.getpasswrod()+"\n");
 66                 }
 67             }
 68         });
 69     
 70     }
 71     
 72 }
 73 class MyDefaultHandler extends DefaultHandler{
 74 private YingCai yingcai=null;
 75 private String tag=null;
 76 
 77     @Override
 78     public void startDocument() throws SAXException {
 79         // TODO Auto-generated method stub
 80         list=new ArrayList<YingCai>();
 81     }
 82 
 83     @Override
 84     public void startElement(String uri, String localName, String qName,
 85             Attributes attributes) throws SAXException {
 86         if("yingcai".equals(localName)){
 87             yingcai=new YingCai();
 88             yingcai.setname(attributes.getValue(0));
 89         }
 90         tag=localName;
 91     }
 92 
 93     @Override
 94     public void endElement(String uri, String localName, String qName)
 95             throws SAXException {
 96         if("yingcai".equals(localName)){
 97             list.add(yingcai);
 98         }
 99         tag=null;
100     }
101 
102     @Override
103     public void characters(char[] ch, int start, int length)
104             throws SAXException {
105         String vaule = new String(ch,start,length);
106         if("tag".equals(tag)){
107             yingcai.settag(vaule);}
108         else if("flag".equals(tag)){
109             yingcai.setflag(vaule);}
110         else if("passwrod".equals(tag)){
111             
112             yingcai.setpasswrod(vaule);
113         }
114     }
115     
116 }
117 }

Pull解析

  1 package com.example.xml_demo;
  2 
  3 import java.io.IOException;
  4 import java.io.InputStream;
  5 import java.util.ArrayList;
  6 import java.util.List;
  7 
  8 import org.xmlpull.v1.XmlPullParser;
  9 import org.xmlpull.v1.XmlPullParserException;
 10 
 11 import android.app.Activity;
 12 import android.content.Intent;
 13 import android.os.Bundle;
 14 import android.util.Xml;
 15 import android.widget.TextView;
 16 
 17 public class PullActivity extends Activity{
 18 private TextView textview;
 19 private InputStream in;
 20 private List<YingCai> list;
 21 private YingCai yingcai;
 22     @Override
 23     protected void onCreate(Bundle savedInstanceState) {
 24         // TODO Auto-generated method stub
 25         super.onCreate(savedInstanceState);
 26         setContentView(R.layout.dom);
 27         
 28         Intent intent = getIntent();
 29         textview=(TextView)findViewById(R.id.domShow);
 30         new PullThread().start();
 31         System.out.println("===============");
 32     }
 33     class PullThread extends Thread{
 34 
 35         @Override
 36         public void run() {
 37             // TODO Auto-generated method stub
 38             System.out.println("thread");
 39             XmlPullParser pullparser=Xml.newPullParser();  //初始化Pull,pullparser现在就类似Cursor一样,指针会不断的向下移动(通过next方法)
 40             try {
 41                 in=getResources().getAssets().open("test.xml"); //得到字节流
 42                 System.out.println("daxiao:"+in.available());
 43                 pullparser.setInput(in,"utf-8"); //装载字节流对象,并且设置xml的编码,要和xml中的编码一致
 44                 int eventtype = pullparser.getEventType(); //获取节点
 45                 while(eventtype!=XmlPullParser.END_DOCUMENT){
 46                     switch(eventtype){
 47                     case XmlPullParser.START_DOCUMENT:
 48                         
 49                         list=new ArrayList<YingCai>();
 50                         break;
 51                     case XmlPullParser.START_TAG:
 52                         System.out.println("START_TAG");
 53                         if("yingcai".equals(pullparser.getName())){
 54                             yingcai = new YingCai();
 55                             yingcai.setname(pullparser.getAttributeValue(0));
 56                             System.out.println("setname");} 
 57                         else if("tag".equals(pullparser.getName())){
 58                                 yingcai.settag(pullparser.nextText());
 59                                 System.out.println("settag");} 
 60                         
 61                         else if("flag".equals(pullparser.getName())){
 62                                 yingcai.setflag(pullparser.nextText());
 63                                 System.out.println("setflag");
 64                                 }
 65                         else if("passwrod".equals(pullparser.getName())){
 66                                 yingcai.setpasswrod(pullparser.nextText());
 67                                 System.out.println("setpasswrod");
 68                         }
 69                         break;
 70                     case XmlPullParser.END_TAG:
 71                         if("yingcai".equals(pullparser.getName())){
 72                         list.add(yingcai);}
 73                         break;
 74                     case XmlPullParser.TEXT:
 75                         }
 76                     eventtype = pullparser.next();
 77                     }
 78                 
 79                 
 80                 } catch (XmlPullParserException e) {
 81                     // TODO Auto-generated catch block
 82                     e.printStackTrace();
 83                     System.out.println("a:"+e.getMessage());
 84                 } catch (IOException e) {
 85                 // TODO Auto-generated catch block
 86                 e.printStackTrace();
 87                 System.out.println("b:"+e.getMessage());
 88             }
 89             PullActivity.this.runOnUiThread(new Runnable() {
 90                 
 91                 @Override
 92                 public void run() {
 93                     System.out.println("listsize:"+list.size());
 94                     
 95                     for(int i=0;i<list.size();i++){
 96                         YingCai yingcai = list.get(i);
 97                     
 98                         textview.append("name:"+yingcai.getname()+"\n");
 99                         textview.append("tag:"+yingcai.gettag()+"\n");
100                         textview.append("flag:"+yingcai.getflag()+"\n");
101                         textview.append("passwrod:"+yingcai.getpasswrod()+"\n");
102                     }
103                     
104                 }
105             });
106         }
107         
108     }
109 
110     }

YingCai类保存器

 1 package com.example.xml_demo;
 2 
 3 public class YingCai {
 4      private String name;
 5      private String passwrod="123";
 6      private String tag;
 7      private String flag;
 8 
 9      public void setname(String name) {
10          this.name=name;
11      }
12      public void setpasswrod(String passwrod) {
13          this.passwrod=passwrod;
14      }
15      public void settag(String tag) {
16          this.tag=tag;
17      }
18      public void setflag(String flag) {
19          this.flag=flag;
20      }
21     
22      
23      public String getname(){
24          return name;
25      }
26      public String getpasswrod(){
27          return passwrod;
28      }
29      public String gettag(){
30          return tag;
31      }
32      public String getflag(){
33          return flag;
34      }
35      
36     
37 }

 

posted on 2012-09-15 13:51  柠檬汽水  阅读(175)  评论(0)    收藏  举报

导航