最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
php xml Parser函数应用实例
时间:2022-06-24 20:52:37 编辑:袖梨 来源:一聚教程网
xml 函数是 php 核心的组成部分。无需安装即可使用这些函数。
php xml parser 函数
php:指示支持该函数的最早的 php 版本。
函数 描述 php
utf8_decode() 把 utf-8 字符串解码为 iso-8859-1。 3
utf8_encode() 把 iso-8859-1 字符串编码为 utf-8。 3
xml_error_string() 获取 xml 解析器的错误描述。 3
xml_get_current_byte_index() 获取 xml 解析器的当前字节索引。 3
xml_get_current_column_number() 获取 xml 解析器的当前列号。 3
xml_get_current_line_number() 获取 xml 解析器的当前行号。 3
xml_get_error_code() 获取 xml 解析器错误代码。 3
xml_parse() 解析 xml 文档。 3
xml_parse_into_struct() 把 xml 数据解析到数组中。 3
xml_parser_create_ns() 创建带有命名空间支持的 xml 解析器。 4
xml_parser_create() 创建 xml 解析器。 3
xml_parser_free() 释放 xml 解析器。 3
xml_parser_get_option() 从 xml 解析器获取选项设置信息。 3
xml_parser_set_option() 为 xml 解析进行选项设置。 3
xml_set_character_data_handler() 建立字符数据处理器。 3
xml_set_default_handler() 建立默认的数据处理器。 3
xml_set_element_handler() 建立起始和终止元素处理器。 3
xml_set_end_namespace_decl_handler() 建立终止命名空间声明处理器。 4
xml_set_external_entity_ref_handler() 建立外部实体处理器。 3
xml_set_notation_decl_handler() 建立注释声明处理器。 3
xml_set_object() 在对象中使用 xml 解析器。 4
xml_set_processing_instruction_handler() 建立处理指令(pi)处理器。 3
xml_set_start_namespace_decl_handler() 建立起始命名空间声明处理器。 4
xml_set_unparsed_entity_decl_handler() 建立未解析实体定义声明处理器。 3
*/
$file="test.xml"; //定义xml文件
$character_data_on=false; //定义布尔变量
$tag_complete=true; //定义布尔变量
function startelement($parser,$name,$attrs) //定义起始回调函数
{
global $character_data_on;
global $tag_complete;
echo "<$name";
if (sizeof($attrs))
{
while(list($k,$v)=each($attrs))
{
echo "$k="
}
}
$tag_complete=false; //定义布尔型变量
$character_data_on=false; //定义布尔型变量
}
function endelement($parser,$name) //定义终止回调函数
{
global $fp;
global $character_data_on;
global $tag_complete;
if(!$character_data_on)
{
$temp_fp=ftell($fp);
$end_element_byte_index=xml_get_current_byte_index($parser);
fseek($fp,$end_element_byte_index-2);
$validator=fgets($fp,3);
fseek($fp,$temp_fp);
if($validator=="/>")
{
echo " />";
}
else echo "></$name>";
$tag_complete = true;
}
else echo "</$name>";
$character_data_on=false;
}
function characterdata($parser,$data) //定义回调函数
{
global $character_data_on;
global $tag_complete;
if((!$character_data_on)&&(!$tag_complete))
{
echo ">";
$tag_complete=true;
}
echo "$data";
$character_data_on=true;
}
$xml_parser=xml_parser_create(); //创建xml解析器
xml_parser_set_option($xml_parser,xml_option_case_folding,false); //对解析器进行设置
xml_set_element_handler($xml_parser,"startelement", "endelement"); //建立起止元素处理器
xml_set_character_data_handler($xml_parser,"characterdata"); //建立字符数据处理器
if(!($fp=fopen($file,"r"))) //如果文件打开失败
{
die("could not open xml input"); //输出错误信息
}
echo "";
";
while($file_content=fread($fp,4096)) //循环读取内容
{
if(!xml_parse($xml_parser,$file_content,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)));
}
}
echo "
xml_parser_free($xml_parser); //释放xml解析器
?>
实例二
class xmlparser //定义一个类
{
var $xmlparser; //类的属性
function xmlparser() //类的方法
{
$this->xmlparser=xml_parser_create();
xml_set_object($this->xmlparser,$this);
xml_set_character_data_handler($this->xmlparser,"char");
xml_set_element_handler($this->xmlparser,"start_tag","end_tag");
}
function parse($data) //类的方法
{
xml_parse($this->xmlparser,$data);
}
function parse_file($xmlfile) //类的方法
{
$fp=fopen($xmlfile,'r');
while($xmldata=fread($fp, 4096))
{
if(!xml_parse($this->xmlparser,$xmldata))
{
die( print "error:".
xml_error_string(xml_get_error_code($this->xmlparser))."
line:".
xml_get_current_line_number($this->xmlparser)."
column:".
xml_get_current_column_number($this->xmlparser)."
");
}
}
}
function start_tag($xmlparser,$tag,$attributes) //类的方法
{
print $tag."
";
}
function end_tag() //类的方法
{
}
function char($xmlparser,$data) //类的方法
{
echo $data."
";
}
function close_parser() //类的方法
{
xml_parser_free($this->xmlparser);
}
}
$myxmlparser=new xmlparser(); //为类初始化一个对象
$myxmlparser->parse_file("test.xml"); //调用类的读取文件方法
$myxmlparser->close_parser(); //调用类的关闭方法
/*
php xml parser 常量
constant
xml_error_none (integer)
xml_error_no_memory (integer)
xml_error_syntax (integer)
xml_error_no_elements (integer)
xml_error_invalid_token (integer)
xml_error_unclosed_token (integer)
xml_error_partial_char (integer)
xml_error_tag_mismatch (integer)
xml_error_duplicate_attribute (integer)
xml_error_junk_after_doc_element (integer)
xml_error_param_entity_ref (integer)
xml_error_undefined_entity (integer)
xml_error_recursive_entity_ref (integer)
xml_error_async_entity (integer)
xml_error_bad_char_ref (integer)
xml_error_binary_entity_ref (integer)
xml_error_attribute_external_entity_ref (integer)
xml_error_misplaced_xml_pi (integer)
xml_error_unknown_encoding (integer)
xml_error_incorrect_encoding (integer)
xml_error_unclosed_cdata_section (integer)
xml_error_external_entity_handling (integer)
xml_option_case_folding (integer)
xml_option_target_encoding (integer)
xml_option_skip_tagstart (integer)
xml_option_skip_white (integer)
相关文章
- 王者荣耀侦探能力大测试攻略 王者荣耀侦探能力大测试怎么过 11-22
- 无期迷途主线前瞻兑换码是什么 11-22
- 原神欧洛伦怎么培养 11-22
- 炉石传说网易云音乐联动怎么玩 11-22
- 永劫无间手游确幸转盘怎么样 11-22
- 无期迷途主线前瞻兑换码是什么 无期迷途主线前瞻直播兑换码介绍 11-22