DomDocument->get_element_by_id
(No version information available, might be only in CVS)
DomDocument->get_element_by_id — Searches for an element with a certain id
Описание
This function is similar to domdocument_get_elements_by_tagname() but searches for an element with a given id. According to the DOM standard this requires a DTD which defines the attribute ID to be of type ID, though the current implementation simply does an xpath search for "//*[@ID = '%s']". This does not comply to the DOM standard which requires to return null if it is not known which attribute is of type id. This behaviour is likely to be fixed, so do not rely on the current behaviour.
- DomAttribute::name
- DomAttribute::set_value
- DomAttribute::specified
- DomAttribute::value
- DomDocument::add_root
- DomDocument::create_attribute
- DomDocument::create_cdata_section
- DomDocument::create_comment
- DomDocument::create_element_ns
- DomDocument::create_element
- DomDocument::create_entity_reference
- DomDocument::create_processing_instruction
- DomDocument::create_text_node
- DomDocument::doctype
- DomDocument::document_element
- DomDocument::dump_file
- DomDocument::dump_mem
- DomDocument::get_element_by_id
- DomDocument::get_elements_by_tagname
- DomDocument::html_dump_mem
- DomDocument::xinclude
- DomDocumentType::entities
- DomDocumentType::internal_subset
- DomDocumentType::name
- DomDocumentType::notations
- DomDocumentType::public_id
- DomDocumentType::system_id
- DomElement::get_attribute_node
- DomElement::get_attribute
- DomElement::get_elements_by_tagname
- DomElement::has_attribute
- DomElement::remove_attribute
- DomElement::set_attribute_node
- DomElement::set_attribute
- DomElement::tagname
- DomNode::add_namespace
- DomNode::append_child
- DomNode::append_sibling
- DomNode::attributes
- DomNode::child_nodes
- DomNode::clone_node
- DomNode::dump_node
- DomNode::first_child
- DomNode::get_content
- DomNode::has_attributes
- DomNode::has_child_nodes
- DomNode::insert_before
- DomNode::is_blank_node
- DomNode::last_child
- DomNode::next_sibling
- DomNode::node_name
- DomNode::node_type
- DomNode::node_value
- DomNode::owner_document
- DomNode::parent_node
- DomNode::prefix
- DomNode::previous_sibling
- DomNode::remove_child
- DomNode::replace_child
- DomNode::replace_node
- DomNode::set_content
- DomNode::set_name
- DomNode::set_namespace
- DomNode::unlink_node
- DomProcessingInstruction::data
- DomProcessingInstruction::target
- DomXsltStylesheet::process
- DomXsltStylesheet::result_dump_file
- DomXsltStylesheet::result_dump_mem
- domxml_new_doc
- domxml_open_file
- domxml_open_mem
- domxml_version
- domxml_xmltree
- domxml_xslt_stylesheet_doc
- domxml_xslt_stylesheet_file
- domxml_xslt_stylesheet
- domxml_xslt_version
- xpath_eval_expression
- xpath_eval
- xpath_new_context
- xpath_register_ns_auto
- xpath_register_ns
- xptr_eval
- xptr_new_context
Коментарии
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;
}
}