这几天对xml这特殊的语言做了下了解分析,作为代表的解析是DOM ( Document Object Model)和SAX(Simple API
for XML)。
DOM ==>>这个东西,wiki上说的历史比较有趣---browser war,这里就不谈了。
DOM它的本质其实就是一个树的遍历,我们看下下面例子:
<class>
<student id=1>
<name>lee</name>
<age>20</age>
</student>
<student id=2>
<name>suse</name>
<age>21</age>
</student>
</class>
这简单的xml可以这样看:
class
+-------------||--------------+
| |
student.1 student.2
+-----||------+ +----||----+
| | | |
name age name age
| | | |
lee 20 suse 21
当DOM处理xml的时候,通过解析器,把xml文件构建成如上的树,存放在内存,可以随时对数进行读写,这样的设计
在使用上很方便实现上比较简单,但当xml文件足够的庞大时,这做法明显有缺陷。所以,另外一种代表性的xml解析
就是SAX。
SAX====>>从最初只为java设计,到普及多种语言,可以说明这种解析是高效并节省的。它不像DOM那样把整个xml
文件构建成树存放在内存,它是串流的解析。简单来说,要多少取多少;官方点来说就是,读到哪就触发到哪。
这是wiki的说法:一个实现SAX的解析器(也就是“SAX Parser”)以一个串流解析器的型式作用,拥有事件驱动API。
由使用者定义回调函数,解析时,若发生事件的话会被调用。
这个想法,和面向切面编程的思想相似。这好处也明显的减少的对内存的压力,也由于边读边触发处理,所以速度也
会比DOM解析的快。
每种方法都会有优缺点,SAX的缺点是单向性,过了就回不了头,像debug的时候,过了这个作用域就看不到参数的
信息。所以在各种应用各种要求下,DOM和SAX会分别满足各自需求。。。。
DOM的树的遍历在反复的操作下始终是不太看好,而SAX的单向性不够灵活。
对于xml的想法,
1.高度自定义的标签
2.高度自定义的作用;数据绑定,sql操作。。。
3.高度自定义的语法;
在出色的解析器下,是可以发挥极大的作用。