我正在开设一个扩展SimpleXMLElement
的课程:
class MyXML extends SimpleXMLElement {
public function cdata($text) {
$node = dom_import_simplexml($this);
$owner = $node->ownerDocument;
$node->appendChild($owner->createCDATASection($text));
return $this;
}
}
由于它是SimpleXMLElement
,我可以在其中动态创建XML节点:
$xml = new MyXML('<foo/>');
$xml->bar = 'Test';
print $xml->asXML(); // <foo><bar>Test</bar></foo>
但是当我尝试运行时:
$xml = new MyXML('<foo/>');
$xml->bar->cdata('Test');
我明白了:
Warning: dom_import_simplexml(): Invalid Nodetype to import in [..]
但是,如果我在运行SimpleXMLElement
之前强制创建cdata()
节点,它会再次起作用:
$xml = new MyXML('<foo/>');
$xml->bar = '';
$xml->bar->cdata('Test');
print $xml->asXML(); // <foo><bar><![CDATA[Test]]></bar></foo>
我很好奇,如果我发现的是一个错误,并且如果有任何方法可以解决它而不首先“启动”节点。