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;
}
}
DomDocument->get_element_by_id
(PHP 4 >= 4.1.0)
DomDocument->get_element_by_id — 特定の ID を持つ要素を検索する
説明
この関数は domdocument_get_elements_by_tagname() と似ていますが、与えられた ID を持つ要素を検索します。 DOM 標準によれば、これには属性 ID を ID 型として定義する DTD が必要になりますが、現在の実装は単純に "//*[@ID = '%s']" に対する xpath 検索を行っています。これは属性が ID 型でない場合に NULL を返す必要がある DOM 標準に準拠していません。 この動作は固定されているようですので、現在の動作を当てにしないでください。
DomDocument->get_element_by_id
etienne dot anken at eivd dot ch
04-Dec-2002 12:51
04-Dec-2002 12:51
