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解析器的内存。

 

详情请查看:http://www.w3schools.com/php/php_xml_parser_expat.asp

posted on 2013-11-22 03:52  xiao卒  阅读(273)  评论(0编辑  收藏  举报

导航