[prev in list] [next in list] [prev in thread] [next in thread] 

List:       php-pear
Subject:    [PHP-PEAR] XML_Parser code
From:       "Alex Rozhik" <rozhik () ziet ! zhitomir ! ua>
Date:       2001-02-21 14:33:20
[Download RAW message or body]

When i try tu use XML_Parser i found some inconvenient.
Because calback functions working as static function. (I cant use $this in
it ).
I'd like to do this function as class member.
This is modified code of XML/Parser.php (see attachment)

Callback functions of new class can be used like this.
class XML_FactoryImport extends XML_NParser {
    var $root;
    function XML_FactoryImport( &$root, $charset='UTF-8' ) {
 $this->XML_NParser( $charset );
 $this->root=$root;
    }
    function startHandler( $p, $name, $attr) {
 $this->root = $this->root->MakeChild( $name, $attr );
    }
    function endHandler( $p, $name ) {
 $this->root = $this->root->GetParent();
    }
    function cdataHandler( $p, $data ) {
 $this->root->SetText( $this->root->GetText().$data );
    }
};


["NParser.php" (application/octet-stream)]

<?php

require_once "PEAR.php";
require_once "XML/Parser.php";
require_once "Net/Socket.php";

class XML_NParser extends PEAR {
    function XML_NParser($charset = 'UTF-8') {
	global $_XML_NParser;
	$this->PEAR();
	$xp = @xml_parser_create($charset);
	if (is_resource($xp)) {
	    $this->parser = $xp;
	    $_XML_NParser[$xp]=&$this;
	    xml_parser_set_option($xp, XML_OPTION_CASE_FOLDING,1);
	    xml_set_object($xp, $this);
	    xml_set_element_handler($xp, "IstartHandler", "IendHandler");
	    xml_set_character_data_handler($xp, "IcdataHandler");
	    xml_set_default_handler($xp, "IdefaultHandler");
	    xml_set_processing_instruction_handler($xp, "IpiHandler");
	    xml_set_unparsed_entity_decl_handler($xp, "IunparsedHandler");
	    xml_set_notation_decl_handler($xp, "InotationHandler");
	    xml_set_external_entity_ref_handler($xp, "IentityrefHandler");
	}
    }
    function	IstartHandler( $p, $name, $attrib ) {
	global $_XML_NParser;
	$_XML_NParser[$p]->startHandler( $p, $name, $attrib );
    }
    function	IendHandler( $p, $name) {
	global $_XML_NParser;
	$_XML_NParser[$p]->endHandler( $p, $name);
    }
    function	IstartHandler( $p, $name, $attrib ) {
	global $_XML_NParser;
	$_XML_NParser[$p]->startHandler( $p, $name, $attrib );
    }
    function	IcdataHandler( $p, $data ) {
	global $_XML_NParser;
	$_XML_NParser[$p]->cdataHandler( $p, $data );
    }
    function	IdefaultHandler( $p, $data ) {
	global $_XML_NParser;
	$_XML_NParser[$p]->defaultHandler( $p, $data );
    }
    function	IpiHandler( $p, $target, $data ) {
	global $_XML_NParser;
	$_XML_NParser[$p]->piHandler( $p, $target, $data );
    }
/*    
    function	IunparsedHandler( $p, $name, $attrib ) {
	global $_XML_NParser;
	$_XML_NParser[$p]->unparsedHandler( $p, $name, $attrib );
    }
*/    
    function	IentityHandler( $p, $openEntityNames, $base, $systemId,  $publicId ) {
	global $_XML_NParser;
	$_XML_NParser[$p]->entityHandler( $p, $openEntityNames, $base, $systemId,  $publicId );
    }
    
    
    function	startHandler( $p, $name, $attrib ) {
    }
    function	endHandler( $p, $name) {
    }
    function	startHandler( $p, $name, $attrib ) {
    }
    function	cdataHandler( $p, $data ) {
    }
    function	defaultHandler( $p, $data ) {
    }
    function	piHandler( $p, $target, $data ) {
    }
/*    
    function	unparsedHandler( $p, $name, $attrib ) {
    }
*/    
    function	entityHandler( $p, $openEntityNames, $base, $systemId,  $publicId ) {
    }
    function setInputFile($file) {
	$fp = fopen($file, "r");
	if (is_resource($fp)) {
	    $this->fp = $fp;
	    return $fp;
	}
	return new XML_Parser_Error($php_errormsg);
    }

    function setInput($fp) {
	if (is_resource($fp)) {
	    $this->fp = $fp;
	    return true;
	}
	return new XML_Parser_Error("not a file resource");
    }

    function parse() {
	if (!is_resource($this->fp)) {
	    return new XML_Parser_Error("no input");
	}
	if (!is_resource($this->parser)) {
	    return new XML_Parser_Error("no parser");
	}
	while ($data = fread($this->fp, 2048)) {
	    $err = $this->parseString($data, feof($this->fp));
	    if (PEAR::isError($err)) {
		return $err;
	    }
	}
	return true;
    }

    function parseString($data, $eof = false) {
	if (!is_resource($this->parser)) {
	    return new XML_Parser_Error("no parser");
	}
	if (!xml_parse($this->parser, $data, $eof)) {
	    $err = new XML_Parser_Error($this->parser);
	    xml_parser_free($this->parser);
	    return $err;
	}
	return true;
    }

    function readSocket( &$socked ) {
	while( $line=$socked->ReadLine() ) {
	    $this->parseString( $line );
	}
    }
}


?>



-- 
PHP Extension and Add-on Repository (PEAR) mailing list.
Documentation can be found at http://pear.php.net/doc/pear.html
To unsubscribe, e-mail: php-pear-unsubscribe@lists.php.net from the
mail address you subscribed with.

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic