[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