天天看點

android讀取xml 字元串,Android 如何解析Xml字元串

在Android平台上可以使用Simple API for XML(SAX) 、 Document Object Model(DOM)和Android附帶的pull解析器解析XML檔案。

下面是本例子要解析的XML檔案:itcast.xml

李明

30

李向梅

25

例子定義了一個javabean用于存放上面解析出來的xml内容, 這個javabean為Person,代碼:

public class Person {

private Integer id;

private String name;

private Short age;

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Short getAge() {

return age;

}

public void setAge(Short age) {

this.age = age;

}

}

Pull解析器解析XML檔案

Pull解析器的運作方式與 SAX 解析器相似。它提供了類似的事件,如:開始元素和結束元素事件,使用parser.next()可以進入下一個元素并觸發相應事件。事件将作為數值代碼被發送,是以可以使用一個switch對感興趣的事件進行處理。當元素開始解析時,調用parser.nextText()方法可以擷取下一個Text類型元素的值。

//讀取XML

public static List readXML(InputStream inStream) {

XmlPullParser parser = Xml.newPullParser();

try {

parser.setInput(inStream, "UTF-8");

int eventType = parser.getEventType();

Person currentPerson = null;

List persons = null;

while (eventType != XmlPullParser.END_DOCUMENT) {

switch (eventType) {

case XmlPullParser.START_DOCUMENT://文檔開始事件,可以進行資料初始化處理

persons = new ArrayList();

break;

case XmlPullParser.START_TAG://開始元素事件

String name = parser.getName();

if (name.equalsIgnoreCase("person")) {

currentPerson = new Person();

currentPerson.setId(new Integer(parser.getAttributeValue(null, "id")));

} else if (currentPerson != null) {

if (name.equalsIgnoreCase("name")) {

currentPerson.setName(parser.nextText());// 如果後面是Text元素,即傳回它的值

} else if (name.equalsIgnoreCase("age")) {

currentPerson.setAge(new Short(parser.nextText()));

}

}

break;

case XmlPullParser.END_TAG://結束元素事件

if (parser.getName().equalsIgnoreCase("person") && currentPerson != null) {

persons.add(currentPerson);

currentPerson = null;

}

break;

}

eventType = parser.next();

}

inStream.close();

return persons;

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

Resource Reference