安卓中不定层Xml的PULL解析

有时候我们需要用到不定层XML结构来传递参数,比如传递一组由外键关联的表。但是安卓给的正牌xml解析工具xmlpull方式却是逐行读取。肿么办?

以下为解决思路,核心思想是通过堆栈方式读取。

XML结构:
每个元素ObjectX都继承ArrayList<ObjectX>;为了懒省事,我用1,2,3来代替每行的xml开始,/1,/2,/3代替对应的结尾。我太懒了。

1

2

/2

3

4

5

/5

/4

/3

/1
6
/6
 
策略如下:
读取开头时,创建实例,并加入堆栈。
读取结尾时,将堆栈中的最后一项add到倒数第二项的子项,并将最后一项移出堆栈。
当堆栈中无子项时,将实例作为顶层加入输出队列。
 
 
OK,我们分步来验证下这种思路正确与否
A:堆栈:1
B:堆栈:1,2
C:堆栈:1,2。第一次发现结尾/2。则2、/2组成的完整xmlelement读取完毕,堆栈将移出2,并将2Add到1的子项。
D:堆栈:1,3
E:堆栈:1,3,4
F:堆栈:1,3,4,5
G:堆栈:1,3,4,5。发现结尾。则最后一项 add到倒数第二项4的子项,并将5移出堆栈。对比XML,5与/5却是是一对,没有配错
H:堆栈:1,3,4。发现结尾。则最后一项 add到倒数第二项3的子项,并将4移出堆栈。对比XML,4与/4却是是一对,没有配错
I:堆栈:1,3。发现结尾。则将最后一项 add到倒数第二项1的子项,并将3移出堆栈。对比XML,3与/3却是是一对,没有配错
J:堆栈:1。发现结尾,则准备将最后一项 add到倒数第二项,但是此时size为1,则1即为一个顶层。应移出堆栈,并列入到输出序列。
K:堆栈:6。
L:堆栈:6。发现结尾,则准备将最后一项 add到倒数第二项,但是此时size为1,则6也为一个顶层。应移出堆栈,并列入到输出序列。
 
程序结束。这样我们就可以得到一个包含<1  /1>  <6  /6>两个复杂结构的序列。


用堆栈的方式来解决好处在于并不需要额外的循环,只需要添加少许判断,不浪费资源。
复杂结构给我们的程序设计带来极大的便利,不必要再给每个“描述的对象”创建特定的类。而用一个通用的支持多层的类即可实现,给整个架构带来更多的柔性。
 
 
 
  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值