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