《android用SAX解析xml》

主要的Acivityjava

package com.xml.xml;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
 * 主Activity
 * @author 呂檀溪
 *
 */
public class MainActivity extends Activity {
 private Button but;
 public static List<Map<String, String>> list=new ArrayList<Map<String,String>>();
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  but=(Button) findViewById(R.id.but);
  
  but.setOnClickListener(new ButtonClick());
 }
 class ButtonClick implements OnClickListener{
  @Override
  public void onClick(View view) {
    //獲得產生SAX的生產工廠
    SAXParserFactory  factory=SAXParserFactory.newInstance();
    try {
     //獲得獲取XML的對象
     XMLReader reader=factory.newSAXParser().getXMLReader();
     //綁定讀書數據的類
     reader.setContentHandler(new MySaxRead());
     //獲取須要讀取的.xml文件
     reader.parse(new InputSource(MainActivity.class.getClassLoader().getResourceAsStream("user.xml")));
     //綁定數據
     Intent intent=new Intent();
     intent.putExtra("list", (Serializable)list);
     intent.setClass(MainActivity.this, ArrayActivity.class);
     startActivity(intent);
    } catch (Exception e) {
     e.printStackTrace();
    } 
  }
  
 }
}

解析xml的Acitityandroid

package com.xml.xml;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
 * 讀取xml文件的類,繼承了DefaultHandler
 * 這裏的五個方法都是從DefaultHandler重寫的
 * @author 呂檀溪
 *
 */
public class MySaxRead extends DefaultHandler{
 private String tagName;
 private List<Map<String, String>> list=new ArrayList<Map<String,String>>();
 private  String name;
 //結束Document的方法,並給MainActivity連的list賦值
 @Override
 public void endDocument() throws SAXException {
  MainActivity.list=this.list;
  
 }
 //結束標籤的讀取,並給結束標籤添加一個標記
 @Override
 public void endElement(String uri, String localName, String qName)
   throws SAXException {
  tagName=File.separator+localName;
 }
 //開始讀取內容
 @Override
 public void startDocument() throws SAXException {
 }
 //開始讀取標籤
 @Override
 public void startElement(String uri, String localName, String qName,
   Attributes attr) throws SAXException {
  //獲取沒有前綴的標籤名
  tagName=localName;
  //判斷是不是咱們須要的標籤
  if("worker".equals(tagName)){
   //循環獲得標籤的屬性
   for (int i = 0; i < attr.getLength(); i++) {
    System.out.println(attr.getLocalName(i)+"=="+attr.getValue(i));
   }
  }
 }
 
 //獲得便籤的值
 @Override
 public void characters(char[] ch, int start, int length)
   throws SAXException {
  if("name".equals(tagName)){
   name=new String(ch, start, length);
  }else if("age".equals(tagName)){
   //這個步驟很關鍵,由於這裏沒作好就會出現空值的現象;這裏是先把name的值存在全局變量中
   //而後在根據age的非空值一塊兒存進map集合
   Map<String, String> map=new HashMap<String, String>();
   String age=new String(ch, start, length);
   map.put("name", name);
   map.put("age", age);
   list.add(map);
  }
 }
 
}

列表顯示的Activityapp

package com.xml.xml;
import java.util.List;
import java.util.Map;
import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.SimpleAdapter;
/**
 * 作一個列表顯示
 * @author 呂檀溪
 *
 */
public class ArrayActivity extends ListActivity{
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.array);
  //獲得傳過來獲得Intent
  Intent intent=getIntent();
  //獲得在Intent綁定數數據
  List<Map<String, String>> list=(List<Map<String, String>>) intent.getSerializableExtra("list");
  //給SimpleAdapter綁定須要顯示的數據,以及制定顯示的規範
  SimpleAdapter adapter=new SimpleAdapter(this, list, R.layout.user, new String[]{"name","age"}, new int[]{R.id.name,R.id.age});
  setListAdapter(adapter);
 }
 
}

主要的佈局文件main.xmlide

<RelativeLayout xmlns:android="
http://schemas.android.com/apk/res/android
"

    xmlns:tools="
http://schemas.android.com/tools
"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context=".MainActivity" >

 <Button 

     android:id="@+id/but"

     android:layout_height="wrap_content"

     android:layout_width="wrap_content"

     android:text="解析XML"

     />

</RelativeLayout>

配置須要列表顯示的文件佈局

一、申明列表文件array.xmlthis

<LinearLayout xmlns:android="
http://schemas.android.com/apk/res/android
"

    xmlns:tools="
http://schemas.android.com/tools
"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

  >

  <ListView 

      android:id="@+id/android:list"

      android:layout_height="wrap_content"

      android:layout_width="fill_parent"

      android:drawSelectorOnTop="false"

      android:scrollbars="vertical"

      ></ListView>

</LinearLayout>

二、數據顯示文件user.xmlcode

<LinearLayout xmlns:android="
http://schemas.android.com/apk/res/android
"

    xmlns:tools="
http://schemas.android.com/tools
"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="horizontal" 

  >

 

  <TextView 

      android:id="@+id/name"

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

      android:layout_marginLeft="20pt"

      />

  <TextView 

      android:id="@+id/age"

      android:layout_width="wrap_content"

      android:layout_height="wrap_content"

       android:layout_marginLeft="20pt"

      />

</LinearLayout>

註冊Activity的文件AndroidManifest.xmlxml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.xml.xml"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="18" />
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.xml.xml.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.xml.xml.ArrayActivity"></activity>
    </application>
</manifest>

最後是須要解析的xml文件user.xml,放在src文件目錄下對象

<?xml version="1.0" encoding="utf-8"?>

<workers>

    <worker id="001" nameMy="001x">

        <name>邁克兒.喬丹</name>

        <age>17</age>

    </worker>

    <worker id="002" nameMy="002x">

        <name>周杰倫</name>

        <age>18</age>

    </worker>

</workers>
相關文章
相關標籤/搜索