Android SAX 解析 XML

openkk 12年前發布 | 29K 次閱讀 Android Android開發 移動開發

下面是效果圖,代碼中有詳細解釋,

Android SAX 解析 XML

 res/raw/person.xml

<?xml version="1.0" encoding="UTF-8"?>
<persons>
    <person id="001">
        <name>張三</name>
        <age>22</age>
    </person>

    <person id="002">
        <name>李四</name>
        <age>23</age>
    </person>

    <person id="003">
        <name>王五</name>
        <age>24</age>
    </person>
</persons>

PersonHandler.java

public class PersonHandler extends DefaultHandler {
        private String preTAG;   
        private List<Person> personList; 
        private Person per; 

        public PersonHandler() { 
            super(); 
        } 
        public PersonHandler(List<Person> personList) { 
            super(); 
            this.personList = personList; 
        } 

    public void startDocument() throws SAXException {
        Log.i("Mimi---", "文檔開始"); 
        super.startDocument();
    }
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        preTAG=localName; 
        if ("person".equals(localName)) { 
            per=new Person();
            per.setId(new Integer(attributes.getValue(0)));
        } 
        super.startElement(uri, localName, qName, attributes);
    }

    public void endElement(String uri, String localName, String qName)
            throws SAXException {
        preTAG = "";
        if ("person".equals(localName)){
            personList.add(per);
            Log.i("Mimi---", "一個元素解析完成");
        }
        super.endElement(uri, localName, qName);
    }

    public void endDocument() throws SAXException {
        Log.i("Mimi---", "文檔結束");
        super.endDocument();
    }

    public void characters(char[] ch, int start, int length)
            throws SAXException {
        if ("name".equals(preTAG)) {
            per.setName(new String(ch, start, length));
            Log.i("name=", per.getName());
        } else if ("age".equals(preTAG)) {
            per.setAge(Integer.parseInt(new String(ch, start, length)));
            Log.i("age=", per.getAge()+"");
        }
        super.characters(ch, start, length);
    }
    public List<Person> getPersonList() {
        return personList;
    }
    public void setPersonList(List<Person> personList) {
        this.personList = personList;
    }

}

SAXActivity.java

public class SAXActivity extends Activity {
    Button btn;
    ListView listView;
    List<String> list=new ArrayList<String>();
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        btn=(Button) findViewById(R.id.button);
        listView=(ListView) findViewById(R.id.listView);
        btn.setOnClickListener(new OnClickListener(){
            public void onClick(View arg0) {
                List<Person> persons=parserXMl();
                for (Iterator iterator = persons.iterator(); iterator   .hasNext();) {
                    Person person = (Person) iterator.next();
                    list.add(String.valueOf("ID:"+person.getId()) + " 姓名: "
                            + person.getName() + " 年齡: " + person.getAge());
                }
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                        getApplicationContext(),
                        android.R.layout.simple_list_item_1,
                        list);
                listView.setAdapter(adapter);
            }
        });
    }

    private List<Person> parserXMl() 
    {
        List<Person> persons = new ArrayList<Person>();
        Person person = null;
        try {
            //創建解析器
            SAXParserFactory sax = SAXParserFactory.newInstance();
            XMLReader reader = sax.newSAXParser().getXMLReader();
            //為reader設置內容處理器
            reader.setContentHandler(new PersonHandler(persons));
            //開始解析文件
            reader.parse(new InputSource(getResources().openRawResource(R.raw.person)));
            //循環保存解析內容到persons
            for (Iterator iterator = persons.iterator(); iterator.hasNext();) {
                person = (Person) persons.iterator();
            }
            persons.add(person);
        } catch (Exception e) {
        }
        return persons;
    }
}

 

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!