Al instanciar un DOMDocument
personalizado, la propiedad ownerDocument se refiere
a la clase instanciada. Sin embargo, si todas las referencias a esta clase
son eliminadas, será destruida y una nueva instancia de
DOMDocument será creada en su lugar. Por esta razón,
puede utilizarse el método DOMDocument::registerNodeClass()
con DOMDocument
<?php
class MyDOMDocument extends DOMDocument {
}
class MyOtherDOMDocument extends DOMDocument {
}
// Creación de un documento MyDOMDocument con algunos fragmentos XML
$doc = new MyDOMDocument;
$doc->loadXML("<root><element><child>texto en un hijo</child></element></root>");
$child = $doc->getElementsByTagName("child")->item(0);
// El propietario actual del nodo es MyDOMDocument
var_dump(get_class($child->ownerDocument));
// MyDOMDocument es destruido
unset($doc);
// Y una nueva instancia de DOMDocument es creada
var_dump(get_class($child->ownerDocument));
// Importación de un nodo desde MyDOMDocument
$newdoc = new MyOtherDOMDocument;
$child = $newdoc->importNode($child);
// Registra un DOMDocument personalizado
$newdoc->registerNodeClass("DOMDocument", "MyOtherDOMDocument");
var_dump(get_class($child->ownerDocument));
unset($doc);
// Un nuevo MyOtherDOMDocument es creado
var_dump(get_class($child->ownerDocument));
?>
El ejemplo anterior mostrará:
string(13) "MyDOMDocument"
string(11) "DOMDocument"
string(18) "MyOtherDOMDocument"
string(18) "MyOtherDOMDocument"