Edit report at http://bugs.php.net/bug.php?id=51534&edit=1
ID: 51534 User updated by: jameswithers89 at googlemail dot com Reported by: jameswithers89 at googlemail dot com Summary: DOMImplementation::createDocument() does not correctly append children Status: Bogus Type: Bug Package: DOM XML related Operating System: Fedora 12 GNU/Linux PHP Version: 5.3.2 New Comment: At http://www.w3.org/TR/DOM-Level-3-Core/introduction.html it states "Each document contains zero or one doctype nodes, one document element node, and zero or more comments or processing instructions; the document element serves as the root of the element tree for the document". Correct me if I'm wrong but if that is the case then shouldn't the product of: $document = $implementation->createDocument('http://www.w3.org/1999/xhtml', 'html', $doctype); use the method DOMNode::appendChild() 'correctly' and place the child element within its tags (as a child) rather than next to it (as a sibling)? In the meantime, the following code gets the desired effect. It does seem a rather long way of locating the document/root element and appending a child to it: <?php $implementation = new DOMImplementation(); $doctype = $implementation->createDocumentType('html'); $document = $implementation->createDocument('http://www.w3.org/1999/xhtml', 'html', $doctype); $head = $document->createElement('head'); $html = $document->getElementsByTagName('html'); $html = $html->item(0); $html->appendChild($head); echo $document->saveXML(); Previous Comments: ------------------------------------------------------------------------ [2010-04-12 16:40:02] rricha...@php.net Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php It's appending exactly where you are telling it to ------------------------------------------------------------------------ [2010-04-11 19:58:30] jameswithers89 at googlemail dot com The following code also produces the same error: <?php $implementation = new DOMImplementation(); $doctype = $implementation->createDocumentType('html'); // Don't create a root element... $document = $implementation->createDocument(null, null, $doctype); // ...instead create a <html> element and set the xmlns attribute: $html = $document->createElement('html'); $html->setAttribute('xmlns', 'http://www.w3.org/1999/xhtml'); $document->appendChild($html); $head = $document->createElement('head'); $document->appendChild($head); echo $document->saveHTML(); ------------------------------------------------------------------------ [2010-04-11 19:40:38] jameswithers89 at googlemail dot com Description: ------------ The product of DOMDocument::createDocument() appends children outside of the qualified name of the document element (i.e. the root element). I am using php-5.3.2-1.fc12.i686 and php-xml-5.3.2-1.fc12.i686 installed using Yellowdog Updater, Modified Package Manager. All other DOM methods tried so far work fine. Test script: --------------- <?php $implementation = new DOMImplementation(); $doctype = $implementation->createDocumentType('html'); $document = $implementation->createDocument('http://www.w3.org/1999/xhtml', 'html', $doctype); $head = $document->createElement('head'); $document->appendChild($head); echo $document->saveHTML(); Expected result: ---------------- <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head></head> </html> Actual result: -------------- <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"></html><head></head> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=51534&edit=1