X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fxmlquery.c;h=994a90e60c722f29763e9487b200de304c7d00f7;hb=be821514c869d68186361b5aab6bbfd1aa60e087;hp=77184ee13a44d0c9c286431ea423bc70b4fe3a51;hpb=626ee9b09c95c3585c432623c042872b0d1fea92;p=yaz-moved-to-github.git diff --git a/src/xmlquery.c b/src/xmlquery.c index 77184ee..994a90e 100644 --- a/src/xmlquery.c +++ b/src/xmlquery.c @@ -1,8 +1,8 @@ /* - * Copyright (C) 1995-2005, Index Data ApS + * Copyright (C) 1995-2007, Index Data ApS * All rights reserved. * - * $Id: xmlquery.c,v 1.7 2006-04-19 10:05:03 adam Exp $ + * $Id: xmlquery.c,v 1.13 2007-04-12 13:52:57 adam Exp $ */ /** \file xmlquery.c @@ -13,24 +13,25 @@ #include #include -#if HAVE_XML2 +#if YAZ_HAVE_XML2 #include #include #include #include +#include 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) @@ -227,9 +228,14 @@ xmlNodePtr yaz_query2xml_rpnstructure(const Z_RPNStructure *zs, 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); } @@ -248,18 +254,17 @@ xmlNodePtr yaz_query2xml_cql(const char *cql, xmlNodePtr node) 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); @@ -452,8 +457,10 @@ void yaz_xml2query_attribute_element(const xmlNode *ptr, *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); @@ -500,19 +507,7 @@ void yaz_xml2query_attribute_element(const xmlNode *ptr, 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, @@ -723,7 +718,8 @@ void yaz_xml2query_rpn(const xmlNode *ptr, Z_RPNQuery **query, ODR odr, *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, @@ -789,7 +785,7 @@ void yaz_xml2query(const void *xmlnodep, Z_Query **query, ODR odr, yaz_xml2query_(xmlnodep, query, odr, error_code, addinfo); } -/* HAVE_XML2 */ +/* YAZ_HAVE_XML2 */ #endif /*