Added detach() method to strip off a root parent element, fixed bug in namespace...
[shibboleth/cpp-xmltooling.git] / xmltooling / AbstractDOMCachingXMLObject.cpp
index 77d508b..bee23c2 100644 (file)
@@ -130,3 +130,24 @@ XMLObject* AbstractDOMCachingXMLObject::clone() const
     }\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