废话少说,直接上代码:

Pull 解析     跳至 [1] [2] [3] [全屏预览]

?
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
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.ArrayList;
importjava.util.List;
importorg.xmlpull.v1.XmlPullParser;
importorg.xmlpull.v1.XmlPullParserException;
importandroid.util.Xml;
importcom.leo.sax_parser.model.Person;
publicclass PullParser {
    publicstatic List<Person> readXML(InputStream inputstream)
            throwsXmlPullParserException, IOException {
        List<Person> persons = null;
        XmlPullParser parser = Xml.newPullParser();
        parser.setInput(inputstream,"UTF-8");
        inteventCode = parser.getEventType();
        Person person = null;
        while(eventCode != XmlPullParser.END_DOCUMENT) {
            switch(eventCode) {
            caseXmlPullParser.START_DOCUMENT:
                persons = newArrayList<Person>();
                break;
            caseXmlPullParser.START_TAG:
                if("person".equals(parser.getName())) {
                    person = newPerson();
                    person.setId(parser.getAttributeValue(0));
                     
                }elseif(person != null){
                    if("name".equals(parser.getName())) {
                        person.setName(parser.nextText());
                    }elseif("age".equals(parser.getName())){
                        person.setAge(Integer.parseInt(parser.nextText()));
                    }elseif("phoneNumber".equals(parser.getName())){
                        person.setPhoneNumber(Integer.parseInt(parser.nextText()));
                    }
                }
                break;
            caseXmlPullParser.END_TAG:
                    if("person".equals(parser.getName()) && person!= null) {
                        persons.add(person);
                        person =null;
                    }
                break;
            default:
                break;
            }
            eventCode = parser.next();
        }
        returnpersons;
    }
}

SAX 解析     跳至 [1] [2] [3] [全屏预览]

?
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
77
importjava.util.ArrayList;
importjava.util.List;
importorg.xml.sax.Attributes;
importorg.xml.sax.SAXException;
importorg.xml.sax.helpers.DefaultHandler;
importandroid.util.Log;
importcom.leo.sax_parser.model.Person;
publicclass SAX_handler extendsDefaultHandler {
    privatestatic final String Tag = "SAX_handler";
    privateList<Person> persons;
    privateString perTag;
    privatePerson person;
    publicList<Person> getPersons() {
        returnpersons;
    }
    @Override
    publicvoid startDocument() throwsSAXException {
//初始化用于存放person对象的persons,用于存放读取到的相应的信息。
        persons = newArrayList<Person>();
        Log.i(Tag,"startDocument");
    }
    @Override
    publicvoid startElement(String uri, String localName, String qName,
            Attributes attributes) throwsSAXException {
        if("person".equals(localName)) {
            for(inti = 0; i < attributes.getLength(); i++) {
                Log.i(Tag,"attributeName:"+ attributes.getLocalName(i)
                        +"attributeValue:"+ attributes.getValue(i));
                person = newPerson();
                person.setId(attributes.getValue(i));
            }
        }
        perTag = localName;
        Log.i(Tag, qName + "startElement***");
    }
    @Override
    publicvoid characters(char[] ch, intstart, intlength)
            throwsSAXException {
//       super.characters(ch, start, length);
        String data = newString(ch, start, length);
        if(!"".equals(data.trim())) {
            Log.i(Tag,"Content:"+ data);
        }
        if("name".equals(perTag)) {
            person.setName(data);
        }elseif ("age".equals(perTag)) {
            person.setAge(Integer.parseInt(data));
        }elseif ("phoneNumber".equals(perTag)) {
            person.setPhoneNumber(Integer.parseInt(data));
        }
    }
    @Override
    publicvoid endElement(String uri, String localName, String qName)
            throwsSAXException {
        Log.i(Tag, qName + "endElement");
        if(person != null&&"person".equals(localName)) {
            persons.add(person);
            person = null;
        }
        perTag = null;
    }
    @Override
    publicvoid endDocument() throwsSAXException {
        Log.i(Tag,"endDocument");
    }
}

Dom 解析     跳至 [1] [2] [3] [全屏预览]

?
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
importjava.io.IOException;
importjava.io.InputStream;
importjava.util.ArrayList;
importjava.util.List;
importjavax.xml.parsers.DocumentBuilder;
importjavax.xml.parsers.DocumentBuilderFactory;
importjavax.xml.parsers.ParserConfigurationException;
importorg.w3c.dom.Document;
importorg.w3c.dom.Element;
importorg.w3c.dom.Node;
importorg.w3c.dom.NodeList;
importorg.xml.sax.SAXException;
importandroid.util.Log;
importcom.leo.sax_parser.model.Person;
publicclass DomParser {
    privatestatic final String Tag = "DomParser";
    publicstatic List<Person> readXMLByDom(InputStream input)
            throwsParserConfigurationException, SAXException, IOException {
        List<Person> persons = newArrayList<Person>();
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        DocumentBuilder builder = factory.newDocumentBuilder();
        Document document = builder.parse(input);
        Element root = document.getDocumentElement();
        NodeList nodes = root.getElementsByTagName("person");
        for(inti = 0; i < nodes.getLength(); i++) {
            Element element = (Element) nodes.item(i);
            Person person = newPerson();
            person.setId(element.getAttribute("id"));
            NodeList childNodes = element.getChildNodes();
            Log.i(Tag, childNodes.getLength() + "");
            for(intj = 0; j < childNodes.getLength(); j++) {
                Node child = childNodes.item(j);
                if(child.getNodeType() != Node.ELEMENT_NODE) { // 解决getChildNodes().getLength()与实际不符的问题
                    continue;
                }
                Element childElement = (Element) child;
                Log.i("DomParser", childElement.getNodeName() + ":"
                        + childElement.getTextContent().trim());
                if("name".equals(childElement.getNodeName())) {
                    person.setName(childElement.getTextContent().trim());
                }elseif ("age".equals(childElement.getNodeName())) {
                    person.setAge(Integer.parseInt(childElement
                            .getTextContent().trim()));
                }elseif ("phoneNumber".equals(childElement.getNodeName())) {
                    person.setPhoneNumber(Integer.parseInt(childElement
                            .getFirstChild().getNodeValue()));
                }
            }
            persons.add(person);
        }
        returnpersons;
    }
}

adroid解析XML三种方式相关推荐

  1. 解析XML三种方式(PULL、SAX、DOM)

    本篇博客重点介绍Android中三种解析XML的方式,包括PULL.SAX.DOM,当然不止这些,还可以用第三方的jar包提供的解析,只是这三种在Android中比较常用吧.再顺便介绍一下Androi ...

  2. Android解析XML三种方式(PULL、SAX、DOM)

    本篇博客重点介绍Android中三种解析XML的方式,包括PULL.SAX.DOM,当然不止这些,还可以用第三方的jar包提供的解析,只是这三种在Android中比较常用吧.再顺便介绍一下Androi ...

  3. android xml解析的三种方式

    2019独角兽企业重金招聘Python工程师标准>>> 在android开发中,经常用到去解析xml文件,常见的解析xml的方式有一下三种:SAX.Pull.Dom解析方式.最近做了 ...

  4. XML解析的三种方式(dom,sax,dom4j)

    1.Dom解析: 要解析的xml文件内容: <?xml version="1.0" encoding="utf-8" standalone="n ...

  5. xml文件解析的三种方式

    SAX解析XML SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于Android等移动设备. SAX解析XML文件采用的是事件驱动,也就是说,它并不需要解析完整个文档,在按内容顺序解析 ...

  6. 爬虫之数据解析的三种方式

    一,正则表达式解析 re正则就不写了,前面已经写入一篇很详细的正则表达式模块了~ 而且,在爬虫中,下面两种方式用的多一些~ 正则表达式:https://www.cnblogs.com/peng104/ ...

  7. Python数据解析的三种方式

    一,正则表达式解析 在爬虫中,下面两种方式用的多一些~ 大致用法: pattern = re.compile('<dd>.*?board-index.*?>(\d+)</i&g ...

  8. 爬虫数据解析的三种方式

    一.正则表达式解析 常用正则表达式回顾:单字符:. : 除换行以外所有字符[] :[aoe] [a-w] 匹配集合中任意一个字符\d :数字 [0-9]\D : 非数字\w :数字.字母.下划线.中文 ...

  9. 爬虫之网络数据解析的三种方式---正则表达式、XPath数据解析库、BeautifulSoup数据解析库

    1.正则表达式 爬虫的四个主要步骤: 明确目标(要知道你准备取哪个范围或者网站上取搜索) 爬(将所有网站的内容全部爬下来) 取(取掉对我们没用的数据) 处理数据(按照我们想要的方式存储和使用) 什么是 ...

最新文章

  1. Redhat7开机图形或文字界面
  2. cuda runtime error (59) : device-side assert triggered when running transfer_learning_
  3. eclipsse 关闭 方法提示_MacOS10.15.7关闭AppStore右上角小红标提示及系统更新右上角小红标提示的方法...
  4. 数据挖掘:分享两个Pandas使用小陷阱
  5. cf1526 C Potions
  6. Intel的AVX2指令集解读
  7. [转载].NET开发常用的10条实用代码
  8. LINGO 11.0安装教程
  9. select2多选设置select多选,select2取值和赋值
  10. Unity2017安装
  11. 用计算机画频率分布直方图,频率分布直方图
  12. python-lambda(匿名函数)原理与应用
  13. java开发工具-->IDEA
  14. codeforce 427 C. Checkposts(tarjan 强连通分量)
  15. EIE稀疏矩阵乘法硬件模拟
  16. 大前端 - react - 服务端渲染 - Next.js
  17. stm32单片机屏幕一直闪_基于STM32单片机实现屏幕休眠后OLED屏幕滚动效果
  18. 操作系统形式化验证实践教程(7) - C代码的自动验证
  19. 如何在wpf中使用winform控件或者winform的自定义控件
  20. JSP与JavaScript的区别

热门文章

  1. MySQL有四种BLOB类型
  2. Python——利用sympy模块进行数学计算
  3. B. Orac and Models
  4. element 日期选择图标_element-ui 限制日期选择的方法(datepicker)
  5. 测试修改gcs_server_processes参数
  6. CentOS软件管理 - 编译安装
  7. 生产过程精确控制系统
  8. NPInter数据集的奇葩标号的出坑秘籍
  9. revit机电建模步骤中【电器配件】功能
  10. 【SinclairY/自存】pdf英文文献全文翻译方法