Ao instanciar um DOMDocument personalizado, a
propriedade ownerDocument se referirá à classe instanciada.
No entanto, se todas as referências a essa classe forem removidas,
ela será destruída e um novo DOMDocument será
criado. Por esse motivo, pode-se usar
DOMDocument::registerNodeClass() com
DOMDocument
<?php
class MyDOMDocument extends DOMDocument {
}
class MyOtherDOMDocument extends DOMDocument {
}
// Crie MyDOMDocument com algum XML
$doc = new MyDOMDocument;
$doc->loadXML("<root><element><child>text in child</child></element></root>");
$child = $doc->getElementsByTagName("child")->item(0);
// O proprietário atual do nó é MyDOMDocument
var_dump(get_class($child->ownerDocument));
// MyDOMDocument é destruído
unset($doc);
// E uma nova instância DOMDocument é criada
var_dump(get_class($child->ownerDocument));
// Importe um nó de MyDOMDocument
$newdoc = new MyOtherDOMDocument;
$child = $newdoc->importNode($child);
// Registre DOMDocument personalizado
$newdoc->registerNodeClass("DOMDocument", "MyOtherDOMDocument");
var_dump(get_class($child->ownerDocument));
unset($doc);
// Nova instância MyOtherDOMDocument é criada
var_dump(get_class($child->ownerDocument));
?>
O exemplo acima produzirá:
string(13) "MyDOMDocument"
string(11) "DOMDocument"
string(18) "MyOtherDOMDocument"
string(18) "MyOtherDOMDocument"