PHP XML解析器函数

PHP xml_set_element_handler() 函数设置 XML 解析器的元素处理函数。 start_handlerend_handler 是包含 xml_parse() 时必须存在的函数名称的字符串 为解析器调用。

语法

xml_set_element_handler(parser, start_handler, end_handler) 

参数

parser必填。 指定对 XML 解析器的引用以设置开始和结束元素处理函数。
start_handler必填。 指定一个字符串,其中包含要在元素开头调用的函数的名称。该函数必须具有三个参数:
start_handler(parser, name, attribs) 
  • parser:第一个参数 parser 是调用处理程序的 XML 解析器的引用。
  • name:第二个参数 name 包含调用此处理程序的元素的名称。如果大小写折叠对此解析器有效,则元素名称将为大写字母。
  • attribs:第三个参数 attribs 包含一个具有元素属性的关联数组(如果有的话)。该数组的键是属性名称,值是属性值。属性名称按照与元素名称相同的标准进行大小写折叠。属性值不区分大小写。
注意:除了函数名之外,还可以使用包含对象引用和方法名的数组。
end_handler必填。 指定一个字符串,其中包含要在元素末尾调用的函数名称。该函数必须有两个参数:
end_handler(parser, name) 
  • parser:第一个参数 parser 是调用处理程序的 XML 解析器的引用。
  • name:第一个参数 name 包含调用此处理程序的元素的名称。如果大小写折叠对此解析器有效,则元素名称将为大写字母。
如果处理程序函数设置为空字符串或 false,则禁用相关处理程序。

注意:在 XML 中,大小写折叠表示大写。默认情况下,传递给处理函数的所有元素名称和元素属性都是大小写折叠的。可以使用 xml_parser_get_option()xml_parser_set_option() 函数分别。

返回值

成功时返回 true,失败时返回 false。

示例:xml_set_element_handler() 示例

让我们假设我们有一个名为 test.xml 的文件。该文件包含以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<userlist>
  <user>
    <username>John123</username>
    <name>John Smith</name>
    <phone>+1-8054098000</phone>
    <address>Brooklyn, New York, USA</address>
  </user>
</userlist> 

在下面的示例中,使用 xml_parser_create() 函数创建 XML 解析器。然后打开 XML 文件,使用字符处理函数和元素处理函数解析其数据。解析文档后,使用xml_parser_free()函数释放解析器。

<?php
//创建XML解析器
$parser=xml_parser_create();

//名为"start_handler"的元素处理函数
//启用自定义输出
function start_handler($parser, $element, $attribs) {     
  switch($element) {
    case "USERNAME":
      echo "<b>User Name : "; 
      break;
    case "NAME":
      echo "Name : ";         
      break;
    case "PHONE":
      echo "Phone : ";        
      break;
    case "ADDRESS":
      echo "Address : ";      
      break;
  }
}
 
//元素处理函数"end_handler"
function end_handler($parser, $element) {
  if($element == "USERNAME") 
    echo "</b><br>";
  else
    echo "<br>";
}
 
// 设置元素处理程序
xml_set_element_handler($parser, "start_handler", 
                        "end_handler");

//XML解析器的字符处理函数
function char_print($parser, $data) {
  echo $data;
}

//设置XML解析器的字符处理函数
xml_set_character_data_handler($parser,"char_print");

//打开xml文件
$fp = fopen("test.xml", "r");

while($data = fread($fp,4096)) {
  //解析XML数据
  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解析器
xml_parser_free($parser);

fclose($fp);
?> 

上述代码的输出将是:

User Name : John123
Name : John Smith
Phone : +1-8054098000
Address : Brooklyn, New York, USA