XML三种解析方式

第一种dom解析:

String xml = "<persons>" +
                    "<person>" +
                    "<name>amos</name>" +
                    "<age>30</age>" +
                    "</person>" +
                    "<person>" +
                    "<name>tom</name>" +
                    "<age>18</age>" +
                    "</person>" +
                    "</persons>";

            DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
            Document parse = builder.parse(new ByteArrayInputStream(xml.getBytes()));

            Element element = parse.getDocumentElement();

            NodeList nodes = element.getElementsByTagName("person");
            for (int i = 0; i < nodes.getLength(); i++) {
                NodeList person = nodes.item(i).getChildNodes();
                for (int j = 0; j < person.getLength(); j++) {
                    if (person.item(j) instanceof Element)
                        Log.d("TAG","name:" + person.item(j).getNodeName() + ",value:" + person.item(j).getTextContent());
                }
            }

第二种sax解析:

 SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();
 saxParser.parse(new ByteArrayInputStream(xml.getBytes()), new MyDefaultHandler());

class MyDefaultHandler extends DefaultHandler {

        String currentTag;

        @Override
        public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
            super.startElement(uri, localName, qName, attributes);
            currentTag = localName;
        }

        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException {
            super.characters(ch, start, length);
            String value = new String(ch, start, length); // 将当前TextNode转换为String
            Log.d("TAG","name:" + currentTag + ",value:" + value);
        }
    }

第三种pull解析:

    XmlPullParser xmlPullParser = XmlPullParserFactory.newInstance().newPullParser();
            xmlPullParser.setInput(new ByteArrayInputStream(xml.getBytes()), "UTF-8");
            int eventType = xmlPullParser.getEventType();
            boolean isEnd = false;
            while (!isEnd) {
                switch (eventType) {
                    case XmlPullParser.START_DOCUMENT:
                        Log.d("TAG","START_DOCUMENT---name:" + xmlPullParser.getName());
                        break;
                    case XmlPullParser.START_TAG:
                        if (xmlPullParser.getName().equals("name")) {
                            String name = xmlPullParser.nextText();
                            Log.d("TAG","name:" + xmlPullParser.getName() + ",value:" + name);
                        } else if (xmlPullParser.getName().equals("age")) {
                            String name = xmlPullParser.nextText();
                            Log.d("TAG","name:" + xmlPullParser.getName() + ",value:" + name);
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        Log.d("TAG","END_TAG---name:" + xmlPullParser.getName());
                        break;
                    case XmlPullParser.END_DOCUMENT:
                        Log.d("TAG","END_DOCUMENT---name:" + xmlPullParser.getName());
                        isEnd = true;
                        break;
                }
                eventType = xmlPullParser.next();
            }

原文地址:https://www.cnblogs.com/BruceV/p/12038476.html

时间: 2024-11-08 23:44:03

XML三种解析方式的相关文章

Xml的三种解析方式

XML的三种解析方式:DOM.SAX.PULL解析 废话不说上代码: package com.minimax.xmlparsedemo; import java.io.InputStream; import java.util.List; import android.os.Bundle; import android.app.Activity; import android.content.res.AssetManager; import android.util.Log; import an

Android学习之XML数据的三种解析方式以及生成XML文件

首先,我得声明,本博客的思想主要参考了此博客:http://blog.csdn.net/liuhe688/article/details/6415593 不过代码我自己一句句敲的 好了,首先讲一下解析XML的三种方式:(恕我粘贴一下哈) SAX解析器: SAX(Simple API for XML)解析器是一种基于事件的解析器,它的核心是事件处理模式,主要是围绕着事件源以及事件处理器来工作的.当事件源产生事件后,调用事件处理器相应的处理方法,一个事件就可以得到处理.在事件源调用事件处理器中特定方

JSON的三种解析方式

一.什么是JSON? JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON就是一串字符串 只不过元素会使用特定的符号标注. {} 双括号表示对象 [] 中括号表示数组 "" 双引号内是属性或值 : 冒号表示后者是前者的值(这个值可以是字符串.数字.也可以是另一个数组或对象) 所以 {"name": "Michael"} 可以理解为是一个包含name为Mich

【网络爬虫的三种解析方式】 -- 2019-08-08 18:01:21

原文: http://106.13.73.98/__/132/ 三种解析方式 正则解析 Xpath解析 BeautifulSoup解析 本文将详细为大家讲解三种聚焦爬虫中的数据解析方式. requests模块可实现数据爬取的流程 指定url 基于requests模块发起请求 获取响应对象中的数据 进行持久化存储 ???????其实,在上述流程中还需要较为重要的一步,就是在持久化存储之前需要进行指定数据解析.因为,在大多数情况下,我们都是指定去使用聚焦爬虫,也就是爬取页面中指定部分的数据值,而不是

【Android高级】XMl文件的DOM、SAX、PULL三种解析方式全解

本来一直忙着期末考试的复习,但复习挺无聊的,偶然看到xml的解析方法,虽然以前做过,但感觉不是很熟悉了,所以抽点时间一口气把三种方式都复习了遍.这三种方法中DOM最耗内存,因为它是把整个文件加载进去然后进行分类整理的,PULL和SAX类似,只是SAX要用到一个解析类,类中的主要三个方法完成内容的解析,而PULL方法是Android特有的,根据获得的标签判断并解析,这也是安卓中最常使用的方法. 接下来给大家复习下,因为我觉得看代码更容易明白,讲解的就不多了. 首先我们准备好我们要解析的资源文件和封

XML基础+Java解析XML +几种解析方式的性能比较

XML基础+Java解析XML 一:XML基础 XML是什么: 可扩展的标记语言 XML能干什么: 描述数据.存储数据.传输(交换)数据. XML与HTML区别: 目的不一样 XML 被设计用来描述数据,其焦点是数据的内容. HTML 被设计用来展示数据,其焦点是数据的外观. HTML可以不关闭标签(即标签可以不成对出现),但XML必须关闭标签(即标签必须成对出现). HTML中的标签标识文本如何展示,而XML中的标签标识文本是什么含义(什么类型的文本). XML文档节点类型 u     文档(

SpringMVC上传文件的三种解析方式

springMVC上传文件后,在action解析file文件的三种方式. jsp页面的写法: <form action="parserUploadFile1" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit"

Qt中三种解析xml的方式

在下面的随笔中,我会根据xml的结构,给出Qt中解析这个xml的三种方式的代码.虽然,这个代码时通过调用Qt的函数实现的,但是,很多开源的C++解析xml的库,甚至很多其他语言解析xml的库,都和下面三种解析xml采用相同的原理,所以就算你不是学习qt,也可以大致参看一下代码,对三种解析方式有一种大致的感觉. 先给出xml如下: <?xml version="1.0" encoding="utf-8"?> <school> <teach

xml中俩种解析方式

两种解析方式 1.from xml.etree import ElementTree as ET 利用ElementTree模块下的xml方法可以把一个字符串类型的东西转换成Element类,从而利用Element类下面的方法 xml(字符串)解析方式只能读不能写 from xml.etree import ElementTree as ET # 打开文件,读取XML内容 str_xml = open('xo.xml', 'r').read() # 将字符串解析成xml特殊对象,root代指xm