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
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • 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.