Diff for /parser3/src/classes/xnode.C between versions 1.65 and 1.71

version 1.65, 2004/02/11 15:33:13 version 1.71, 2005/08/09 08:14:48
Line 1 Line 1
 /** @file  /** @file
         Parser: @b dom parser class.          Parser: @b dom parser class.
   
         Copyright (c) 2001-2004 ArtLebedev Group (http://www.artlebedev.com)          Copyright (c) 2001-2005 ArtLebedev Group (http://www.artlebedev.com)
         Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)          Author: Alexandr Petrosian <paf@design.ru> (http://paf.design.ru)
 */  */
 #include "classes.h"  #include "classes.h"
Line 19  static const char * const IDENT_XNODE_C= Line 19  static const char * const IDENT_XNODE_C=
 #include "pa_xml_exception.h"  #include "pa_xml_exception.h"
   
 #include "xnode.h"  #include "xnode.h"
   
 extern "C" {  
 #include "gdomecore/gdome-xml-node.h"  
 #include "gdomecore/gdome-xml-document.h"  
 };  
 #include "gdome.h"  
 #include "libxml/xpath.h"  #include "libxml/xpath.h"
   #include "libxml/xpathInternals.h"
   
 // global variable  // global variable
   
Line 144  static void _insertBefore(Request& r, Me Line 139  static void _insertBefore(Request& r, Me
         GdomeException exc;          GdomeException exc;
         if(GdomeNode* retNode=gdome_n_insertBefore(selfNode, newChild, refChild, &exc)) {          if(GdomeNode* retNode=gdome_n_insertBefore(selfNode, newChild, refChild, &exc)) {
                 // write out result                  // write out result
                 r.write_no_lang(*new VXnode(&r.charsets, retNode));                  r.write_no_lang(*new VXnode(&r.charsets, vnode.get_xdoc(), retNode));
         } else          } else
                 throw XmlException(0, exc);                  throw XmlException(0, exc);
 }  }
Line 159  static void _replaceChild(Request& r, Me Line 154  static void _replaceChild(Request& r, Me
         GdomeException exc;          GdomeException exc;
         if(GdomeNode* retNode=gdome_n_replaceChild(selfNode, newChild, oldChild, &exc)) {          if(GdomeNode* retNode=gdome_n_replaceChild(selfNode, newChild, oldChild, &exc)) {
                 // write out result                  // write out result
                 r.write_no_lang(*new VXnode(&r.charsets, retNode));                  r.write_no_lang(*new VXnode(&r.charsets, vnode.get_xdoc(), retNode));
         } else          } else
                 throw XmlException(0, exc);                  throw XmlException(0, exc);
 }  }
Line 173  static void _removeChild(Request& r, Met Line 168  static void _removeChild(Request& r, Met
         GdomeException exc;          GdomeException exc;
         if(GdomeNode* retNode=gdome_n_removeChild(selfNode, oldChild, &exc)) {          if(GdomeNode* retNode=gdome_n_removeChild(selfNode, oldChild, &exc)) {
                 // write out result                  // write out result
                 r.write_no_lang(*new VXnode(&r.charsets, retNode));                  r.write_no_lang(*new VXnode(&r.charsets, vnode.get_xdoc(), retNode));
         } else          } else
                 throw XmlException(0, exc);                  throw XmlException(0, exc);
 }  }
Line 187  static void _appendChild(Request& r, Met Line 182  static void _appendChild(Request& r, Met
         GdomeException exc;          GdomeException exc;
         if(GdomeNode* retNode=gdome_n_appendChild(selfNode, newChild, &exc)) {          if(GdomeNode* retNode=gdome_n_appendChild(selfNode, newChild, &exc)) {
                 // write out result                  // write out result
                 r.write_no_lang(*new VXnode(&r.charsets, retNode));                               r.write_no_lang(*new VXnode(&r.charsets, vnode.get_xdoc(), retNode));
         }  else          }  else
                 throw XmlException(0, exc);                  throw XmlException(0, exc);
 }  }
Line 212  static void _cloneNode(Request& r, Metho Line 207  static void _cloneNode(Request& r, Metho
   
         GdomeException exc;          GdomeException exc;
         // write out result          // write out result
         r.write_no_lang(*new VXnode(&r.charsets, gdome_n_cloneNode(node, deep, &exc)));          r.write_no_lang(*new VXnode(&r.charsets, vnode.get_xdoc(), gdome_n_cloneNode(node, deep, &exc)));
 }  }
   
 // DOM1 element  // DOM1 element
   
 GdomeElement* get_self_element(Request& r) {  GdomeElement* get_self_element(VXnode& vnode) {
         VXnode& vnode=GET_SELF(r, VXnode);  
         GdomeNode* node=vnode.get_node();          GdomeNode* node=vnode.get_node();
   
         GdomeException exc;          GdomeException exc;
Line 234  GdomeElement* get_self_element(Request& Line 228  GdomeElement* get_self_element(Request&
   
 /// @bug attribute_value must be freed!  [// DOMString getAttribute(in DOMString name);  /// @bug attribute_value must be freed!  [// DOMString getAttribute(in DOMString name);
 static void _getAttribute(Request& r, MethodParams& params) {  static void _getAttribute(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
         const String& name=params.as_string(0, "name must be string");          const String& name=params.as_string(0, "name must be string");
   
         GdomeException exc;          GdomeException exc;
         GdomeDOMString *attribute_value=          GdomeDOMString *attribute_value=
                 gdome_el_getAttribute(element, r.transcode(name).use(), &exc);                  gdome_el_getAttribute(element, r.transcode(name).use(), &exc);
         // write out result          // write out result
         r.write_no_lang(r.transcode(attribute_value));          r.write_pass_lang(r.transcode(attribute_value));
 }  }
   
 // void setAttribute(in DOMString name, in DOMString value) raises(DOMException);  // void setAttribute(in DOMString name, in DOMString value) raises(DOMException);
 static void _setAttribute(Request& r, MethodParams& params) {  static void _setAttribute(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
         const String& name=params.as_string(0, "name must be string");          const String& name=params.as_string(0, "name must be string");
         const String& attribute_value=params.as_string(1, "value must be string");          const String& attribute_value=params.as_string(1, "value must be string");
   
Line 261  static void _setAttribute(Request& r, Me Line 257  static void _setAttribute(Request& r, Me
   
 // void removeAttribute(in DOMString name) raises(DOMException);  // void removeAttribute(in DOMString name) raises(DOMException);
 static void _removeAttribute(Request& r, MethodParams& params) {  static void _removeAttribute(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
         const String& name=params.as_string(0, "name must be string");          const String& name=params.as_string(0, "name must be string");
   
         GdomeException exc;          GdomeException exc;
Line 272  static void _removeAttribute(Request& r, Line 269  static void _removeAttribute(Request& r,
   
 // Attr getAttributeNode(in DOMString name);  // Attr getAttributeNode(in DOMString name);
 static void _getAttributeNode(Request& r, MethodParams& params) {  static void _getAttributeNode(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
         const String& name=params.as_string(0, "name must be string");          const String& name=params.as_string(0, "name must be string");
   
         GdomeException exc;          GdomeException exc;
         if(GdomeAttr *attr=gdome_el_getAttributeNode(element,           if(GdomeAttr *attr=gdome_el_getAttributeNode(element, 
                 r.transcode(name).use(), &exc)) {                  r.transcode(name).use(), &exc)) {
                 // write out result                  // write out result
                 r.write_no_lang(*new VXnode(&r.charsets, (GdomeNode* )attr));                  r.write_no_lang(*new VXnode(&r.charsets, vnode.get_xdoc(), (GdomeNode* )attr));
         } else if(exc)          } else if(exc)
                 throw XmlException(0, exc);                  throw XmlException(0, exc);
 }         }       
   
 // Attr setAttributeNode(in Attr newAttr) raises(DOMException);  // Attr setAttributeNode(in Attr newAttr) raises(DOMException);
 static void _setAttributeNode(Request& r, MethodParams& params) {  static void _setAttributeNode(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
         GdomeAttr * newAttr=as_attr(params, 0, "newAttr must be ATTRIBUTE node");          GdomeAttr * newAttr=as_attr(params, 0, "newAttr must be ATTRIBUTE node");
   
         GdomeException exc;          GdomeException exc;
         if(GdomeAttr *returnAttr=gdome_el_setAttributeNode(element, newAttr, &exc)) {          if(GdomeAttr *returnAttr=gdome_el_setAttributeNode(element, newAttr, &exc)) {
                 // write out result                  // write out result
                 r.write_no_lang(*new VXnode(&r.charsets, (GdomeNode* )returnAttr));                  r.write_no_lang(*new VXnode(&r.charsets, vnode.get_xdoc(), (GdomeNode* )returnAttr));
         } else          } else
                 throw XmlException(0, exc);                  throw XmlException(0, exc);
 }         }       
   
 // Attr removeAttributeNode(in Attr oldAttr) raises(DOMException);  // Attr removeAttributeNode(in Attr oldAttr) raises(DOMException);
 static void _removeAttributeNode(Request& r, MethodParams& params) {  static void _removeAttributeNode(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
         GdomeAttr * oldAttr=as_attr(params, 0, "oldAttr must be ATTRIBUTE node");          GdomeAttr * oldAttr=as_attr(params, 0, "oldAttr must be ATTRIBUTE node");
   
         GdomeException exc;          GdomeException exc;
Line 310  static void _removeAttributeNode(Request Line 310  static void _removeAttributeNode(Request
   
 // NodeList getElementsByTagName(in DOMString name);  // NodeList getElementsByTagName(in DOMString name);
 static void _getElementsByTagName(Request& r, MethodParams& params) {  static void _getElementsByTagName(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
   
         const String& name=params.as_string(0, "name must be string");          const String& name=params.as_string(0, "name must be string");
   
Line 322  static void _getElementsByTagName(Reques Line 323  static void _getElementsByTagName(Reques
                 for(gulong i=0; i<length; i++)                  for(gulong i=0; i<length; i++)
                         result.hash().put(                          result.hash().put(
                                 String::Body::Format(i),                                   String::Body::Format(i), 
                                 new VXnode(&r.charsets, gdome_nl_item(nodes, i, &exc)));                                  new VXnode(&r.charsets, vnode.get_xdoc(), gdome_nl_item(nodes, i, &exc)));
         } else if(exc)          } else if(exc)
                 throw XmlException(0, exc);                  throw XmlException(0, exc);
   
Line 334  static void _getElementsByTagName(Reques Line 335  static void _getElementsByTagName(Reques
   
 // DOMString getAttributeNS(in DOMString namespaceURI, in DOMString localName);  // DOMString getAttributeNS(in DOMString namespaceURI, in DOMString localName);
 static void _getAttributeNS(Request& r, MethodParams& params) {  static void _getAttributeNS(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
                   
         const String& namespaceURI=params.as_string(0, "namespaceURI must be string");          const String& namespaceURI=params.as_string(0, "namespaceURI must be string");
         const String& localName=params.as_string(0, "localName must be string");          const String& localName=params.as_string(0, "localName must be string");
Line 345  static void _getAttributeNS(Request& r, Line 347  static void _getAttributeNS(Request& r,
                         r.transcode(namespaceURI).use(),                          r.transcode(namespaceURI).use(),
                         r.transcode(localName).use(), &exc);                          r.transcode(localName).use(), &exc);
         // write out result          // write out result
         r.write_no_lang(r.transcode(attribute_value));          r.write_pass_lang(r.transcode(attribute_value));
 }  }
   
 // void setAttributeNS(in DOMString namespaceURI, in DOMString qualifiedName, in DOMString value) raises(DOMException);  // void setAttributeNS(in DOMString namespaceURI, in DOMString qualifiedName, in DOMString value) raises(DOMException);
 static void _setAttributeNS(Request& r, MethodParams& params) {  static void _setAttributeNS(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
         const String& namespaceURI=params.as_string(0, "namespaceURI must be string");          const String& namespaceURI=params.as_string(0, "namespaceURI must be string");
         const String& qualifiedName=params.as_string(1, "qualifiedName must be string");          const String& qualifiedName=params.as_string(1, "qualifiedName must be string");
         const String& attribute_value=params.as_string(2, "value must be string");          const String& attribute_value=params.as_string(2, "value must be string");
Line 367  static void _setAttributeNS(Request& r, Line 370  static void _setAttributeNS(Request& r,
   
 // void removeAttributeNS(in DOMString namespaceURI, in DOMString localName) raises(DOMException);  // void removeAttributeNS(in DOMString namespaceURI, in DOMString localName) raises(DOMException);
 static void _removeAttributeNS(Request& r, MethodParams& params) {  static void _removeAttributeNS(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
         const String& namespaceURI=params.as_string(0, "namespaceURI must be string");          const String& namespaceURI=params.as_string(0, "namespaceURI must be string");
         const String& localName=params.as_string(1, "localName must be string");          const String& localName=params.as_string(1, "localName must be string");
   
Line 382  static void _removeAttributeNS(Request& Line 386  static void _removeAttributeNS(Request&
   
 // Attr getAttributeNodeNS(in DOMString namespaceURI, in DOMString localName);  // Attr getAttributeNodeNS(in DOMString namespaceURI, in DOMString localName);
 static void _getAttributeNodeNS(Request& r, MethodParams& params) {  static void _getAttributeNodeNS(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
         const String& namespaceURI=params.as_string(0, "namespaceURI must be string");          const String& namespaceURI=params.as_string(0, "namespaceURI must be string");
         const String& name=params.as_string(1, "name must be string");          const String& name=params.as_string(1, "name must be string");
   
Line 390  static void _getAttributeNodeNS(Request& Line 395  static void _getAttributeNodeNS(Request&
         if(GdomeAttr *attr=gdome_el_getAttributeNodeNS(element,           if(GdomeAttr *attr=gdome_el_getAttributeNodeNS(element, 
                 r.transcode(namespaceURI).use(), r.transcode(name).use(), &exc)) {                  r.transcode(namespaceURI).use(), r.transcode(name).use(), &exc)) {
                 // write out result                  // write out result
                 r.write_no_lang(*new VXnode(&r.charsets, (GdomeNode* )attr));                  r.write_no_lang(*new VXnode(&r.charsets, vnode.get_xdoc(), (GdomeNode* )attr));
         } else if(exc)          } else if(exc)
                 throw XmlException(0, exc);                  throw XmlException(0, exc);
 }  }
   
 // Attr setAttributeNodeNS(in Attr newAttr) raises(DOMException);  // Attr setAttributeNodeNS(in Attr newAttr) raises(DOMException);
 static void _setAttributeNodeNS(Request& r, MethodParams& params) {  static void _setAttributeNodeNS(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
         GdomeAttr * newAttr=as_attr(params, 0, "newAttr must be ATTRIBUTE node");          GdomeAttr * newAttr=as_attr(params, 0, "newAttr must be ATTRIBUTE node");
   
         GdomeException exc;          GdomeException exc;
         if(GdomeAttr *returnAttr=gdome_el_setAttributeNodeNS(element, newAttr, &exc)) {          if(GdomeAttr *returnAttr=gdome_el_setAttributeNodeNS(element, newAttr, &exc)) {
                 // write out result                  // write out result
                 r.write_no_lang(*new VXnode(&r.charsets, (GdomeNode* )returnAttr));                  r.write_no_lang(*new VXnode(&r.charsets, vnode.get_xdoc(), (GdomeNode* )returnAttr));
         } else          } else
                 throw XmlException(0, exc);                  throw XmlException(0, exc);
 }  }
   
 // boolean hasAttribute(in DOMString name) raises(DOMException);  // boolean hasAttribute(in DOMString name) raises(DOMException);
 static void _hasAttribute(Request& r, MethodParams& params) {  static void _hasAttribute(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
   
         const String& name=params.as_string(0, "name must be string");          const String& name=params.as_string(0, "name must be string");
   
Line 424  static void _hasAttribute(Request& r, Me Line 431  static void _hasAttribute(Request& r, Me
   
 // boolean hasAttributeNS(n DOMString namespaceURI, in DOMString localName) raises(DOMException);  // boolean hasAttributeNS(n DOMString namespaceURI, in DOMString localName) raises(DOMException);
 static void _hasAttributeNS(Request& r, MethodParams& params) {  static void _hasAttributeNS(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
   
         const String& namespaceURI=params.as_string(0, "namespaceURI must be string");          const String& namespaceURI=params.as_string(0, "namespaceURI must be string");
         const String& localName=params.as_string(1, "localName must be string");          const String& localName=params.as_string(1, "localName must be string");
Line 439  static void _hasAttributeNS(Request& r, Line 447  static void _hasAttributeNS(Request& r,
 }  }
   
 static void _getElementsByTagNameNS(Request& r, MethodParams& params) {  static void _getElementsByTagNameNS(Request& r, MethodParams& params) {
         GdomeElement* element=get_self_element(r);          VXnode& vnode=GET_SELF(r, VXnode);
           GdomeElement* element=get_self_element(vnode);
   
         // namespaceURI;localName          // namespaceURI;localName
         const String& namespaceURI=params.as_string(0, "namespaceURI must be string");          const String& namespaceURI=params.as_string(0, "namespaceURI must be string");
Line 457  static void _getElementsByTagNameNS(Requ Line 466  static void _getElementsByTagNameNS(Requ
                 for(gulong i=0; i<length; i++)                  for(gulong i=0; i<length; i++)
                         result.hash().put(                          result.hash().put(
                                 String::Body::Format(i),                                   String::Body::Format(i), 
                                 new VXnode(&r.charsets, gdome_nl_item(nodes, i, &exc)));                                  new VXnode(&r.charsets, vnode.get_xdoc(), gdome_nl_item(nodes, i, &exc)));
         }          }
   
         // write out result          // write out result
Line 475  static void _normalize(Request& r, Metho Line 484  static void _normalize(Request& r, Metho
                 throw XmlException(0, exc);                  throw XmlException(0, exc);
 }  }
   
   #ifndef DOXYGEN
   struct Register_one_ns_info {
           Request* r;
           xmlXPathContextPtr ctxt;
   };
   #endif
   static void register_one_ns(
                                                                     HashStringValue::key_type key, 
                                                                     HashStringValue::value_type value, 
                                                                     Register_one_ns_info* info) {
           if(const String* svalue=value->get_string())
                   xmlXPathRegisterNs(info->ctxt, 
                           BAD_CAST info->r->transcode(key)->str, 
                           BAD_CAST info->r->transcode(*svalue)->str);
           else
                   throw Exception("parser.runtime",
                           new String(key, String::L_TAINTED),
                           "value is %s, must be string or number", value->type());
   }
 static void _selectX(Request& r, MethodParams& params,  static void _selectX(Request& r, MethodParams& params,
                                          void (*handler)(Request& r,                                           void (*handler)(Request& r,
                                                           const String& expression,                                                             const String& expression, 
                                                           xmlXPathObject_auto_ptr res,                                                            xmlXPathObject_auto_ptr res,
                                                             VXdoc& xdoc,
                                                           Value*& result)) {                                                            Value*& result)) {
         VXnode& vnode=GET_SELF(r, VXnode);          VXnode& vnode=GET_SELF(r, VXnode);
   
         // expression          // expression
         const String& expression=params.as_string(0, "expression must be string");          const String& expression=params.as_string(0, "expression must be string");
   
         GdomeException exc;          GdomeException exc;
         GdomeNode* dome_node=vnode.get_node();          GdomeNode* dome_node=vnode.get_node();
         GdomeDocument *dome_document=gdome_n_ownerDocument(dome_node, &exc);          GdomeDocument *dome_document=gdome_n_ownerDocument(dome_node, &exc);
Line 492  static void _selectX(Request& r, MethodP Line 520  static void _selectX(Request& r, MethodP
                 dome_document=GDOME_DOC(dome_node); // and we need downcast                  dome_document=GDOME_DOC(dome_node); // and we need downcast
         xmlDoc *xml_document=gdome_xml_doc_get_xmlDoc(dome_document);          xmlDoc *xml_document=gdome_xml_doc_get_xmlDoc(dome_document);
         xmlXPathContext_auto_ptr ctxt(xmlXPathNewContext(xml_document));          xmlXPathContext_auto_ptr ctxt(xmlXPathNewContext(xml_document));
           {
                   Register_one_ns_info info={&r, ctxt.get()};
                   vnode.get_xdoc().search_namespaces.hash().for_each(register_one_ns, &info);
           }
         ctxt->node=gdome_xml_n_get_xmlNode(dome_node);          ctxt->node=gdome_xml_n_get_xmlNode(dome_node);
         /*error to stderr for now*/          /*error to stderr for now*/
         xmlXPathObject_auto_ptr res(          xmlXPathObject_auto_ptr res(
Line 504  static void _selectX(Request& r, MethodP Line 536  static void _selectX(Request& r, MethodP
   
         Value* result=0;          Value* result=0;
         if(res.get())          if(res.get())
                 handler(r, expression, res, result);                  handler(r, expression, res, vnode.get_xdoc(), result);
         if(result)          if(result)
                 r.write_no_lang(*result);                  r.write_no_lang(*result);
 }  }
Line 512  static void _selectX(Request& r, MethodP Line 544  static void _selectX(Request& r, MethodP
 static void selectNodesHandler(Request& r,  static void selectNodesHandler(Request& r,
                                const String& expression,                                 const String& expression,
                                xmlXPathObject_auto_ptr res,                                 xmlXPathObject_auto_ptr res,
                                      VXdoc& xdoc,
                                Value*& result) {                                 Value*& result) {
         VHash& vhash=*new VHash;  result=&vhash;          VHash& vhash=*new VHash;  result=&vhash;
         switch(res->type) {          switch(res->type) {
Line 526  static void selectNodesHandler(Request& Line 559  static void selectNodesHandler(Request&
                                                 String::Body::Format(i),                                                   String::Body::Format(i), 
                                                 new VXnode(                                                  new VXnode(
                                                         &r.charsets,                                                           &r.charsets, 
                                                           xdoc,
                                                         gdome_xml_n_mkref(res->nodesetval->nodeTab[i])));                                                          gdome_xml_n_mkref(res->nodesetval->nodeTab[i])));
                         }                          }
                 break;                  break;
Line 539  static void selectNodesHandler(Request& Line 573  static void selectNodesHandler(Request&
   
 static void selectNodeHandler(Request& r,  static void selectNodeHandler(Request& r,
                               const String& expression,                                const String& expression,
                               xmlXPathObject_auto_ptr res,                                    xmlXPathObject_auto_ptr res,
                               Value*& result) {                                    VXdoc& xdoc,
                                     Value*& result) {
         switch(res->type) {          switch(res->type) {
         case XPATH_UNDEFINED:           case XPATH_UNDEFINED: 
                 break;                  break;
Line 553  static void selectNodeHandler(Request& r Line 588  static void selectNodeHandler(Request& r
                                                   
                         result=new VXnode(                          result=new VXnode(
                                 &r.charsets,                                   &r.charsets, 
                                   xdoc,
                                 gdome_xml_n_mkref(res->nodesetval->nodeTab[0]));                                  gdome_xml_n_mkref(res->nodesetval->nodeTab[0]));
                 }                  }
                 break;                  break;
Line 577  static void selectNodeHandler(Request& r Line 613  static void selectNodeHandler(Request& r
 static void selectBoolHandler(Request&,  static void selectBoolHandler(Request&,
                               const String& expression,                                const String& expression,
                               xmlXPathObject_auto_ptr res,                                xmlXPathObject_auto_ptr res,
                                     VXdoc& /*xdoc*/,
                               Value*& result) {                                Value*& result) {
         switch(res->type) {          switch(res->type) {
         case XPATH_BOOLEAN:           case XPATH_BOOLEAN: 
Line 597  static void selectBoolHandler(Request&, Line 634  static void selectBoolHandler(Request&,
 static void selectNumberHandler(Request&,  static void selectNumberHandler(Request&,
                                 const String& expression,                                  const String& expression,
                                 xmlXPathObject_auto_ptr res,                                  xmlXPathObject_auto_ptr res,
                                   VXdoc& /*xdoc*/,
                                 Value*& result) {                                  Value*& result) {
         switch(res->type) {          switch(res->type) {
         case XPATH_NUMBER:           case XPATH_NUMBER: 
Line 617  static void selectNumberHandler(Request& Line 655  static void selectNumberHandler(Request&
 static void selectStringHandler(Request& r,  static void selectStringHandler(Request& r,
                                                           const String& expression,                                                            const String& expression,
                                                           xmlXPathObject_auto_ptr res,                                                            xmlXPathObject_auto_ptr res,
                                                             VXdoc& /*xdoc*/,
                                                           Value*& result) {                                                            Value*& result) {
         switch(res->type) {          switch(res->type) {
         case XPATH_UNDEFINED:           case XPATH_UNDEFINED: 

Removed from v.1.65  
changed lines
  Added in v.1.71


E-mail: