PHP xml_set_start_namespace_decl_handler() 函数为给定的 XML 解析器设置起始命名空间声明处理函数。命名空间声明出现在开始标记内。但是,在该开始标记中声明的每个命名空间的开始标记处理程序之前,会调用命名空间声明开始处理程序。
语法
xml_set_start_namespace_decl_handler(parser, handler)
参数
parser | 必需。 指定对 XML 解析器的引用以设置起始命名空间声明处理函数。 |
handler | 必需。 指定一个字符串,其中包含要用作事件处理程序的函数名称。该函数必须接受三个参数:
|
返回值
成功时返回 true,失败时返回 false。
示例:xml_set_start_namespace_decl_handler() 示例
假设我们有一个名为 test.xml 的文件。在下面的示例中,使用 xml_parser_create() 函数创建 XML 解析器。然后打开 XML 文件,使用字符处理函数 char_print 解析其数据。然后将 start_ns 和 end_ns 函数分别设置为 XML 解析器的开始和结束命名空间声明处理函数。解析文档后,使用xml_parser_free()函数释放解析器。
<?php
//创建XML解析器
$parser=xml_parser_create();
//XML解析器的字符处理函数
function char_print($parser, $data) {
echo $data;
}
//启动XML解析器的命名空间声明处理函数
function start_ns($parser, $prefix, $uri) {
echo "$prefix $uri \n";
}
//XML解析器的结束命名空间声明处理函数
function end_ns($parser, $prefix) {
echo "$prefix \n";
}
//设置XML解析器的字符处理函数
xml_set_character_data_handler($parser,"char_print");
//设置开始和结束命名空间声明
//XML解析器的处理函数
xml_set_start_namespace_decl_handler($parser, "start_ns");
xml_set_end_namespace_decl_handler($parser, "end_ns");
//打开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);
?>