您的位置:首页 > 编程语言 > PHP开发

php 基于事件的xml处理

2013-11-22 03:52 417 查看
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解析器的内存。

详情请查看:http://www.w3schools.com/php/php_xml_parser_expat.asp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: