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 }
浙公网安备 33010602011771号