xml 解析

作者: 三木仔 | 来源:发表于2016-08-17 00:29 被阅读58次

今天电面又被虐了,综合上一次的面试,反思一下,虽然最近在准备面试,但是对很多东西都不思其解,深度不够。虐得我对生活丧失信心,要好好准备基础。

其中问到xml的解析方式及其原理,原理?? 一脸蒙蔽。。

Android xml解析常用方式:
java支持的两种是SAX、DOM两种,Android内置的Pull解析

  1. SAX (Simple API for XML) 是以从上往下的事件处理模式为核心,不需要读入整个文档,而是边读边解析,所以无法回退。事件驱动也就是回调的方式,实现接口。这里使用的是SAX2

(1) 文档解析开始时调用startDocument(),进行一些预处理

(2) 遇到<元素标签> ,调用startElements(String uri, String localname, String qname, Attributes attrs)
uri是命名空间,localname是前缀,qname是标签名字,atts是属性集合

    <website id = "1">
      xmlns:baidu="http://www.baidu.com">
    <baidu:website baidu:blog="hi.baidu.com">百度</baidu:website>  
    </website>

从上面可以看出两个节点:<website> <baidu:website>
对于 website中,uri为null,localname为website,qname也为website,可从attrs获取和getQname(0)为“id”和getValue(0)为id的值;

对于baidu:website中,uri为“http:// www.baidu.com",localname为”website“,qname为”baidu:website“
其中attrs中也可以获取getLocalname(0)为”blog“,getQname(0)为”baidu:blog“, getURI(0)为"http:// www.baidu.com",getValue(0)为"hi.baidu.com"

(3) 读到元素头部后,要获取具体的值,调用charatcter(char[] ch, int start, int length)
String content = new String(ch,start,length);

(4)遇到结尾元素,endElement(String uri, String localName, String qName)

  1. DOM
    是将整个文档读入内存,最后形成节点树,好处是能够重复读,还能实现增删改成,不足是当文档很大将会占用很大的内存空间,只适合较小的文档

  2. PULL方式:运行方式和SAX类似也是基于事件驱动。但是pull读取xml文件后触发相应的事件调用方法返回的是数字,而且对事件触发还需要由自己实现,不像SAX监听到元素的结束,可以随时停止。

XmlPullParser parser =Xml.newPullParser();  //获取解析器
parser.setInput(is, "UTF-8");// 输入流 、编码方式
int eventType = parser.getEventType();  
while (eventType != XmlPullParser.END_DOCUMENT) {
    switch (eventType) {  
        case XmlPullParser.START_DOCUMENT:  
            //文件开始
            break;
        case XmlPullParser.START_TAG: 
            parser.getName();//获取前指向的元素名称
            parser.getAttributeValue(int i);//获取当前元素的属性值
            parser.nextText());//获取当前元素的下一个文本节点的值  
            break;  
        case XmlPullParser.END_TAG: 
            break;
    }
    eventType = parser.next();  
}

参考文章:
http://blog.csdn.net/wssiqi/article/details/8239357
http://blog.csdn.net/liuhe688/article/details/6415593

相关文章

  • iOS解析XML

    2.0 XML解析 2.1 XML简单介绍 (1) XML:可扩展标记语言 (2) XML解析 2.2 XML解析...

  • iOS开发-XML解析

    一、 XML解析 1.1 XML简单介绍 (1) XML:可扩展标记语言 (2) XML解析 1.2 XML解析 ...

  • 3-XML解析

    3.0 XML解析 3.1 XML简单介绍 (1) XML:可扩展标记语言 (2) XML解析 3.2 XML解析...

  • XML、JSON解析

    XML解析 XML_GData解析 JSON解析

  • 05、网络解析

    解析:从事先规定好的格式中提取数据iOS开发常见的解析:XML解析,JSON解析 XML解析 XMl事例: XML...

  • Senior进阶 网络之数据解析之XML解析和JSON解析的用法

    Senior进阶 网络之数据解析之XML解析和JSON解析的用法 XML解析之SAX解析 XML解析之DOM解析 ...

  • XML

    NSXMLParser解析XML GDataXML解析XML

  • XML*

    目录 XML简介 XML基本语法 XML解析 * DOM解析   * DOM解析原理及工具   * DOM4J解析...

  • 面试相关

    1.Json解析与XML解析 Gson解析和FastJson ,FastJson解析效率高 XML解析,SAX解析...

  • 五、Groovy语法(五)json、xml解析

    Groovy数据解析 一、json解析 请求网络数据并解析 二、xml解析 groovy解析xml数据 groov...

网友评论

    本文标题:xml 解析

    本文链接:https://www.haomeiwen.com/subject/meopsttx.html