This class is useful for people who haven't the latest release of PHP and would like to search an element with a known ID through a collection of nodes.
Example to use it :
$domDoc = xmldoc("<root><entity id='e1'></entity><entity id='e2'><titi id='e5'></titi></entity></root>");
$root = $domDoc->root();
$children = $root->child_nodes();
$researchObject = new searchElementById("e5", $children);
$resultElement = $researchObject->beginSearching();
The source of the class :
class searchElementById {
//Class which can find and return an XML node with a specified ID
var $numberElements=0;
var $numberAttributes=0;
var $idToFind;
var $tabElements;
//Initialization function which accept 2 parameters :
//$paramIdToFind : value of the ID to find
//$paramTabElements : array of nodes which contains the element to find
function searchElementById($paramIdToFind, $paramTabElements) {
//Initialization of class variables
$this->idToFind = $paramIdToFind;
$this->tabElements = $paramTabElements;
}
//Function starting the research
function beginSearching() {
//Search and return the element found
return $this->searchID($this->tabElements);
}
//Recursive function searching the desired node
function searchID($tabElements) {
//Variable of the number of elements
$i = 0;
//Variable of the number of attributes
$j = 0;
//Number of nodes in the elements' array
$nbreNoeuds = count($tabElements);
//Loop on all elements
for ($i=0;$i<$nbreNoeuds;$i++) {
//Incrementation of the class variable couting the total number of elements
$this->compteurElements++;
//Extraction of the attributes of the current element
$tabAttributs = $tabElements[$i]->attributes();
//Number of attributes in the current element
$nbreAttributs = count($tabAttributs);
//Loop on all attributes
for ($j=0;$j<$nbreAttributs;$j++) {
//Incrementation of the class variable couting the total number of attributes
$this->numberAttributes++;
//Test if the current attribute is the attribute to find
if ($tabAttributs[$j]->value==$this->idToFind) {
//If yes, return the current element
return $tabElements[$i];
}
}
//Search children nodes of the current element
$children = $tabElements[$i]->child_nodes();
if (!is_bool($children)) {
//If the current element has children, call recursively this function
$result = $this->searchID($children);
//If the result is not boolean, return the array
if (!is_bool($result)) {
return $result;
}
}
}
return false;
}
}