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

Reply via email to