-/*
- * Copyright (C) 1995-2005, Index Data ApS
- * All rights reserved.
- *
- * $Id: xmlquery.c,v 1.6 2006-02-23 13:09:54 adam Exp $
+/* This file is part of the YAZ toolkit.
+ * Copyright (C) 1995-2008 Index Data
+ * See the file LICENSE for details.
*/
-/**
- * \file querytostr.c
- * \brief Query / XML conversions
- */
+/** \file xmlquery.c
+ \brief Query / XML conversions
+*/
#include <stdio.h>
#include <string.h>
#include <assert.h>
-#if HAVE_XML2
+#if YAZ_HAVE_XML2
#include <libxml/parser.h>
#include <libxml/tree.h>
#include <yaz/logrpn.h>
#include <yaz/xmlquery.h>
+#include <yaz/nmem_xml.h>
+#include <yaz/oid_db.h>
void yaz_query2xml_attribute_element(const Z_AttributeElement *element,
xmlNodePtr parent)
{
char formstr[30];
const char *setname = 0;
+ char oid_name_str[OID_STR_MAX];
if (element->attributeSet)
{
- oident *attrset;
- attrset = oid_getentbyoid (element->attributeSet);
- setname = attrset->desc;
+ setname = yaz_oid_to_string_buf(element->attributeSet,
+ 0, oid_name_str);
}
if (element->which == Z_AttributeValue_numeric)
xmlNodePtr yaz_query2xml_rpn(const Z_RPNQuery *rpn, xmlNodePtr parent)
{
- oident *attrset = oid_getentbyoid (rpn->attributeSetId);
- if (attrset && attrset->value)
- xmlNewProp(parent, BAD_CAST "set", BAD_CAST attrset->desc);
+ if (rpn->attributeSetId)
+ {
+ char oid_name_str[OID_STR_MAX];
+ const char *setname = yaz_oid_to_string_buf(rpn->attributeSetId,
+ 0, oid_name_str);
+ if (setname)
+ xmlNewProp(parent, BAD_CAST "set", BAD_CAST setname);
+ }
return yaz_query2xml_rpnstructure(rpn->RPNStructure, parent);
}
return 0;
}
-void yaz_rpnquery2xml(const Z_RPNQuery *rpn, void *docp_void)
+void yaz_rpnquery2xml(const Z_RPNQuery *rpn, xmlDocPtr *docp)
{
Z_Query query;
query.which = Z_Query_type_1;
query.u.type_1 = (Z_RPNQuery *) rpn;
- yaz_query2xml(&query, docp_void);
+ yaz_query2xml(&query, docp);
}
-void yaz_query2xml(const Z_Query *q, void *docp_void)
+void yaz_query2xml(const Z_Query *q, xmlDocPtr *docp)
{
- xmlDocPtr *docp = (xmlDocPtr *) docp_void;
xmlNodePtr top_node, q_node = 0, child_node = 0;
assert(q);
*elem = (Z_AttributeElement *) odr_malloc(odr, sizeof(**elem));
if (set)
- (*elem)->attributeSet = yaz_str_to_z3950oid(odr, CLASS_ATTSET,
- (const char *)set);
+ (*elem)->attributeSet = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_ATTSET,
+ (const char *) set,
+ odr);
else
(*elem)->attributeSet = 0;
(*elem)->attributeType = intVal(odr, (const char *) type);
char *strVal(const xmlNode *ptr_cdata, ODR odr)
{
- char *cdata;
- int len = 0;
- const xmlNode *ptr;
-
- for (ptr = ptr_cdata; ptr; ptr = ptr->next)
- if (ptr->type == XML_TEXT_NODE)
- len += xmlStrlen(ptr->content);
- cdata = (char *) odr_malloc(odr, len+1);
- *cdata = '\0';
- for (ptr = ptr_cdata; ptr; ptr = ptr->next)
- if (ptr->type == XML_TEXT_NODE)
- strcat(cdata, (const char *) ptr->content);
- return cdata;
+ return nmem_text_node_cdata(ptr_cdata, odr_getmem(odr));
}
void yaz_xml2query_term(const xmlNode *ptr,
*zs = (Z_RPNStructure *) odr_malloc(odr, sizeof(Z_RPNStructure));
if (!xmlStrcmp(ptr->name, BAD_CAST "operator"))
{
- Z_Complex *zc = odr_malloc(odr, sizeof(Z_Complex));
+ Z_Complex *zc = (Z_Complex *) odr_malloc(odr, sizeof(Z_Complex));
(*zs)->which = Z_RPNStructure_complex;
(*zs)->u.complex = zc;
*query = (Z_RPNQuery*) odr_malloc(odr, sizeof(Z_RPNQuery));
if (set)
- (*query)->attributeSetId = yaz_str_to_z3950oid(odr, CLASS_ATTSET, set);
+ (*query)->attributeSetId = yaz_string_to_oid_odr(yaz_oid_std(),
+ CLASS_ATTSET, set, odr);
else
(*query)->attributeSetId = 0;
yaz_xml2query_rpnstructure(ptr->children, &(*query)->RPNStructure,
}
}
-void yaz_xml2query(const void *xmlnodep, Z_Query **query, ODR odr,
+void yaz_xml2query(const xmlNode *xmlnodep, Z_Query **query, ODR odr,
int *error_code, const char **addinfo)
{
yaz_xml2query_(xmlnodep, query, odr, error_code, addinfo);
}
-/* HAVE_XML2 */
+/* YAZ_HAVE_XML2 */
#endif
/*