}\r
return NULL;\r
}\r
+\r
+void AbstractDOMCachingXMLObject::detach()\r
+{\r
+ // This is an override that duplicates some of the checking in the base class but\r
+ // adds document management in preparation for deletion of the parent.\r
+\r
+ if (!getParent())\r
+ return;\r
+\r
+ if (getParent()->hasParent())\r
+ throw XMLObjectException("Cannot detach an object whose parent is itself a child.");\r
+\r
+ AbstractDOMCachingXMLObject* parent = dynamic_cast<AbstractDOMCachingXMLObject*>(getParent());\r
+ if (parent && parent->m_document) {\r
+ // Transfer control of document to me...\r
+ setDocument(parent->m_document);\r
+ parent->m_document = NULL;\r
+ }\r
+ // The rest is done by the base.\r
+ AbstractXMLObject::detach();\r
+}\r