+ res->diagnostics = 0;
+ res->num_diagnostics = 0;
+
+ for (; ptr; ptr = ptr->next)
+ {
+ if (match_element(ptr, "record"))
+ yaz_srw_record(o, ptr, &res->record, client_data, ns);
+ else if (match_xsd_string(ptr, "version", o,
+ &(*p)->srw_version))
+ ;
+ else if (match_element(ptr, "diagnostics"))
+ yaz_srw_diagnostics(o, ptr, &res->diagnostics,
+ &res->num_diagnostics,
+ client_data, ns);
+ ;
+ }
+ }
+ else if (!strcmp(method->name, "scanRequest"))
+ {
+ Z_SRW_scanRequest *req;
+ xmlNodePtr ptr = method->children;
+
+ (*p)->which = Z_SRW_scan_request;
+ req = (*p)->u.scan_request = odr_malloc(o, sizeof(*req));
+ req->database = 0;
+ req->scanClause = 0;
+ req->stylesheet = 0;
+ req->responsePosition = 0;
+ req->maximumTerms = 0;
+
+ for (; ptr; ptr = ptr->next)
+ {
+ if (match_xsd_string(ptr, "version", o,
+ &(*p)->srw_version))
+ ;
+ else if (match_xsd_string(ptr, "scanClause", o,
+ &req->scanClause))
+ ;
+ else if (match_xsd_string(ptr, "database", o,
+ &req->database))
+ ;
+ else if (match_xsd_string(ptr, "stylesheet", o,
+ &req->stylesheet))
+ ;
+ else if (match_xsd_integer(ptr, "responsePosition", o,
+ &req->responsePosition))
+ ;
+ else if (match_xsd_integer(ptr, "maximumTerms", o,
+ &req->maximumTerms))
+ ;
+ }
+ }
+ else if (!strcmp(method->name, "scanResponse"))
+ {
+ Z_SRW_scanResponse *res;
+ xmlNodePtr ptr = method->children;
+
+ (*p)->which = Z_SRW_scan_response;
+ res = (*p)->u.scan_response = odr_malloc(o, sizeof(*res));
+ res->terms = 0;
+ res->num_terms = 0;
+ res->diagnostics = 0;
+ res->num_diagnostics = 0;
+
+ for (; ptr; ptr = ptr->next)
+ {
+ if (match_element(ptr, "terms"))
+ yaz_srw_terms(o, ptr, &res->terms,
+ &res->num_terms, client_data,
+ ns);
+ else if (match_element(ptr, "diagnostics"))
+ yaz_srw_diagnostics(o, ptr, &res->diagnostics,
+ &res->num_diagnostics,
+ client_data, ns);
+ else if (match_xsd_string(ptr, "version", o,
+ &(*p)->srw_version))
+ ;
+ }