DiDOM
DiDOM copied to clipboard
Couldn't add child.
Hi, I want create a web-page with DiDOM but I have some problems.
<?php
require './vendor/autoload.php';
use DiDom\Document;
$Doc = new Document();
$Html = $Doc->createElement('html');
$Html->appendChild(
$Doc->createElement('body')->appendChild(
$Doc->createElement('h1', 'hi')
)
);
echo $Html->html();
?>
Error:
PHP Warning: DOMNode::cloneNode(): Couldn't fetch DOMElement in /Users/yusufusta/Desktop/rasba/vendor/imangazaliev/didom/src/DiDom/Node.php on line 105
Warning: DOMNode::cloneNode(): Couldn't fetch DOMElement in /Users/yusufusta/Desktop/rasba/vendor/imangazaliev/didom/src/DiDom/Node.php on line 105
PHP Fatal error: Uncaught TypeError: Argument 1 passed to DOMDocument::importNode() must be an instance of DOMNode, null given in /Users/yusufusta/Desktop/rasba/vendor/imangazaliev/didom/src/DiDom/Node.php:106
Stack trace:
#0 /Users/yusufusta/Desktop/rasba/vendor/imangazaliev/didom/src/DiDom/Node.php(106): DOMDocument->importNode(NULL, true)
#1 /Users/yusufusta/Desktop/rasba/test.php(9): DiDom\Node->appendChild(Array)
#2 {main}
thrown in /Users/yusufusta/Desktop/rasba/vendor/imangazaliev/didom/src/DiDom/Node.php on line 106
Fatal error: Uncaught TypeError: Argument 1 passed to DOMDocument::importNode() must be an instance of DOMNode, null given in /Users/yusufusta/Desktop/rasba/vendor/imangazaliev/didom/src/DiDom/Node.php:106
Stack trace:
#0 /Users/yusufusta/Desktop/rasba/vendor/imangazaliev/didom/src/DiDom/Node.php(106): DOMDocument->importNode(NULL, true)
#1 /Users/yusufusta/Desktop/rasba/test.php(9): DiDom\Node->appendChild(Array)
#2 {main}
thrown in /Users/yusufusta/Desktop/rasba/vendor/imangazaliev/didom/src/DiDom/Node.php on line 106
You have to store an each element to a variable:
<?php
use DiDom\Document;
require './vendor/autoload.php';
$doc = new Document();
$html = $doc->createElement('html');
$body = $doc->createElement('body');
$h1 = $body->appendChild($doc->createElement('h1', 'hi'));
$html->appendChild($body);
echo $html->html();
Yes, with this way the problem will be solved but why? is there another way?
I don't know why it exactly happens but when you call
$Html->appendChild(
$Doc->createElement('body')->appendChild(
$Doc->createElement('h1', 'hi')
)
);
it's try to add h1
element, not body
because ->createElement('body')->appendChild(...)
returns h1
.
is there another way?
I don't know. I spent a little time to figure out what's wrong but I couldn't.
I don't know. I spent a little time to figure out what's wrong but I couldn't.
Okey, thanks. I guess there is no solution.
I think this is an important issue and it should stay open.