总述:
Android有三种XML解析方式:SAX(即 Simple API for XML) ,DOM( 即 Document Object Model)和Android附带的PULL 解析器解析XML文件。
下面是偶对三种解析方式的理解摘记。
SAX:
SAX采用事件驱动解析方式,边读边解析,当前字符若符合某种事件定义,就触发对应的操作。所以不需要事先读取整个文档,具有占用内存小、解析速度快的优势。但因为SAX是自动将事件推入事件处理器进行处理,进行了封装,所以SAX解析一旦开始,就会一直执行到解析结束,中间不可人为控制解析的结束。
DOM:
DOM解析之前会先将文件完整读取到内存中,以树的结构存储,然后就能遍历出所有节点,获取到相关节点后就可以进行操作。正是因为DOM解析需要事先读取所有内容并存储,所以会占用很大的内存。
PULL:
PULL解析通SAX类似,同采用事件驱动解析方式,边读边解析,内存开销小。不过PULL方式更加灵活,它是非自动的,需要主动获取next事件继续解析,所以相对于SAX的封装,PULL允许随时结束解析过程,可以避免解析冗余信息。
总结:
对于Android移动设备,内存非常宝贵,建议采用SAX和PULL这两种方式解析XML文件。至于SAX和PULL的选择,则看有没有在XML解析中提前结束解析的需求。
Android有三种XML解析方式:SAX(即 Simple API for XML) ,DOM( 即 Document Object Model)和Android附带的PULL 解析器解析XML文件。
下面是偶对三种解析方式的理解摘记。
SAX:
SAX采用事件驱动解析方式,边读边解析,当前字符若符合某种事件定义,就触发对应的操作。所以不需要事先读取整个文档,具有占用内存小、解析速度快的优势。但因为SAX是自动将事件推入事件处理器进行处理,进行了封装,所以SAX解析一旦开始,就会一直执行到解析结束,中间不可人为控制解析的结束。
DOM:
DOM解析之前会先将文件完整读取到内存中,以树的结构存储,然后就能遍历出所有节点,获取到相关节点后就可以进行操作。正是因为DOM解析需要事先读取所有内容并存储,所以会占用很大的内存。
PULL:
PULL解析通SAX类似,同采用事件驱动解析方式,边读边解析,内存开销小。不过PULL方式更加灵活,它是非自动的,需要主动获取next事件继续解析,所以相对于SAX的封装,PULL允许随时结束解析过程,可以避免解析冗余信息。
总结:
对于Android移动设备,内存非常宝贵,建议采用SAX和PULL这两种方式解析XML文件。至于SAX和PULL的选择,则看有没有在XML解析中提前结束解析的需求。
PS:Android View树的解析采用的是PUll解析方式。后续更新demo。