首頁 > 後端開發 > XML/RSS教程 > android pull 解析xml方式

android pull 解析xml方式

黄舟
發布: 2017-02-09 14:01:30
原創
1690 人瀏覽過

 pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 
   读取到xml的声明返回数字0 START_DOCUMENT; 
   读取到xml的结束返回数字1 END_DOCUMENT ; 
   读取到xml的开始标签返回数字2 START_TAG 
   读取到xml的结束标签返回数字3 END_TAG 
   读取到xml的文本返回数字4 TEXT 

   pull是开源的项目 源码下载地址http://www.xmlpull.org/ 

被解析的xml文档和android dom 解析xml方式 中的xml文档一样,命名为pullTest.xml.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

private String pullParseXml(InputStream inputStream) { 

        String result = ""

        //解析全部的xml 

        boolean isParse = true; 

        try

            // 创建一个xmlPullParser的工厂 

            XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 

            // 获取一个解析实例 

            XmlPullParser parse = factory.newPullParser(); 

            // 设置输入流的编码格式 

            parse.setInput(inputStream, "UTF-8"); 

            // 当前事件的类型 

            int eventType = parse.getEventType(); 

            while (XmlPullParser.END_DOCUMENT != eventType) { 

                // 当前节点的名称 

                String nodeName = parse.getName(); 

                switch (eventType) { 

                case XmlPullParser.START_TAG: 

                    if ("group".equals(nodeName)) { 

                        // 解析<group>节点中的属性值,getAttributeCount()获取属性的个数 

                        for (int i = 0; i < parse.getAttributeCount(); i++) { 

                            // 属性名称 

                            String groupName = parse.getAttributeName(i); 

                            // 属性名称对应的值 

                            String nameValue = parse.getAttributeValue(i); 

                            result = result + groupName + " = " + nameValue; 

                        

                        result += "\n"

                    } else if ("person".equals(nodeName)) { 

                        String personName = parse.getAttributeValue(0); 

                        String age = parse.getAttributeValue(1); 

                        result = result + "personName = " + personName 

                                + "age =" + age + "\n"

                    } else if ("chinese".equals(nodeName)) { 

                        //节点对应的文本 

                        String chinese = parse.nextText(); 

                        Pattern p = Pattern.compile("\\s*|\t|\r|\n"); 

                        Matcher m = p.matcher(chinese); 

                        chinese = m.replaceAll(""); 

   

                        result = result + "chinese = " + chinese; 

                    } else if ("english".equals(nodeName)) { 

                        String english = parse.nextText(); 

   

                        Pattern p = Pattern.compile("\\s*|\t|\r|\n"); 

                        Matcher m = p.matcher(english); 

                        english = m.replaceAll(""); 

   

                        result = result + "english = " + english + "\n"

                    

                    break

                case XmlPullParser.END_TAG: 

                    //在解析到一个group节点完成时,退出解析xml文件 

//                  if("group".equals(nodeName)){ 

//                      eventType = XmlPullParser.END_DOCUMENT;  

//                      isParse = false; 

//                  } 

                    break

                default

                    break

                

                //整个xml文件全部解析 

                if(isParse){ 

                    eventType = parse.next(); 

                

            

        } catch (XmlPullParserException e) { 

            // TODO Auto-generated catch block 

            e.printStackTrace(); 

        } catch (IOException e) { 

            // TODO Auto-generated catch block 

            e.printStackTrace(); 

        

   

        return result; 

    }

登入後複製

pull和sax不同最主要的体现在pull可以由客户随时终止解析xml.sax解析,只能从文档头一直读到尾,中间不能停止也不能对文件进行修改。直到解析完了整个文档才会返回。

1

2

3

4

5

//在解析到一个group节点完成时,退出解析xml文件 

//                  if("group".equals(nodeName)){ 

//                      eventType = XmlPullParser.END_DOCUMENT;  

//                      isParse = false; 

//                  }

登入後複製

只要满足退出解析的条件,只需要设置如下代码即可。

1

eventType = XmlPullParser.END_DOCUMENT;

登入後複製

pull解析方式用到的方法,大部分我都在代码中注释了。

完整项目下载:http://download.csdn.net/detail/nxh_love/3978483

以上就是 android pull 解析xml方式的内容,更多相关内容请关注PHP中文网(www.php.cn)!

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板