Android Developer里的资料:http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
可参考:
http://www.cnblogs.com/zhangdongzi/archive/2011/04/14/2016595.html
http://articles.csdn.net/badasanxingzhuanqu/jishuwenzhang_Android/2011/0703/300972.html
在Android中,可使用getResource.getXml(R.xml.X)来获得XmlPullParser对象(其实返回的是XmlResourceParser对象),得到xxp之后,xxp的状态为START_TAG。
通过对
①解析器的状态(标签等的状态)
②标签和属性、值的String
来解析XML
———————————— ① ——————————————
解析器状态(EventType)有以下几种:
<foo>HELLO, WORLD</foo>
1.(XmlPullParser.)START_DOCUMENT
2.START_TAG
3.TEXT ( 对应“HELLO, WORLD” )
4.END_TAG ( 个人理解为检测</foo>中的“/”,标签结束的标记 )
5.END_DOCUMENT
getEventType()用来获得当前解析器状态
xxp.next() 解析器解析下面一个内容(The method next() advances the parser to the next event)。
————————————— ② —————————————
示例:
<start des="123">
<map attribute="value" att2="v2"/>
<foo>HELLO, WORLD</foo>
</start>
1.xpp.getName()可以得到“start”"map""foo"这些字符串。
2.xpp.getAttributeCount()得到一个标签范围中的属性个数。如map中有两个属性。
3.xpp.getAttributeName得到属性名,范例中为“attribute”和“att2”。
4.xpp.getAttributeValue得到属性中的值,范例中为“value”和“v2”。
如果要得到"HELLO, WORLD",则需要使用xxp.getText()。
——————————————————————————
// 使用②中的XML
XmlPullParser xpp = getResources().getXml(R.xml.test);
//开始解析
while(xpp.getEventType()!=XmlPullParser.END_DOCUMENT){
if(xpp.getEventType()==XmlPullParser.START_TAG){
// 标签为“start”,最外层,为START_TAG时
if(xpp.getName.equals("start")){
getItems(xpp);
}
}
xpp.next();
}
// ————————————————————————————————————————————————————
private void getItems(xxp){
while(true){
xpp.next();// 解析下一个内容
// 退出循环的条件
if((xpp.getEventType()==XmlPullParser.END_TAG&&xpp.getName.equals("start"))
||xpp.getEventType()==XmlPullParser.END_DOCUMENT){
break;
}
// 依次解析标签内容
if(xpp.getEventType()==XmlPullParser.START_TAG){
// 标签为“map”
if(xpp.getName().equals("map")){
for(int i=0;i<xpp.getAttributeCount();i++){
// 遍历标签中的属性
if(xpp.getAttributeName(i).equals("attribute")){
//得到值:value
items.add(xpp.getAttributeValue(i));
}
if("att2"){...}
}
}
// 标签为“foo”
if(xpp.getName().equals("foo")) {
xpp.next();
if(xpp.getEventType()==XmlPullParser.TEXT){
//得到“HELLO, WORLD”
items.add(xpp.getText());
}
}
}
}
}