All pastes #805080 Raw Edit

Unnamed

public text v1 · immutable
·published 2007-12-04 01:07 UTC
rendered paste body
<?php
// Feed class..
// Kierans class.. = Pr0
// For Twerq technologies
// Use for Twerq Times.
// Will return the XML of a file



$filename 		= 	$_GET['feed'];
$XML 			= 	new Xml();
$xml_content 	= 	file_get_contents($filename);

$XML->Set($xml_content);



echo( "<pre>\n" );
print_r($XML->obj_data);
echo( "</pre>\n" );

class Xml
{
	var $xmlAll;
	var $obj_data;
	var $pos;

	function Xml()
	{
		// -------------
		/// PHP 5 uses __construct.
		// To make this work with PHP4+
		// and PHP5 make the function the same name
		// as the class.
		// --------------
	}
	
    // -------------
    // wsFunc is a function to find the current position
    // after stripping out the whitespace
    // requires two arguements
    // returns the position
    // -------------    	
    	
	function _wsFunc($parser, $data)
	{
		if(trim($data))
		{
    		$this->pos[$this->index] = trim($data);
		}
	}
   
    // -------------
    // Whitespaces... Evil
    // make sure we clean thse out
    // trim the string, then decode it
    // urgh..thats about it!
    // -------------    		
	function _cleanString($string)
	{
		return utf8_decode(trim($string));
	}
	
	
    // -------------
    // Probabally the most important function
    // sets the data and then runs the main XML functions
    // The pointer plays a vital part in this.
    // -------------    		
	
	
	function Set(&$xmlAll)
	{
    	$this->index		= 0;
    	$this->pos[] 	= &$this->obj_data;

    	$this->xmlAll	 	= $xmlAll;
    	
    	// -------------
    	// UTF-8 is the right character encoding
    	// Change this on the fly. 
    	// check for more character encodings.
    	// php.net/xml_parser_create
    	// -------------    	
    	$this->xml_parser 	= xml_parser_create("UTF-8");

    	// -------------
    	// Set the options for this function
    	// Need to set XML_OPTION to false
    	// -------------
    	xml_parser_set_option($this->xml_parser, XML_OPTION_CASE_FOLDING, false);
    	
    	// -------------
    	// Set the object
    	// Will allow the class
    	// -------------    	
    	xml_set_object($this->xml_parser,&$this);
    	
     	// -------------
    	// Set the element handles to functions
    	// _startHandle is a function
    	// _endHandle is a function
    	// -------------   	
    	xml_set_element_handler($this->xml_parser,"_startHandle", "_endHandle");
    	
     	// -------------
    	// Removing white spaces..
    	// make sure no white spaces on the tags
    	// This needs to be run on the data handler.
    	// -------------   	
   		xml_set_character_data_handler($this->xml_parser, "_wsFunc");
   		
   		// -------------
    	// Parse on the fly.
    	// Options available true|false
    	// -------------
    	xml_parse($this->xml_parser, $this->xmlAll, true);
    	
    	
    	// -------------
    	// Free the XML data
    	// Very important to CALL this
    	// -------------
    	xml_parser_free($this->xml_parser);
	}

	
    // -------------
    // Damnit, i dont like using eval()
    // However, this was the only way i could see through it
    // I need to find a better way eventually
    // well, atleast before this is ready for release.
    // requires three vars.
	// returns the eval results.
    // -------------    		
	
	function _startHandle($parser, $tag, $attributeList)
	{
		foreach($attributeList as $name => $value)
    	{
    		$value = $this->_cleanString($value);
    		$object->$name = $value;
    	}
    	eval("\$this->pos[\$this->index]->" . $tag . "[] = \$object;");
    	eval("\$size = sizeof( \$this->pos[\$this->index]->" . $tag . " );");
    	eval("\$this->pos[] = &\$this->pos[\$this->index]->" . $tag . "[\$size-1];");
   
    	$this->index++;
	}


    // -------------
    // Used like _startHandle
    // very simply for xml_set_element_handler()
    // pop le' array
    // -------------    	
	function _endHandle($parser, $tag)
	{
		array_pop($this->pos);
		$this->index--;
	}


}
?>