DomDocument::DomDocument( const DomString &namespace_uri, const DomString &qualified_name, const DomDocumentType &document_type) : DomNode(std::shared_ptr<DomNode_Impl>(new DomDocument_Impl)) { impl->owner_document = impl; DomElement element = create_element(qualified_name); element.set_attribute("xmlns:" + element.get_prefix(), qualified_name); append_child(element); DomDocument_Impl *doc = dynamic_cast<DomDocument_Impl *>(impl.get()); const DomDocument_Impl *doctype = dynamic_cast<const DomDocument_Impl *>(document_type.impl.get()); doc->public_id = doctype->public_id; doc->system_id = doctype->system_id; }