PHP xml_parse() 函数解析 XML 文档。根据需要多次调用已配置事件的处理程序。
语法
xml_parse(parser, data, is_final)
参数
parser | 必需。 指定要使用的 XML 解析器的引用。 |
data | 必需。 指定要解析的数据块。只要在解析最后一个数据时设置 is_final 参数并为 true,就可以通过使用新数据多次调用此函数来分段解析文档。 |
is_final | 可选。 如果设置为true,则data参数中的数据为本次解析中发送的最后一条数据。 |
返回值
成功返回1,失败返回0。
对于解析不成功,可以通过xml_get_error_code(), xml_error_string(), xml_get_current_line_number(), xml_get_current_column_number() 和 xml_get_current_byte_index()。
注意:某些错误(例如实体错误)会在数据末尾报告,因此仅当 is_final 设置为 true 时才报告。
示例:
假设我们有一个名为 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 解析器。然后打开 XML 文件,使用字符处理函数 char_print 解析其数据。解析文档后,使用xml_parser_free()函数释放解析器。
<?php
//创建XML解析器
$parser=xml_parser_create();
//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);
?>
上述代码的输出将是:
John123 John Smith +1-8054098000 Brooklyn, New York, USA
示例:
再考虑一个使用字符解析 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