Skip to content

Couldn't add child. #152

Description

@yusufusta

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

Activity

  1. Imangazaliev commented on Nov 16, 2020

    @Imangazaliev
    Owner

    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();
  2. yusufusta commented on Nov 16, 2020

    @yusufusta
    Author

    Yes, with this way the problem will be solved but why? is there another way?

  3. Imangazaliev commented on Nov 16, 2020

    @Imangazaliev
    Owner

    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.

  4. yusufusta commented on Nov 16, 2020

    @yusufusta
    Author

    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.

  5. yusufusta commented on Feb 10, 2021

    @yusufusta
    Author

    I think this is an important issue and it should stay open.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions