php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #51534 DOMImplementation::createDocument() does not correctly append children
Submitted: 2010-04-11 19:40 UTC Modified: 2010-04-12 20:50 UTC
Votes:2
Avg. Score:5.0 ± 0.0
Reproduced:2 of 2 (100.0%)
Same Version:2 (100.0%)
Same OS:2 (100.0%)
From: jameswithers89 at googlemail dot com Assigned:
Status: Not a bug Package: DOM XML related
PHP Version: 5.3.2 OS: Fedora 12 GNU/Linux
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: jameswithers89 at googlemail dot com
New email:
PHP Version: OS:

 

 [2010-04-11 19:40 UTC] 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>

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2010-04-11 19:58 UTC] 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-12 16:40 UTC] rrichards@php.net
-Status: Open +Status: Bogus
 [2010-04-12 16:40 UTC] rrichards@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-12 20:50 UTC] jameswithers89 at googlemail dot com
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();
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Wed Feb 05 06:01:32 2025 UTC