PHP Doku:: Sucht nach einem Element mit einer bestimmten ID - function.domdocument-get-element-by-id.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzXML-ManipulationDOM-XMLDOM-XML-FunktionenDomDocument->get_element_by_id

Ein Service von Reinhard Neidl - Webprogrammierung.

DOM-XML-Funktionen

<<DomDocument->dump_mem

DomDocument->get_elements_by_tagname>>

DomDocument->get_element_by_id

(PHP 4 >= 4.1.0)

DomDocument->get_element_by_id Sucht nach einem Element mit einer bestimmten ID

Beschreibung

domelement DomDocument->get_element_by_id ( string $id )

Diese Funktion ist ähnlich der Funktion domdocument_get_elements_by_tagname(), sucht jedoch nach einem Element mit einer bestimmten ID. Nach dem DOM-Standard muss dazu eine DTD existieren, welche das Attribut ID als vom Typ ID definiert. Die aktuelle Implementierung führt lediglich eine simple XPath-Suche nach "//*[@ID = '%s']" durch. Das entspricht nicht dem DOM-Standard, der null erwartet, wenn unbekannt ist, welches Element den Typ ID trägt. Dieses Verhalten wird in Zukunft dem Standard angepasst werden, sie sollten sich also nicht auf dieses Verhalten verlassen.

Siehe auch DomDocument_get_elements_by_tagname()


Ein BenutzerBeitrag:
- Beiträge aktualisieren...
etienne dot anken at eivd dot ch
3.12.2002 16:51
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;
   
  }
       
}



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)