您的位置:首页 > 其它

sax处理方式总结

2013-03-05 19:01 316 查看
SAX方式解析XML

SAX Simple API for XML API(application program interface)

xml 的 简单的应用接口

对于dom方式,需要将整个xml文档,转化成一个完成的DOM树,存在于内存中。

如果xml文档很大的话?会导致转化为DOM树的过程很费资源。而且这个树 会 很大。

SAX的处理XML的方式:

读取的速度快、

但是 sax只适合读取xml内容

因此,当我们需要快速的获得xml内容的时候 ,可以选择 SAX的处理方式,或者xml的文档内容很多的时候,也是可以使用SAX的方式。

PHP使用SAX来完成对xml内容的读取工作:

步骤:

1, 创建XML解析器

2, 去规定如何处理我们碰到的标签或数据(创建解析处理函数)

两种标签:开始标签 和 结束标签

一个数据:

3, 开始解析

4, 解析完成后 如何处理 或者 出现错误 如何处理?

可能用到的函数:

xml_parser_create();//创建一个xml解析器。参数是编码,返回值解析器,资源

xml_set_element_handler();//设置 元素(标签)的 处理函数,设置对开始标签的处理和对结束标签的处理。参数:1,当前的解析器资源2,处理开始标签的函数,3,处理结束标签的函数

xml_set_character_data_handler();//设置 数据 的 处理函数,设置一个数据处理函数

xml_parse();//开始解析xml

xml_error_string();//处理错误的函数

1,创建XML解析器

2,去规定如何处理我们碰到的标签或数据

处理标签:

还需要对需要的函数 start_element 与 end_element来进行定义

开始:

结束:

处理数据:

定义处理器名:

定义需要的函数 data_process

3 解析:

此时,每读到一个内容,一个标签或一个数据,都会调用相应的处理函数完成处理

4 错误的处理

如何判断发生了错误?

通过判断 xml_parser()的返回值 来判读是否发生错误。但是我们需要同时提供给xml_parser第三个参数,来告知我们的xml解析器,当期已经是最后一个xml的数据,否则解析器会认为还有数据需要处理,因此,会继续等待出而不是以认为 处理完毕抛出 错误。

当 发生错误时候,我们需要使用函数去获得这个错误信息

xml_get_error_code();//错误的代码 参数:解析器

xml_get_current_line_number();//错误产生的行数,参数:解析器

xml_get_current_column_number();//错误产生的列数 参数:解析器

xml_error_string();获得错误信息,参数为错误的代码:

输出的效果:

利用CDATA处理处理特殊符号和数据

只需要将我们的数据 使用CDATA 标识 包围起来即可

character data

cdata的开始标识:<![CDATA[

cdata的结束标识:]]>

一般在处理中文 或者 在数据内包含 需要被实体引用的字符时,可以采用CDATA数据的格式来处理

我们使用处理器,只获得需要的数据:(标题和作者)

由于我们在数据处理函数内,没有办法获得当前是哪个标签内的数据,因此我们应该在进入到某个标签的时候,做标识,然后我们在数据处理器中判断这个标识,从而 知道我们当前处理的是哪个数据

在开始标签中做 标识

使用一个全局变量,在两个函数内传递数据 做标识

在数据处理时 判断 标识:

DOM方式 与 SAX方式的异同?

1 DOM方式需要将所有的数据读取到内存,而 SAX方式不会

2 DOM需要将所有的节点处理好之后,再操作,而SAX 边读取节点 边操作

3 当xml文档结构有问题时,DOM没有办法解析成DOM树,但是SAX方式可以一直处理,知道错误的发生地。

4 SAX的方式能读数据,DOM可以做很多复杂的操作。SAX的方式处理快,适合处理大文档。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: