1 // 根据InputStream流解析 XML文件
2 private void getNewsFromStream(InputStream is){
3 // 1.创建XML pull 解析器 谷歌内置解析器
4 XmlPullParser xp = Xml.newPullParser();
5 try {
6 //2.指定解析器要解析的文件 和解析文件所用到的编码方式
7 xp.setInput(is,"utf-8");
8 //3.开始解析文件(在解析之前需要有 JavaBean,先创建JavaBean)
9
10 // 获取事件类型,通过事件类型 去判断当前解析的是什么节点
11 int type = xp.getEventType();
12 ArrayList<News> newsList=null;
13 News news=null;
14 while(type!=XmlPullParser.END_DOCUMENT){
15 // 通过解析不同的节点进行不同的操作
16 switch (type) {
17 case XmlPullParser.START_TAG:
18 // pull解析器的getName 是获取当前节点的名字。
19 if("newslist".equals(xp.getName())){
20 newsList = new ArrayList<News>();
21 }
22 else if("news".equals(xp.getName())){
23 news = new News();
24 }
25 else if("title".equals(xp.getName())){
26 try {
27 String title = xp.nextText();
28 news.setTitle(title);
29 } catch (IOException e) {
30 // TODO Auto-generated catch block
31 e.printStackTrace();
32 }
33 }
34 else if("comment".equals(xp.getName())){
35 try {
36 String comment = xp.nextText();
37 news.setComment(comment);
38 } catch (IOException e) {
39 // TODO Auto-generated catch block
40 e.printStackTrace();
41 }
42 }
43 else if("detail".equals(xp.getName())){
44 try {
45 String detail = xp.nextText();
46 news.setDetail(detail);
47 } catch (IOException e) {
48 // TODO Auto-generated catch block
49 e.printStackTrace();
50 }
51 }
52 else if("image".equals(xp.getName())){
53 try {
54 String imageurl = xp.nextText();
55 news.setImageurl(imageurl);
56 } catch (IOException e) {
57 // TODO Auto-generated catch block
58 e.printStackTrace();
59 }
60 }
61 break;
62 case XmlPullParser.END_TAG:
63 if("news".equals(xp.getName())){
64 newsList.add(news);
65 }
66 break;
67 }
68 try {
69 // 让解析器的指针后移,并返回事件类型
70 type = xp.next();
71 } catch (IOException e) {
72 // TODO Auto-generated catch block
73 e.printStackTrace();
74 }
75 }
76
77 } catch (XmlPullParserException e) {
78 // TODO Auto-generated catch block
79 e.printStackTrace();
80 }
81 }
82
83 }