`
童梦新苑
  • 浏览: 41088 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Android Xml解析

 
阅读更多

学习Android的朋友欢迎加入:群 59324839(QQ)

XML文件解析

Xml文件解析

SAX(事件驱动)//1:Element Node  2:text Node

       <?xml version="1.0" encoding="UTF-8" ?> --(start document)--1

<persons>-------------------------------------(start Element)------2

<person>

<person id="23">

  <name>liming</name>

  <age>30</age>

  </person>

<person>

<person id="20">

  <name>lixiangmei</name>

  <age>25</age>

  </person>

  </persons>

 

说明:事件驱动---流式处理

         1:startDocutment();

                   当遇到文档的开头的时候调用这个方法,可以在其中做一些预处理的工作

         2endDocument();

                   1想对应,在其中可以做一些善后的处理

         3startElement(String namespaceURI, String localName, String qName, Attributes atts)

            namespaceURI命名空间(如:<jsp:include>中的jsp

            localName不带命名空间的前缀标签名  (如:<jsp:include>中的include)

            qName: 带命名空间的前缀标签名  (如:<jsp:include>中的jsp:include)

            atts可以通过其得到所有属性与值

         4endElements(String url, String localName, String name)

            3对应,不同的是在结束标签的时候进行调用

         5characters(char[] ch, int start, int length)—文本Node事件

                   用于处理在xml文件中读到的内容,第一个参数为文件的字符串内容,后面两个参数是读到的字符串在这个数组的起始位置和长度,使用newStringch,start,length)就可以得到内容

 

实现步骤:

         1SAXParserFactory factory = SAXParserFactory.newInstance();

            SAXParser parser = factory.newSAXParser();

                   Parser.parse(inputStream,handler);

 

         2实现handler

                   步骤:

                            1extends DefaultHandler(list tag)

                                     重写:[1]characters [2]startDoucment [3]startElement [4]endElement

 

DOM(文件树内存消耗大)

         优点:xml代码直观,

<?xml version="1.0" encoding="UTF-8" ?> --(start document)--1

<persons>-------------------------------------(start Element)------2

<person>

<person id="23">

  <name>liming</name>

  <age>30</age>

  </person>

<person>

<person id="20">

  <name>lixiangmei</name>

  <age>25</age>

  </person>

  </persons>

实现步骤:

         1public static List<Person> getPersons(InputStream inStream) throws Throwable{

                   List<Person> persons = new ArrayList<Person>();

                   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

                   DocumentBuilder builder = factory.newDocumentBuilder();

                   Document documnet = builder.parse(inStream);

                   Element root = documnet.getDocumentElement();

                   NodeList personNodes = root.getElementsByTagName("person");

                   for(int i=0 ; i < personNodes.getLength(); i++){

                            Person person = new Person();

                            Element personElement = (Element)personNodes.item(i);

                            person.setId(new Integer(personElement.getAttribute("id")));

                            NodeList personChilds = personElement.getChildNodes();

                            for(int y=0 ; y < personChilds.getLength(); y++){

                                     if(personChilds.item(y).getNodeType()==Node.ELEMENT_NODE){//判断当前节点是否是元素类型节点

                                               Element childElement = (Element)personChilds.item(y);

                                               if("name".equals(childElement.getNodeName())){

                                                        person.setName(childElement.getFirstChild().getNodeValue());

                                               }else if("age".equals(childElement.getNodeName())){

person.setAge(new Short(childElement.getFirstChild().getNodeValue()));

                                               }

                                     }

                            }

                            persons.add(person);

                   }

                   return persons;

         }

 

PULL解析

                  public static List<Person> getPersons(InputStream inStream) throws Throwable{

                   List<Person> persons = null;

                   Person person = null;

                   XmlPullParser parser = Xml.newPullParser();

                   parser.setInput(inStream, "UTF-8");

                   int eventType = parser.getEventType();//产生第一个事件

                   while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束事件

                            switch (eventType) {

                            case XmlPullParser.START_DOCUMENT:

                                     persons = new ArrayList<Person>();

                                     break;

        

                            case XmlPullParser.START_TAG:

                                     String name = parser.getName();//获取解析器当前指向的元素的名称

                                     if("person".equals(name)){

                                               person = new Person();

                                               person.setId(new Integer(parser.getAttributeValue(0)));

                                     }

                                     if(person!=null){

                                               if("name".equals(name)){

                                                        person.setName(parser.nextText());//获取解析器当前指向元素的下一个文本节点的值

                                               }

                                               if("age".equals(name)){

                                                        person.setAge(new Short(parser.nextText()));

                                               }

                                     }

                                     break;

                                    

                            case XmlPullParser.END_TAG:

                                     if("person".equals(parser.getName())){

                                               persons.add(person);

                                               person = null;

                                     }

                                     break;

                            }

                            eventType = parser.next();

                   }

                   return persons;

         }

Xml文件解析总结:

         SAX:(通过相关Factory得到);

                   如:parser对象

                   Parser.Parser(InStream,DefaultHandler);

其中最为主要的就是这个DefaultHandler;我们通过一个内部类(由于android考虑的内存方面的问题,所以一般使用内部类)进行实现;

其中重写一下几个方法:

         1startElement()  endElement()  startDocument()  Characters()

         2:然后就是不同的事件进行不同的处理

 

         PULL(直接通过Xml得到对象):parser为解析对象;主要得到一个EventType():事件类型

                   根据这个时间类型在最后做循环:Tag = parser.next();

         元素操作:1:得到节点名—parser.getName();

                            2:得到节点内容(Textparser.nextText();

                            3:得到节点中属性的值:parser.getAttributeValue(index);

分享到:
评论

相关推荐

    Android xml 解析工具类

    Android XML 解析工具类 Android XML 解析工具类是一个功能强大且实用的工具类,提供了多种方法来解析 XML 文档。该工具类提供了四种方法来获取 XML 节点的内容,分别是 getMarkString、getMarkString、...

    六,Android Xml解析

    XML解析是将XML文档转换为Java对象的过程,这对于Android应用程序的资源配置、布局定义以及数据交换至关重要。这篇博文将深入探讨Android中的XML解析机制,包括DOM、SAX和Pull解析器三种主要方法。 首先,我们来看...

    Android XML 解析笔记

    Android支持多种XML解析技术,包括DOM、SAX和Pull解析。每种方法都有其特定的优势和应用场景。 #### DOM解析XML DOM(Document Object Model)解析是一种将整个XML文档加载到内存中,并构建出一棵树状结构(称为DOM...

    Android XML 解析 写入

    本篇将详细探讨Android中的XML解析,特别是PULL解析方式,并讲解如何进行XML的写入操作。 ### 1. Android XML解析概述 XML解析器分为两种主要类型:DOM(Document Object Model)和PULL(Pull Parser)。DOM解析器...

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

    Android系统提供了三种主要的XML解析方式:DOM(Document Object Model)、PULL(Pull Parser)和SAX(Simple API for XML)。每种方法都有其独特的特性和应用场景,下面将详细介绍这三种XML解析方式。 1. DOM解析...

    Android XML解析源码

    解析安卓的strings xml colors xml dimens xml等 共4个方法 String[] getStringArray InputStream String String getString InputStream String String getColor InputStream String String getDimens ...

    android XML解析源码

    本篇文章将深入探讨Android系统中的XML解析源码,包括DOM、SAX和Pull解析器的工作原理。 一、XML解析方式 1. DOM解析:Document Object Model(DOM)解析器将整个XML文档加载到内存中,形成一个树形结构,称为DOM...

    android xml pull解析示例

    在Android系统中,XML Pull解析是一种轻量级且高效的解析XML文档的方法,它允许应用程序按需读取XML文档的节点,而无需加载整个文档到内存中。以下是关于Android XML Pull解析的详细知识讲解。 1. **XML Pull解析器...

    android XMl 解析神奇xstream 一

    在Android 10中,XML解析相关的优化和更新包括对XML解析器性能的改进,以及对Android Jetpack库的更新,这些库可能包含了对XStream或其他XML解析库的依赖。 总的来说,XStream作为一个强大的XML解析工具,为Android...

    Android XML解析

    本文将深入探讨Android系统中的XML解析技术,包括DOM(Document Object Model)、SAX(Simple API for XML)和PullParser解析方式,并结合提供的资源进行详细说明。 **DOM解析** DOM解析器会将整个XML文档加载到...

    android下解析xml文件的demo

    在Android应用中,我们通常使用两种方式来解析XML:DOM(Document Object Model)解析器和SAX(Simple API for XML)解析器。 1. DOM解析: DOM解析器将整个XML文件加载到内存中,形成一个树形结构,可以方便地遍历...

    android xml解析1

    在JAVA中有两种常见的XML解析方式,DOM和SAX,DOM在解析的时候会将所有的数据一次性载入内存中进行解析,在数据量比较大的情况下,效率非常低.尤其在手机这种对内存和性能要求比较苛刻的设备里面这种方法并不可取. ...

    android xml多种解析生成

    Android XML 多种解析生成 Android 平台中,XML 文件解析和生成是非常重要的一部分。XML 文件可以存储和交换结构化数据,广泛应用于 Android 应用程序中。本文将介绍 Android 中使用多种解析和生成 XML 文件的方法...

    android XML三种解析及生成

    本文将深入探讨Android中的三种XML解析方式:SAX(Simple API for XML)、Pull Parser和DOM(Document Object Model),以及如何生成XML文件。 ### 1. SAX解析 SAX解析器是基于事件驱动的解析模型,它逐行读取XML...

    Android XML解析之SAX解析

    在Android中,有多种解析XML的方法,如DOM、SAX和Pull解析器。本篇主要讨论的是SAX解析,这是一种基于事件驱动的、高效的解析方式,适合处理大体积的XML文件。 SAX解析器逐行读取XML文档,当遇到开始标签、结束标签...

    android xml解析

    在本示例中,我们关注的是"android xml解析",这涉及到如何从XML文档中提取信息并将其应用于应用程序,比如获取天气预报。XML解析在Android中的应用广泛,包括读取配置文件、与服务器进行数据交互等。 Android提供...

    android xml文件解析 SAX

    SAX是一种事件驱动的XML解析器,它不会像DOM解析器那样将整个XML文档加载到内存中,而是逐行读取,遇到每个元素或属性时触发相应的事件回调。这种方式节省了内存,特别适合处理大型XML文件。 1. **SAX解析的基本...

    Android解析XML文件

    本例使用多种方式获取本地XML文件,还有通过url获取XML文件,使用Android内置的PULL解析器对XML文件进行解析,例子是解析我国各个省市。 《Android解析XML文件》博文路径:...

    android XML解析的三种方法源代码

    本教程将深入探讨Android中的三种主要XML解析方法:SAX(Simple API for XML)、Pull解析器以及DOM(Document Object Model),并提供源代码示例。 1. SAX解析: SAX是一种事件驱动的解析器,它不会将整个XML文档...

    androidXML解析实例代码

    总结起来,Android中的XML解析是一个重要的任务,SAX解析器提供了一种高效且节省内存的方式处理XML数据。通过创建一个事件处理器并重写其方法,我们可以根据需要定制解析过程,轻松地提取XML文件中的标签和数据。在...

Global site tag (gtag.js) - Google Analytics