/**
* 解析XML文件
* @param is XML文件输入流
* @return 诗词的集合
* @throws XmlPullParserException
* @throws IOException
*/
public static List<Poem> readXML(InputStream is) throws XmlPullParserException, IOException{
List<Poem> poems = null;
Poem poem = null;
// 构造一个pull解析器
XmlPullParser parser = Xml.newPullParser();
// 设置解析的资源以及格式
parser.setInput(is,"utf-8");
int type = parser.getEventType();
while(type != XmlPullParser.END_DOCUMENT){
switch (type) {
case XmlPullParser.START_TAG:
// 当标签名为root时
if ("root".equals(parser.getName())) {
poems = new ArrayList<Poem>();
}else if ("node".equals(parser.getName())) {
poem = new Poem();
}else if ("title".equals(parser.getName())) {
poem.setTitle(parser.nextText());
}else if ("auth".equals(parser.getName())) {
poem.setAuth(parser.nextText());
}else if ("type".equals(parser.getName())) {
poem.setType(parser.nextText());
}else if ("content".equals(parser.getName())) {
poem.setContent(parser.nextText());
}else if ("desc".equals(parser.getName())) {
poem.setDesc(parser.nextText());
}
break;
case XmlPullParser.END_TAG:
if ("node".equals(parser.getName())) {
poems.add(poem);
poem = null;
}
break;
}
// 解析下一个
type = parser.next();
}
System.out.println("poems.size() = " + poems.size());
return poems;
}
// xml文件如下:
解析XML时,首先构造一个pull解析器,然后设置解析器的资源以及格式。
用一个循环来读取xml文件的每一个节点,用parser.getName()方法获取节点的名称,当节点名为root时,创建一个Poem的集合
当节点名为node时实例化一个Poem对象,然后跳到下一个节点
当节点名为title时,用parser.nextText())读取后面的文本,也就是aaaa,后面如下。。。。。。
如果<node>节点中有一个属性id,<node id="1">,可以通过parser.getAttributeValue(0)来获取id的值。