tags:

views:

28

answers:

0

I'm working on a class extending SimpleXMLElement:

class MyXML extends SimpleXMLElement {
    public function cdata($text) {
        $node = dom_import_simplexml($this);
        $owner = $node->ownerDocument;
        $node->appendChild($owner->createCDATASection($text));
        return $this;
    }
}

Since it's an SimpleXMLElement, I can dynamically create XML nodes inside it:

$xml = new MyXML('<foo/>');
$xml->bar = 'Test';
print $xml->asXML(); // <foo><bar>Test</bar></foo>

But when I try to run this:

$xml = new MyXML('<foo/>');
$xml->bar->cdata('Test');

I get:

Warning: dom_import_simplexml(): Invalid Nodetype to import in [..]

However, if I force the SimpleXMLElement node to be created before running cdata(), it works again:

$xml = new MyXML('<foo/>');
$xml->bar = '';
$xml->bar->cdata('Test');
print $xml->asXML(); // <foo><bar><![CDATA[Test]]></bar></foo>

I'm curious if what I found is a bug, and if there is any way to work around it without "priming" the node first.