PHP xml_parse XML 解析器函数

  • 定义和用法

    xml_parse - 开始解析一个 XML 文档。
  • 版本支持

    PHP4 PHP5 PHP7
    支持 支持 支持
  • 语法

    xml_parse ( resource $parser , string $data [, bool $is_final = false ] )
    
    xml_parse() 解析 XML 文档。已配置事件的处理器根据需要被无限次调用。
  • 参数

    参数 必需的 描述
    parser 一个指向将要使用的 XML 解析器的指针。
    data 需要解析的数据集。您可以多次对新的数据调用 xml_parse() 函数来分段解析一个文档;只要在解析最后一段数据时将 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,项目的错误将会报告在数据的末尾。
  • 示例

    $file = 'simple.xml';
    $stack = array();
    
    function startTag($parser, $name, $attrs)
    {
       global $stack;
       $tag=array("name"=>$name,"attrs"=>$attrs);  
       array_push($stack,$tag);
     
    }
    
    function cdata($parser, $cdata)
    {
        global $stack,$i;
       
        if(trim($cdata))
        {    
            $stack[count($stack)-1]['cdata']=$cdata;   
        }
    }
    
    function endTag($parser, $name)
    {
       global $stack;  
       $stack[count($stack)-2]['children'][] = $stack[count($stack)-1];
       array_pop($stack);
    }
    
    $xml_parser = xml_parser_create();
    xml_set_element_handler($xml_parser, "startTag", "endTag");
    xml_set_character_data_handler($xml_parser, "cdata");
    
    $data = xml_parse($xml_parser,file_get_contents($file));
    if(!$data) {
       die(sprintf("XML error: %s at line %d",
    xml_error_string(xml_get_error_code($xml_parser)),
    xml_get_current_line_number($xml_parser)));
    }
    
    xml_parser_free($xml_parser);
    
    print("<pre>\n");
    print_r($stack);
    print("</pre>\n");
    
  • 相关函数

    xml_error_string() - 获取 XML 解析器的错误字符串