static void xpathctx_finalize (value xpathctxv) { xmlXPathContextPtr xpathctx = Xpathctx_val (xpathctxv); if (xpathctx) xmlXPathFreeContext (xpathctx); }
value v2v_xml_xpathctx_set_node_ptr (value xpathctxv, value nodev) { CAMLparam2 (xpathctxv, nodev); xmlXPathContextPtr xpathctx = Xpathctx_val (xpathctxv); xmlNodePtr node = (xmlNodePtr) nodev; xpathctx->node = node; CAMLreturn (Val_unit); }
value v2v_xml_xpath_register_ns (value xpathctxv, value prefix, value uri) { CAMLparam3 (xpathctxv, prefix, uri); xmlXPathContextPtr xpathctx; int r; xpathctx = Xpathctx_val (xpathctxv); r = xmlXPathRegisterNs (xpathctx, BAD_CAST String_val (prefix), BAD_CAST String_val (uri)); if (r == -1) caml_invalid_argument ("xpath_register_ns: unable to register namespace"); CAMLreturn (Val_unit); }
value v2v_xml_xpath_eval_expression (value xpathctxv, value exprv) { CAMLparam2 (xpathctxv, exprv); CAMLlocal1 (xpathobjv); xmlXPathContextPtr xpathctx; xmlXPathObjectPtr xpathobj; xpathctx = Xpathctx_val (xpathctxv); xpathobj = xmlXPathEvalExpression (BAD_CAST String_val (exprv), xpathctx); if (xpathobj == NULL) caml_invalid_argument ("xpath_eval_expression: unable to evaluate XPath expression"); xpathobjv = caml_alloc_custom (&xpathobj_custom_operations, sizeof (xmlXPathObjectPtr), 0, 1); Xpathobj_val (xpathobjv) = xpathobj; CAMLreturn (xpathobjv); }
value v2v_xml_xpath_new_context (value docv) { CAMLparam1 (docv); CAMLlocal1 (xpathctxv); xmlDocPtr doc; xmlXPathContextPtr xpathctx; doc = Doc_val (docv); xpathctx = xmlXPathNewContext (doc); if (xpathctx == NULL) caml_invalid_argument ("xpath_new_context: unable to create xmlXPathNewContext"); xpathctxv = caml_alloc_custom (&xpathctx_custom_operations, sizeof (xmlXPathContextPtr), 0, 1); Xpathctx_val (xpathctxv) = xpathctx; CAMLreturn (xpathctxv); }