AtomParser::parse()

Source

function parse() {

    set_error_handler(array(&$this, 'error_handler'));

    array_unshift($this->ns_contexts, array());

    if ( ! function_exists( 'xml_parser_create_ns' ) ) {
    	trigger_error( __( "PHP's XML extension is not available. Please contact your hosting provider to enable PHP's XML extension." ) );
    	return false;
    }

    $parser = xml_parser_create_ns();
    xml_set_element_handler($parser, array($this, "start_element"), array($this, "end_element"));
    xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,0);
    xml_parser_set_option($parser,XML_OPTION_SKIP_WHITE,0);
    xml_set_character_data_handler($parser, array($this, "cdata"));
    xml_set_default_handler($parser, array($this, "_default"));
    xml_set_start_namespace_decl_handler($parser, array($this, "start_ns"));
    xml_set_end_namespace_decl_handler($parser, array($this, "end_ns"));

    $this->content = '';

    $ret = true;

    $fp = fopen($this->FILE, "r");
    while ($data = fread($fp, 4096)) {
        if($this->debug) $this->content .= $data;

        if(!xml_parse($parser, $data, feof($fp))) {
            /* translators: 1: Error message, 2: Line number. */
            trigger_error(sprintf(__('XML Error: %1$s at line %2$s')."\n",
                xml_error_string(xml_get_error_code($parser)),
                xml_get_current_line_number($parser)));
            $ret = false;
            break;
        }
    }
    fclose($fp);

    xml_parser_free($parser);
    unset($parser);

    restore_error_handler();

    return $ret;
}

User Contributed Notes

You must log in before being able to contribute a note or feedback.