定义好对象关系的类。
解析以Course为例子
public static List<Course> getCourseList(InputStream stream){
List<Course> list=new ArrayList<Course>();
//得到 DocumentBuilderFactory 对象, 由该对象可以得到 DocumentBuilder 对象
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
try {
//得到DocumentBuilder对象
DocumentBuilder builder=factory.newDocumentBuilder();
//得到代表整个xml的Document对象
Document document=builder.parse(stream);
//得到 "根节点"
Element root=document.getDocumentElement();
//获取根节点的所有items的节点
NodeList items=root.getElementsByTagName("item");
//遍历所有节点
for(int i=0;i<items.getLength();i++){
Course course=new Course();
Element item=(Element)items.item(i);
course.setName(item.getAttribute("name"));
//再枚举子节点
list.add(course);
}
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return list;
}
追问能不能采用pull 解析方式
追答都相似的
还是举例子
private List<Course> getData() {
List<Course> list = new ArrayList<Course>();
//XmlResourceParser xrp = getResources().getXml(R.xml.channels);
try {
// 直到文档的结尾处
while (xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
// 如果遇到了开始标签
if (xrp.getEventType() == XmlResourceParser.START_TAG) {
String tagName = xrp.getName();// 获取标签的名字
if (tagName.equals("course")) {
Course course= new Course;
course.setName( xrp.getAttributeValue(null, "name") );// 通过属性名来获取属性值
//再处理course的子节点
list.add(course);
}
}
xrp.next();// 获取解析下一个事件
}
} catch (XmlPullParserException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return list;
}