xml 解析

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

其中问到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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 XML解析No29 【 XML:可拓展标记语言,语言和HTML类似,也是一种标记语言。 特点:标记是自定义...
    征程_Journey阅读 1,695评论 0 9
  • 一、绪论 上周工作需要了解项目的一些大体内容,结果在xml解析这一块看的迷迷糊糊的,所以在这里把学习到xm...
    cao健强阅读 4,121评论 1 7
  • 1. XML总结 1.1. XML简介 XML : 可扩展的标记语言。(和HTML非常类似的) 可扩展的。 自定义...
    Ethan_Walker阅读 3,140评论 0 12
  • 一、iOS 4种JSON数据解析方法详解 2013年09月10日⁄ 综合⁄ 共 9124字⁄ 字号小中大⁄评论关闭...
    lilinjianshu阅读 2,103评论 0 2
  • 项目地址:https://github.com/liaozhoubei/HttpAndParse XML是一种非常...
    宝塔山上的猫阅读 4,184评论 1 9