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的方式处理快,适合处理大文档。
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的方式处理快,适合处理大文档。
相关文章推荐
- ASP.NET错误处理的方式(总结)
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- Java字节流和字符流的区别 (方法区别 操作基本单元区别 操作方式区别 处理数据类型区别) 之个人总结
- 首次结算和汇总不一致处理方式总结
- ASP.NET错误处理的方式(总结)
- Django运行方式及处理流程总结
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- [libexpat]_[XML处理]_[C/C++使用libexpat库以数据流(SAX模型)的方式读取(解析)大XML文件]
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- SylixOS中端模式处理方式总结
- Qt 处理XML 文档的三种方式简介——DOM、SAX、流处理
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- (五十七)android解析XML总结(SAX、Pull、Dom三种方式)
- POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解
- android解析XML总结(SAX、Pull、Dom三种方式)
- [libexpat]_[XML处理]_[C/C++使用libexpat库以数据流(SAX模型)的方式读取(解析)大XML文件]
- android解析XML总结(SAX、Pull、Dom三种方式) <转载>
- ASP.NET错误处理的方式(总结)
- ASP.NET错误处理的方式(总结)
- Java 内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结