Here is an updated link to the getElementById() pitfalls page:
http://wiki.flux-cms.org/display/BLOG/GetElementById+Pitfalls
DOMDocument::getElementById
(No version information available, might be only in CVS)
DOMDocument::getElementById — Searches for an element with a certain id
Opis
This function is similar to DOMDocument::getElementsByTagName but searches for an element with a given id.
For this function to work, you will need either to set some ID attributes with DOMElement::setIdAttribute or a DTD which defines an attribute to be of type ID. In the later case, you will need to validate your document with DOMDocument::validate or DOMDocument->validateOnParse before using this function.
Parametry
- elementId
-
The unique id value for an element.
Zwracane wartości
Returns the DOMElement or NULL if the element is not found.
Przykłady
Example #1 DOMDocument->getElementById() Example
<?php
$doc = new DomDocument;
// We need to validate our document before refering to the id
$doc->validateOnParse = true;
$doc->Load('book.xml');
echo "The element whose id is books is: " . $doc->getElementById('books')->tagName . "\n";
?>
Powyższy przykład wyświetli:
The element whose id is books is: chapter
DOMDocument::getElementById
18-Sep-2007 11:06
30-Jan-2007 05:07
SAVE YOURSELF A MAJOR HEADACHE AND A LOT OF SEARCHING THROUGH DOCUMENTATION -
Instead of using $object->setAttribute('id', 'id_name_here')
USE THIS: $object->setAttribute('xml:id', 'id_name_here')
Then, to get the node value: $domDocumentObject->getElementById('id_name_here');
The xml:id attribute should AUTOMATICALLY be defined!!
Woohoo! That was easy......
01-Nov-2006 05:36
If your XML document does not have a DTD that defines the "id" attribute as an ID, then the easiest thing to do is to use XPath->query() to find an element that matches "//[@id='x']"
08-Apr-2006 03:00
Validating a document from a DTD so as to use getElementById is sometimes impossible (for example when the head and body elements are not included yet in a XHtml document : the validation failed).
Fortunately, xml:id is supported by this function :)
That may be useful.
http://www.w3.org/TR/xml-id/
If you're trying to use getElementById with a xml file validated on a xsd file you must first use the schemaValidate function or getElementById will return null
Example:
$dom = new DomDocument();
$dom->load("users.xml");
$dom->schemaValidate("users.xsd");
$curruser = $dom->getElementById($user->name);
11-Sep-2005 01:46
It seems getElementById works fine without setting validateOnParse to true. Which is nice since setting this to true caused some performance problems with my script.
02-Jul-2004 01:37
http://wiki.bitflux.org/GetElementById_Pitfalls has an overview, of how to make getElementById work with aribtrary XML documents.
