--- parser3/src/classes/xdoc.C 2002/01/28 08:20:33 1.78 +++ parser3/src/classes/xdoc.C 2002/01/31 11:51:46 1.82 @@ -4,11 +4,18 @@ Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) Author: Alexander Petrosyan (http://paf.design.ru) - $Id: xdoc.C,v 1.78 2002/01/28 08:20:33 paf Exp $ + $Id: xdoc.C,v 1.82 2002/01/31 11:51:46 paf Exp $ */ -#include "pa_types.h" +#include "classes.h" #ifdef XML +#include "pa_stylesheet_connection.h" +#include "pa_request.h" +#include "pa_vxdoc.h" +#include "pa_charset.h" +#include "pa_vfile.h" +#include "xnode.h" + #include "gdome.h" #include "libxml/tree.h" extern "C" { @@ -19,15 +26,6 @@ extern "C" { #include "libxslt/transform.h" #include "libxslt/xsltutils.h" -#include "pa_stylesheet_connection.h" -#include "classes.h" -#include "pa_request.h" -#include "pa_vxdoc.h" -#include "pa_charset.h" -#include "pa_vfile.h" -#include "xnode.h" - - // defines #define XDOC_CLASS_NAME "xdoc" @@ -371,8 +369,29 @@ static void _getElementById(Request& r, &method_name, exc); } + +static void _importNode(Request& r, const String& method_name, MethodParams *params) { + Pool& pool=r.pool(); + VXdoc& vdoc=*static_cast(r.self); + + GdomeNode *importedNode= + as_node(pool, method_name, params, 0, "importedNode must be node"); + bool deep= + params->as_bool(1, "deep must be bool", r); + + GdomeException exc; + GdomeNode *outputNode=gdome_doc_importNode(vdoc.get_document(&method_name), + importedNode, + deep, &exc); + if(exc) + throw Exception(0, 0, + &method_name, + exc); + + // write out result + r.write_no_lang(*new(pool) VXnode(pool, outputNode)); +} /* -GdomeNode *gdome_doc_importNode (GdomeDocument *self, GdomeNode *importedNode, GdomeBoolean deep, GdomeException *exc); GdomeElement *gdome_doc_createElementNS (GdomeDocument *self, GdomeDOMString *namespaceURI, GdomeDOMString *qualifiedName, GdomeException *exc); GdomeAttr *gdome_doc_createAttributeNS (GdomeDocument *self, GdomeDOMString *namespaceURI, GdomeDOMString *qualifiedName, GdomeException *exc); */ @@ -797,11 +816,14 @@ MXdoc::MXdoc(Pool& apool) : MXnode(apool // ^xdoc.getElementsByTagNameNS[namespaceURI;localName] = array of nodes add_native_method("getElementsByTagNameNS", Method::CT_DYNAMIC, _getElementsByTagNameNS, 2, 2); - /// DOM2(?) + /// DOM2 // ^xdoc.getElementById[elementId] add_native_method("getElementById", Method::CT_DYNAMIC, _getElementById, 1, 1); + // Node (in Node importedNode, in boolean deep) raises(DOMException) + add_native_method("importNode", Method::CT_DYNAMIC, _importNode, 2, 2); + /// parser // ^xdoc::create{qualifiedName}