胡神

导航

XML文件解析 (下载)

  main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/hello"
    />
<Button
 android:id="@+id/parseButton"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="开始解析XML"
 />
</LinearLayout>

MyContentHandler.java

package mars.xml;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class MyContentHandler extends DefaultHandler {
 String hisname, address, money, sex, status;
 String tagName;

 public void startDocument() throws SAXException {
  System.out.println("````````begin````````");
 }

 public void endDocument()  throws SAXException {
  System.out.println("````````end````````"); 
 }

 public void startElement(String namespaceURI, String localName, String qName, Attributes attr)
         throws SAXException {
  tagName = localName;
  if (localName.equals("worker")) {
   //获取标签的全部属性
   for (int i = 0; i < attr.getLength(); i++) {
    System.out.println(attr.getLocalName(i) + "=" + attr.getValue(i));
   }
  }
 }

 public void endElement(String namespaceURI, String localName, String qName)
   throws SAXException {
  //在workr标签解析完之后,会打印出所有得到的数据
  tagName = "";
  if (localName.equals("worker")) {
   this.printout();
  }
 }
 public void characters(char[] ch, int start, int length)
   throws SAXException {
  if (tagName.equals("name"))
   hisname = new String(ch, start, length);
  else if (tagName.equals("sex"))
   sex = new String(ch, start, length);
  else if (tagName.equals("status"))
   status = new String(ch, start, length);
  else if (tagName.equals("address"))
   address = new String(ch, start, length);
  else if (tagName.equals("money"))
   money = new String(ch, start, length);
 }

 private void printout() {
  System.out.print("name: ");
  System.out.println(hisname);
  System.out.print("sex: ");
  System.out.println(sex);
  System.out.print("status: ");
  System.out.println(status);
  System.out.print("address: ");
  System.out.println(address);
  System.out.print("money: ");
  System.out.println(money);
  System.out.println();
 }

}

XMLActitity.java

package mars.xml;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.StringReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class XMLActitity extends Activity {
    /** Called when the activity is first created. */
 private Button parseButton ;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        parseButton = (Button)findViewById(R.id.parseButton);
        parseButton.setOnClickListener(new ParseButtonListener());
    }
 
 /**
  * 根据URL下载文件,前提是这个文件当中的内容是文本,函数的返回值就是文件当中的内容
  * 1.创建一个URL对象
  * 2.通过URL对象,创建一个HttpURLConnection对象
  * 3.得到InputStram
  * 4.从InputStream当中读取数据
  * @param urlStr
  * @return
  */
 public String download(String urlStr) {
  StringBuffer sb = new StringBuffer();
  String line = null;
  BufferedReader buffer = null;
  try {
   // 创建一个URL对象
   URL url = new URL(urlStr);
   // 创建一个Http连接
   HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
   // 使用IO流读取数据
   buffer = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
   while ((line = buffer.readLine()) != null) {
    sb.append(line);
   }
  } catch (Exception e) {
   e.printStackTrace();
  } finally {
   try {
    buffer.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return sb.toString();
 }
   
    class ParseButtonListener implements OnClickListener{

  @Override
  public void onClick(View v) {
   //HttpDownloader hd = new HttpDownloader();
   //String resultStr = hd.download("https://files.cnblogs.com/guoxinkun/work.xml");
   String resultStr = download("https://files.cnblogs.com/guoxinkun/work.xml");
   System.out.println(resultStr);
   try{
    //创建一个SAXParserFactory
    SAXParserFactory factory = SAXParserFactory.newInstance();
    XMLReader reader = factory.newSAXParser().getXMLReader();
    //为XMLReader设置内容处理器
    reader.setContentHandler(new MyContentHandler());
    //开始解析文件
    reader.parse(new InputSource(new StringReader(resultStr)));
   }
   catch(Exception e){
    e.printStackTrace();
   }
  }
     
    }
}

posted on 2011-05-06 11:40  胡神  阅读(5791)  评论(0编辑  收藏  举报