动网论坛,站长建站首选,国内使用量最多的论坛软件 动网论坛官方技术讨论区 站长工具 申请属于您自己的免费论坛
首页 | 新闻资讯 | 网站运营 | 网络编程 | 数据库 | 服务器 | 网页设计 | 图像媒体 | 网络应用 | 搜索优化 | 资源下载 | 动网主机 | DVBOX
    本站内  互联网 ASP论坛  ASP.Net论坛  PHP论坛
  
   PHP → 阅读文章

 XML 解析函数库

作者来源: 
阅读 数 225 人次 , 2006-3-29 4:06:00 


xml (extensible markup language) 是一种资料文件转换的标准。详情请参考 http://www.w3.org/xml。
要使用本函数库,需先到 http://www.jclark.com/xml 取回 xml 的函数库,并且编译或安装。用 redhat linux 的用户可以到 http://www.guardian.no/~ssb/phpxml.html 取得 rpm 的格式档。之后要在编译 php 前加入 --with-xml 的配置选项。tommy@nashville.net 指出 (12-jan-1999) 若有问题,尚需在 /usr/local/include 放入 xmltok.h 及 xmlparse.h 二个 c 语言的标头档,或是设好环境变量。

目前的版本支持三种字符集:us-ascii、iso-8859-1 与 utf-8。至于 utf-16 字符集 php 尚未支持。

xml 有许多错误代码,如下

xml_error_none
xml_error_no_memory
xml_error_syntax
xml_error_no_elements
xml_error_invalid_token
xml_error_unclosed_token
xml_error_partial_char
xml_error_tag_mismatch
xml_error_duplicate_attribute
xml_error_junk_after_doc_element
xml_error_param_entity_ref
xml_error_undefined_entity
xml_error_recursive_entity_ref
xml_error_async_entity
xml_error_bad_char_ref
xml_error_binary_entity_ref
xml_error_attribute_external_entity_ref
xml_error_misplaced_xml_pi
xml_error_unknown_encoding
xml_error_incorrect_encoding
xml_error_unclosed_cdata_section
xml_error_external_entity_handling
和中文有关的信息可在中央研究院的 chinese xml now 网站看到。而和 xml 有关的术语则使用曾士熊先生所译的 sgml 名词英汉翻译表。

xml_parser_create: 初始 xml 解析器。
xml_set_object: 使 xml 解析器用类。
xml_set_element_handler: 配置元素的标头。
xml_set_character_data_handler: 建立字符资料标头。
xml_set_processing_instruction_handler: 建立处理指令标头。
xml_set_default_handler: 建立默认标头。
xml_set_unparsed_entity_decl_handler: 配置未解析实体宣告的标头。
xml_set_notation_decl_handler: 配置记法宣告的标头。
xml_set_external_entity_ref_handler: 配置外部实体参引的标头。
xml_parse: 解析 xml 文件。
xml_get_error_code: 取得 xml 错误码。
xml_error_string: 取得 xml 错误字符串。
xml_get_current_line_number: 取得目前解析的行号。
xml_get_current_column_number: 获知目前解析的第几字段。
xml_get_current_byte_index: 取得目前解析为第几个位组。
xml_parser_free: 释放解析占用的内存。
xml_parser_set_option: 配置解析使用的选项。
xml_parser_get_option: 取得解析使用的选项。
utf8_decode: 将 utf-8 码转成 iso-8859-1 码。
utf8_encode: 将 iso-8859-1 码转成 utf-8 码。

xml_parser_create
初始 xml 解析器。
语法: int xml_parser_create(string [encoding]);
返回值: 整数
函数种类: 资料处理
内容说明: 本函数用来初始化一个新的 xml 解析器。参数 encoding 可省略,为 xml 使用的字符集,默认值为 iso-8859-1,其它尚有 us-ascii、utf-8 二种。成功则返回 parser 代码供其它函数使用,失败则返回 false 值。

xml_set_object
使 xml 解析器用类。
语法: void xml_set_object(int parser, object &object);
返回值: 无
函数种类: 资料处理
内容说明: 本函数让解析器能使用类的方式,值得注意的是这个函数在 php 4.0 以上的版本才可使用。参数 parser 为 xml_parser_create() 所返回的解析代码。参数 &object 是类本身的指针。
使用范例
<?php
class xml {
var $parser;
function xml() {
$this->parser = xml_parser_create();
xml_set_object($this->parser,&$this);
xml_set_element_handler($this->parser,"tag_open","tag_close");
xml_set_character_data_handler($this->parser,"cdata");
}

function parse($data) {
xml_parse($this->parser,$data);
}

function tag_open($parser,$tag,$attributes) {
var_dump($parser,$tag,$attributes);
}

function cdata($parser,$cdata) {
var_dump($parser,$cdata);
}

function tag_close($parser,$tag) {
var_dump($parser,$tag);
}

} // end of class xml

$xml_parser = new xml();
$xml_parser->parse("<a id=\"hallo\">php</a>");
?>

xml_set_element_handler
配置元素的标头。
语法: boolean xml_set_element_handler(int parser, string startelementhandler, string endelementhandler);
返回值: 布尔值
函数种类: 资料处理
内容说明: 本函数配置元素的标头供 xml_parse() 函数使用。参数 parser 为解析代码。参数 startelementhandler 及 endelementhandler 分别为元素开始与结束的标头,其中的 startelementhandler 必须包括解析代码、名称、与属性,而 endelementhandler 参数包括了解析代码及名称二个参数。若无错误则返回 true 值。
使用范例
下列用来显示 xml 元素结构 (element structure)

<?php
$file = "data.xml";
$depth = array();

function startelement($parser, $name, $attrs)
{
global $depth;
for ($i = 0; $i < $depth[$parser]; $i++) {
print " ";
}
print "$name\n";
$depth[$parser]++;
}

function endelement($parser, $name, $attrs)
{
global $depth;
$depth[$parser]--;
}

$xml_parser = xml_parser_create();
xml_set_element_handler($xml_parser, "startelement", "endelement");
if (!($fp = fopen($file, "r"))) {
die("could not open xml input");
}
while ($data = fread($fp, 4096)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("xml error: %s at line %d",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
?>

xml_set_character_data_handler
建立字符资料标头。
语法: boolean xml_set_character_data_handler(int parser, string handler);
返回值: 布尔值
函数种类: 资料处理
内容说明: 本函数配置字符资料的标头。参数 parser 为解析代码。参数 handler 包括解析代码及资料字符串等二个元素。若无错误则返回 true 值。

xml_set_processing_instruction_handler
建立处理指令标头。
语法: boolean xml_set_processing_instruction_handler(int parser, string handler);
返回值: 布尔值
函数种类: 资料处理
内容说明: 本函数配置处理指令 (processing instruction, 简称 pi) 的标头,处理指令类似下列行的格式
<?target data?>
参数 parser 为解析代码。参数 handler 包括解析代码、处理指令目标及资料字符串等三个元素。若无错误则返回 true 值。

xml_set_default_handler
建立默认标头。
语法: boolean xml_set_default_handler(int parser, string handler);
返回值: 布尔值
函数种类: 资料处理
内容说明: 本函数配置默认的标头。参数 parser 为解析代码。参数 handler 包括解析代码及资料字符串等二个元素。若无错误则返回 true 值。

xml_set_unparsed_entity_decl_handler
配置未解析实体宣告的标头。
语法: boolean xml_set_unparsed_entity_decl_handler(int parser, string handler);
返回值: 布尔值
函数种类: 资料处理
内容说明: 本函数配置尚未经过解析的实体宣告标头。参数 parser 为解析代码。参数 handler 包括解析代码、实体名称、基底、系统识别符、公用识别符、与记法名称等六个元素。看起来应是类似如下的字符串
<!entity name {publicid | systemid} ndata notationname>
更多的细节可以参考 xml 1.0 的规格书,有关实体宣告的部份。若无错误则返回 true 值。

xml_set_notation_decl_handler
配置记法宣告的标头。
语法: boolean xml_set_notation_decl_handler(int parser, string handler);
返回值: 布尔值
函数种类: 资料处理
内容说明: 本函数配置记法宣告 (notation declaration) 的标头。参数 parser 为解析代码。参数 handler 包括解析代码、记法名称、基底、系统识别符、与公用识别符等五个元素。看起来应是类似如下的字符串
<!notation name {systemid | publicid}>
更多的细节可以参考 xml 1.0 的规格书,有关 notation 的部份。若无错误则返回 true 值。

xml_set_external_entity_ref_handler
配置外部实体参引的标头。
语法: boolean xml_set_external_entity_ref_handler(int parser, string handler);
返回值: 布尔值
函数种类: 资料处理
内容说明: 本函数配置外部实体参引 (external entity reference) 的标头。参数 parser 为解析代码。参数 handler 包括解析代码、打开实体名称、基底、系统识别符、与公用识别符等五个元素。若标头有错,可用 xml_get_error_code() 会返回 xml_error_external_entity_handling。若无错误则返回 true 值。

xml_parse
解析 xml 文件。
语法: boolean xml_parse(int parser, string data, int [isfinal]);
返回值: 布尔值
函数种类: 资料处理
内容说明: 本函数用来解析 xml 格式的文件资料。参数 parser 为解析代码。参数 data 为解析的资料区块 (chunk)。参数 isfinal 可省略,若设为 true 则系统会自动送出最后的资料部分 (piece) 给 data 参数。若无错误则返回 true 值。

xml_get_error_code
取得 xml 错误码。
语法: int xml_get_error_code(int parser);
返回值: 整数
函数种类: 资料处理
内容说明: 本函数可取得 xml 在处理时的错误代码。参数 parser 为解析代码。若 parser 有错则返回 false 值,否则就返回错误代码 (如 xml_error_binary_entity_ref .... 等等)。

xml_error_string
取得 xml 错误字符串。
语法: string xml_error_string(int code);
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数可取得 xml 在处理时的错误代码。参数 code 为解析错误代码。若无错误返回值为代码的文字描述字符串。

xml_get_current_line_number
取得目前解析的行号。
语法: int xml_get_current_line_number(int parser);
返回值: 整数
函数种类: 资料处理
内容说明: 本函数用来取得目前 xml 解析所正在处理的行号。参数 parser 为解析代码。若 parser 有错则返回 false 值,若无错误则返回行号数字。

xml_get_current_column_number
获知目前解析的第几字段。
语法: int xml_get_current_column_number(int parser);
返回值: 整数
函数种类: 资料处理
内容说明: 本函数用来取得目前 xml 解析所正在处理行的第几个字段。参数 parser 为解析代码。若 parser 有错则返回 false 值,若无错误则返回字段序数。

xml_get_current_byte_index
取得目前解析为第几个位组。
语法: int xml_get_current_column_number(int parser);
返回值: 整数
函数种类: 资料处理
内容说明: 本函数用来取得目前 xml 解析所正在的位组 (byte) 为第几个位组。参数 parser 为解析代码。若 parser 有错则返回 false 值,若无错误则返回位序号。

xml_parser_free
释放解析占用的内存。
语法: boolean xml_parser_free(int parser);
返回值: 布尔值
函数种类: 资料处理
内容说明: 本函数用来释放目前 xml 解析所使用的内存。参数 parser 为解析代码。若没有错误则返回 true 值,否则返回 false 值。

xml_parser_set_option
配置解析使用的选项。
语法: boolean xml_parser_set_option(int parser, int option, mixed value);
返回值: 布尔值
函数种类: 资料处理
内容说明: 本函数用来配置 xml 解析所选用的选项。参数 parser 为解析代码。参数 option 即为欲配置的选项常量名称,见下表 (如: xml_option_case_folding)。参数 value 则为欲配置的值。若没有错误则返回 true 值,否则返回 false 值。
选项常量名称 类型 说明
xml_option_case_folding 整数 配置是否允许 case-folding,默认值为允许
xml_option_target_encoding 字符串 配置目地的编码类型,有 iso-8859-1、us-ascii 及 utf-8 等
参考: xml_parser_get_option()

xml_parser_get_option
取得解析使用的选项。
语法: mixed xml_parser_get_option(int parser, int option);
返回值: 混合类型资料
函数种类: 资料处理
内容说明: 本函数用来取得 xml 解析所选用的选项。参数 parser 为解析代码。参数 option 即为欲取得的选项常量名称,有 xml_option_case_folding 及 xml_option_target_encoding 二种。
参考: xml_parser_set_option()

utf8_decode
将 utf-8 码转成 iso-8859-1 码。
语法: string utf8_decode(string data);
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数用来将 utf-8 内码转成 iso-8859-1 内码。参数 data 为待转换的字符串。
参考 utf8_encode()

utf8_encode
将 iso-8859-1 码转成 utf-8 码。
语法: string utf8_decode(string data);
返回值: 字符串
函数种类: 资料处理
内容说明: 本函数用来将 iso-8859-1 内码转成 utf-8 内码。参数 data 为待转换的字符串。
参考: utf8_decode()

 
 收藏本文  打印本文  论坛讨论  关闭窗口
· 上一篇:Session 函数库
· 下一篇:压缩文件函数库
· 用Pear加速PHP程序开发
· QQwry.dat格式分析和查询IP位置的PHP程序
· 利用PHP上传文件
· 在PHP中执行系统外部命令
· 登陆界面限制到只允许一台机器在线


关于本站 | 联系我们 | 业务合作 | 客户案例 | 诚聘英才 | 广告合作 | 收藏本站
海口动网先锋网络科技有限公司版权所有
Copyright © 2000 - 2006 Cndw.Com
中华人民共和国电信与信息服务业务经营许可证编号 琼 ICP 020077