用PHP工具包expat解析XML

ZDNet软件频道 时间:2002-06-27 作者:BUILDER.COM |  我要评论()
本文关键词:
本文演示了PHP和XML的紧密结合过程。两种技术以Web为中心的天性促使它们联合起来成为动态内容所需的理想解决方案。

只要xml_parse遇到<url>这样的开始标签,“startElement”函数就由XML解析器调用,在我们的例子中解析器就是$parser。该函数是必须定义的函数,它拥有3个自动传递给它的参数:XML解析器实例、大写的元素名称,比如URL以及该元素所具有的属性数组。在以上示例中,XML文件中的元素没有属性集合,所以数组参数为空,但这个参数还是必须存在的。

就这个例子而言,我决定在一个HTML表中显示我的XML数据。如上所示,出于简化的缘故我没有编写错误处理代码。这里我耍了个障眼法,因为我知道XML文件中标签出现的顺序。否则我可以用“startElement”、“characterData”和“endElement”函数来定义数组,然后用单独的函数显示结果。

function startElement($parser_instance, $element_name, $attrs) {
    switch($element_name) {
        case “URL”     :    echo “<tr><td><a href=””;
                            break;
        case “SUMMARY” :    echo “<td>”;
                            break;
    }
}


处理元素标签之后,xml_parse一旦遇到XML数据就会调用“characterData”函数。这个函数也是由解析器自动调用的,该函数需要两个参数,解析器实例和包含数据的字符串。
function characterData($parser_instance, $xml_data) {
    echo $xml_data;
}

最后xml_parse遭遇结束标签,运行“endElement”函数,该函数带两个参数,解析器实例和元素名称。
function endElement($parser_instance, $element_name) {
    switch($element_name) {
        case “URL”     :    echo “”>”;
                            break;
        case “TITLE”   :    echo “</a></td>”;
                            break;
        case “SUMMARY” :    echo “</td></tr>”;
                            break;
   }
}


用PHP解析XML的轻量锻炼到这里就结束了,下面我们开始加些重活。

增加函数

PHP中还有其他一些同XML解析有关的函数。PHP.net文档对这些函数进行了完整的说明。我在这里提到了一些,你或许不久就会用到这些函数:

  • xml_set_default_handler()—该函数的工作方式和xml_set_character_data_handler()函数相近,但它捕获定义的一切。这个函数常用于文档类型声明控制数据的处理。
  • xml_parser_set_option()—你可以用这个函数禁用字母的转大写操作或者选择其他替代的字符编码集。
  • xml_parse_into_struct()—这个函数用来略过“startElement”、“characterData”和“endElement”函数的调用,而把数据直接放进数组。
  • xml_error_string()—这个函数用来从xml_parser() 错误中获取文本信息。
  • xml_get_error_code()—你可以用这个函数获取上面提到的错误字符串。后两个函数的用法是这样的:if(!xml_parse($parser, $data, feof($filehandler))) { die(xml_error_string(xml_get_error_code($parser)); )

如果你觉得自己已经上手,我建议你仔细读读PHP手册页中提供的XML External Entity Example。这些例子提出了本文没有提到的其他一些概念以及处理文件错误的某些技术。

小结

本文演示了PHP和XML的紧密结合过程。两种技术以Web为中心的天性促使它们联合起来成为动态内容所需的理想解决方案。

责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134