php 基于事件的xml处理
php 有两种xml的处理方法:1.基于结构树的处理;2.基于事件的处理。今天介绍php 基于事件的xml处理。
先看下面一个例子:
先定义一个 test.xml 文件
<?xml version="1.0" encoding="UTF-8"?> <note> <to>ZS</to> <from>Shexiao</from> <heading>Greeting</heading> <body>I miss you</body> </note>
再写一个 php_xml.php 文件处理 test.xml:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<?php
$parser= xml_parser_create();
function start($parser,$element_name,$element_attrs){
switch($element_name){
case "NOTE":
echo "--NOTE--<br>";
break;
case "TO":
echo "TO:";
break;
case "FROM":
echo "FROM:";
break;
case "HEADING":
echo "HEADING:";
break;
case "BODY":
echo "MESSAGE:";
break;
}
}
function stop($parser,$element_name){
echo "<br>";
}
function char($parser,$data){
echo $data;
}
xml_set_element_handler($parser, "start", "stop");
xml_set_character_data_handler($parser, "char");
$fp=fopen("test.xml","r");
while($data= fread($fp, 4096)){
xml_parse($parser,$data,feof($fp)) or die(sprintf("XML Error:%s at line %d",
xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser)));
}
xml_parser_free($parser);
?>
</body>
</html>
运行这个文件,输出如下:
--NOTE--
TO:ZS
FROM:Shexiao
HEADING:Greeting
MESSAGE:I miss you
具体的工作流程:
a.先用 xml_parser_create() 初始化一个 xml 解析器;
b.定义几个函数来处理不同的事件,如上述代码中的start()函数,stop()函数和char()函数;
start()函数:遇到的开标签事件时调用;
stop()函数:遇到的闭标签事件时调用;
char()函数:遇到标签里面内容时调用;
c.用 xml_set_element_handler()设置遇到标签时处理的事件;
d.用xml_set_character_data_handler()设置遇到标签内容时处理的事件;
e.用fopen()打开test.xml文件都里面的内容;
f.用xml_parse()函数解析test.xml;
g.错误处理;
h.用xml_parser_free()来释放xml解析器的内存。
浙公网安备 33010602011771号