Jump to content

My XML Parser Class...


DarkMantis

Recommended Posts

Hi All.

 

I was working on this class for the last .. 2 hours or so. I was just wondering, if any of you could see anything immediatly wrong with it. I haven't really had chance to test it. If it does work. Help yourselves to it.

 

<?php

/*
Made By Richard Clifford for the use and redistribution under the GPL 2 license.
If you wish to use this class, please leave my name and this comment in here.
*/


/*
Usage Example:


$this->objXML->loadXMLDoc('Document.xml'); #Must start with This
$this->objXML->getChildren();
$this->objXML->getChildrenByNode('NodeName');
$this->objXML->asXML();
$this->objXML->addAttribute('attrName','attrValue');
$this->objXML->addChild('ParentName','childName');
$this->objXML->getAttributesByNode('Attr');
$this->objXML->xmlToXPath();
$this->objXML->countChildren('parentNode');

*/

class XML{


function __construct(){


	//Calls the loadXMLDoc func
	$this->loadXMLDoc($docName);
}

/**
	@Brief		Loads the XML doc to read from
	@Param		docName		The Name of the XML document
	@Param		element		The SimpleXMLElement, Default = null
	@Since		Version 1. 	Dev
	@Return		blOut		Boolean
*/
public function loadXMLDoc($docName, $element = null){
	//Set the Return value
	$blOut = false;

	//Load the XML Document 
	$XML = simplexml_load_file($docName);

	//Call the SimpleXMLElement
	$SXE = new SimpleXMLElement($element);

	//Checks to make sure the file is loaded and the SimpleXMLElement has been called
	if( ($XML == TRUE) && ($SXE == TRUE)){
		$blOut = true; 
	}else{
		die('Sorry, Something Went Wrong');
	}

	//Return the Variable
	return $blOut;
}


/**
	@Brief		Gets an XML Child Attribute
	@Since		Version 1.	Dev
	@Returns	$strOut 	String from the Child
*/
public function getChildren(){
	if(!$this->loadXMLDoc() ){ die('Couldn\'t Load XML Document');}

	$strOut = NULL;

	//Loads the XML Document
	$XML = $this->loadXMLDoc();

	//Gets all of the Children in the Document
	$xmlChildren = $XML->children();

	//Loops through the children to give each Child and its value.
	foreach($xmlChildren as $child){
		$strOut = $child->getName() . ':' . $child . '<br />';
	}

	return $strOut;
}


/**
	@Brief		Return a well-formed XML string based on SimpleXML element 
	@Since		Version 1.	Dev
	@Returns	$strOut		The Well Formed XML string
*/
public function asXML(){
	if(!$this->loadXMLDoc() ){ die('Couldn\'t Load XML Document');}

	$strOut = NULL;

	//Loads XML DOC
	$strToXML = $this->loadXMLDoc();

	//Calls the Element
	$SXE = new SimpleXMLElement($strToXML);


	if(!$SXE){
		die('Oops, something went wrong');
	}else{
		//Set the Return Value as the XML 
		$strOut = $xml->asXML();
	}

	return $strOut;
}


/**
	@Brief		Adds an attribute to the SimpleXML element 
	@Since		Version 1.	Dev
	@Returns	$blOut		Boolean
*/

public function addAttribute($element, $attrName, $attrValue){
	if(!$this->loadXMLDoc() ){ die('Couldn\'t Load XML Document');}

	$blOut = false;

	//loads the XML Doc and sets the SXE (SimpleXMLElement)
	$addAttr = $this->loadXMLDoc($this->docName, $element);

	$addNewAttr = $addAttr->addAttribute($attrName, $attrValue, $namespace = null);

	if(!$addNewAttr){
		die('Sorry We could not add the attribute at this time.');
	}else{
		$blOut = true;
	}

	return $blOut;
}

/**
	@Brief		Adds a child element to the XML node 
	@Since		Version 1. 	Dev
	@Returns	$blOut		Boolean
*/
public function addChild($childName, $childValue, $namespace = null){
	if(!$this->loadXMLDoc() ){ die('Couldn\'t Load XML Document');}

	$blOut = false;

	//Loads the XML Doc
	$addChild = $this->loadXMLDoc();

	//Adds a new child to the document
	$addNewChild = $addChild->addChild($childName, $childValue, $namespace);

	if(!$addNewChild){
		die('Sorry, I couldn\'t addChild at this Time');
	}else{
		$blOut = true;
	}

	return $blOut;
}


/**
	@Brief		Finds children of given node
	@Since		Version 1.	Dev
	@Param		$nodeName	The Name of the Node to retrieve Children
	@Param		$prefix		If is_prefix is TRUE, ns will be regarded as a prefix. If FALSE, ns will be regarded as a namespace URL. 
	@Returns	$arrOut		Multi-Dimensional Array

*/
public function getChildrenByNode($nodeName, $prefix = true){
	if(!$this->loadXMLDoc() ){ die('Couldn\'t Load XML Document');}

	$arrOut = array();

	$xml = $this->loadXMLDoc();

	$getChildren = $xml->children($nodeName);

	foreach($getChildren as $child){
		$arrOut['child_name'] = array($child);
	}

	return $arrOut;
}


/**
	@Brief		Gets an array of attributes from a node name
	@Since		Version 1.	Dev
	@Param		$nodeName	The name of a Node to get a 
*/
public function getAttributesByNode($nodeName){
	if(!$this->loadXMLDoc() ){ die('Couldn\'t Load XML Document');}

	$arrOut = array();

	//Loads the XML Document
	$loadXml = $this->loadXMLDoc();

	//Gets the XML code
	$xml = $loadXML->asXML();

	//Loads the XML into a string
	$xmlString = simplexml_load_string($xml);

	//For each attribute in the XML Code string set as $attr=>$value
	foreach($xmlString->$nodeName->attributes() as $attr=>$value){
		$arrOut = array($attr=>$value);
	}

	return $arrOut;
}

/**
	@COMPLETE AT A LATER DATE
	@NEED TO LOOKUP
*/
public function xmlToXPath(){

}

/**
	@Brief		Counts how many children are in a node
	@Param		$nodeName	The name of the node to query
	@Returns	$strOut		Counts the amount of children in a node, and adds it to a string.
*/
public function countChildren($nodeName, $return = 'int'){
	if(!$this->loadXMLDoc() ){ die('Couldn\'t Load XML Document');}


	//Switch the $return as the user may want an integer or a string returned.
	switch($return){
		case 'str':
			//if $strOut = NULL fails then user $strOut = '';
			$strOut = NULL;

			//Load the XML Document
			$xml = $this->loadXmlDoc();

			//Get the Children
			$xmlNode = $this->getChildrenByNode($nodeName);

			//Set a counter
			$counted = 0;

			//Forevery child in every node
			foreach($xmlNode as $child){

				//add one to the counter
				$counted++;

				//return a string
				$strOut = sprintf('The %s has %s children',$xmlNode, $child);
			}

			return $strOut;
			break;

		case 'int':
			$intOut = 0;

			$xml = $this->loadXmlDoc();

			$xmlNode = $this->getChildrenByNode($nodeName);

			$counted = 0;

			foreach($xmlNode as $child){
				$counted++;
			}

			//Return the counter(int)
			(int) $intOut = $counted;

			return $intOut;
			break;
	}
return $return;
}
}

?>

 

Best Regards,

Mantyy

Link to comment
https://forums.phpfreaks.com/topic/214906-my-xml-parser-class/
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.