import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.util.Xml;
import android.view.Menu;
import com.bawei.bean.User;
public class MainActivity extends Activity {
private List<User> userlist;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pullParseXml();
Log.d("user", userlist.toString());
}
private void pullParseXml() {
//1.通过Xml的newPullParser方法获取一个对象XmlPullParser
XmlPullParser parser = Xml.newPullParser();
try {
//2.设置要解析的文件
parser.setInput(getAssets().open("contacts.xml"), "utf-8");
boolean isNOTEOF = true;//没有到文件结尾
String tagname = "";//记录节点名称
//3.开始解析文档--返回值是五种事件类型
int event = parser.getEventType();
User u = null;
//6.想办法把解析文档的代码循环起来
while(isNOTEOF){
//4.判断解析文档事件源属于哪一种事件类型
switch (event) {
case XmlPullParser.START_DOCUMENT://文档开始
//初始化动作
userlist = new ArrayList<User>();
break;
case XmlPullParser.START_TAG://节点开始
//获取节点名称
tagname = parser.getName();
if(tagname.equals("user")){
u = new User();
u.setId(parser.getAttributeValue(null, "id"));
u.setUname(parser.getAttributeValue(null, "uname"));
}
break;
case XmlPullParser.TEXT://文本内容
if(tagname.equals("phone")){
//取电话-文本内容
u.setPhone(parser.getText());
}else if(tagname.equals("mobil")){
u.setMobil(parser.getText());
}else if(tagname.equals("addr")){
u.setAddr(parser.getText());
}else if(tagname.equals("email")){
u.setEmail(parser.getText());
}
break;
case XmlPullParser.END_TAG://节点结束
tagname = parser.getName();
if(tagname.equals("user")){
userlist.add(u);
}
//在节点结束时,重新初始化节点名称(以防空节点内容覆盖正常节点文本内容)
tagname = "";
break;
case XmlPullParser.END_DOCUMENT://文档结束
//循环结束的标识,很关键,否则死循环
isNOTEOF = false;
break;
}
//5.接着解析下一行(一定不能忘记,否则程序不会往下执行)
event = parser.next();
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
以下是此xml文件
<root>
<resultcode>200</resultcode>
<reason>success</reason>
<result>
<item><id>242</id><catalog>中国文学</catalog></item><item><id>252</id><catalog>人物传记</catalog></item><item><id>244</id><catalog>儿童文学</catalog></item><item><id>248</id><catalog>历史</catalog></item><item><id>257</id><catalog>哲学</catalog></item><item><id>243</id><catalog>外国文学</catalog></item><item><id>247</id><catalog>小说</catalog></item><item><id>251</id><catalog>心灵鸡汤</catalog></item><item><id>253</id><catalog>心理学</catalog></item><item><id>250</id><catalog>成功励志</catalog></item><item><id>249</id><catalog>教育</catalog></item><item><id>245</id><catalog>散文</catalog></item><item><id>256</id><catalog>理财</catalog></item><item><id>254</id><catalog>管理</catalog></item><item><id>246</id><catalog>经典名著</catalog></item><item><id>255</id><catalog>经济</catalog></item><item><id>258</id><catalog>计算机</catalog></item>
</result>
<error_code>0</error_code>
</root>