PULL解析XML
org.wp.service
PULLPersonService
package org.wp.service;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import android.util.Xml;
import org.wp.domain.Person;
import org.xmlpull.v1.XmlPullParser;
public class PULLPersonService {
public static List<Person> readXml(InputStream inStream) throws Exception {
List<Person> persons = null;
// Android提供了Xml 用来得到XmlPull解析器
XmlPullParser parser = Xml.newPullParser();
// 将输入流传入 设定编码方式
parser.setInput(inStream, "UTF-8");
/**
* Pull读到xml后 返回数字
* 读取到xml的声明返回数字0 START_DOCUMENT
* 读取到xml的结束返回数字1 END_DOCUMENT
* 读取到xml的标签开始返回数字2 START_TAG
* 读取到xml的结束标签返回数字3 END_TAG
* 读取到xml的文本返回数字4 TEXT
*/
int eventCode = parser.getEventType();
// 只要这个事件返回的不是1 我们就一直读取xml文件
Person person = null;
while (eventCode != XmlPullParser.END_DOCUMENT) {
switch (eventCode) {
case XmlPullParser.START_DOCUMENT: {
// 文档开始事件
persons = new ArrayList<Person>();
break;
}
case XmlPullParser.START_TAG: {
// 开始元素
if ("person".equals(parser.getName())) {
person = new Person();
person.setId(new Integer(parser.getAttributeValue(0)));
} else if (person != null) {
// 如果当前元素的下一个元素是文本节点
// 就可以直接用nextText()这个方法来得到文本节点的内容
if ("name".equals(parser.getName())) {
person.setName(parser.nextText());
} else if ("age".equals(parser.getName())) {
person.setAge(new Short(parser.nextText()));
}
}
break;
}
case XmlPullParser.END_TAG: {
// 结束元素
if ("person".equals(parser.getName()) && person != null) {
persons.add(person);
person = null;
}
break;
}
}
// 没有结束xml文件就推到下个进行解析
eventCode = parser.next();
}
return persons;
}
}
org.wp.xml
PULLPersonServiceTest
package org.wp.xml;
import java.io.InputStream;
import java.util.List;
import android.util.Log;
import org.wp.domain.Person;
import org.wp.service.PULLPersonService;
import android.test.AndroidTestCase;
public class PULLPersonServiceTest extends AndroidTestCase {
private static final String TAG = "PULLPersonServiceTest";
public void testReadXml() throws Exception {
InputStream inStream = PULLPersonServiceTest.class.getClassLoader()
.getResourceAsStream("wp.xml");
List<Person> persons = PULLPersonService.readXml(inStream);
for (Person person : persons) {
Log.i(TAG, person.toString());
}
}
}
本文介绍了一个使用PULL解析器解析XML文件的Java示例。该示例展示了如何通过Android提供的XmlPullParser类来逐个读取XML标签,并将解析的数据封装到自定义的Person对象中。
1万+

被折叠的 条评论
为什么被折叠?



