X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fzeerex.c;h=2340123271c5b763f661c3a5380fe79c97fb1245;hb=9a660575bb51d190608e5cdec416bb8a9acf3389;hp=2b0676021f8562350110070fa6fd4e26f87883f8;hpb=3c658db277708a717349cfb2603f4186be56beee;p=pazpar2-moved-to-github.git diff --git a/src/zeerex.c b/src/zeerex.c index 2b06760..2340123 100644 --- a/src/zeerex.c +++ b/src/zeerex.c @@ -1,4 +1,6 @@ -/* $Id: zeerex.c,v 1.3 2007-02-08 19:26:33 adam Exp $ */ +/* $Id: zeerex.c,v 1.4 2007-03-15 16:50:56 quinn Exp $ */ + +// Reads Zeerex records into a set of structures #include @@ -12,7 +14,7 @@ // Replace this with something that will take a callback static void fail(const char *s, xmlNode *n) { - yaz_log(YLOG_WARN, "Zeerex Err '%s' in elem '%s/%s'", s, n->parent->name, n->name); + yaz_log(YLOG_WARN, "Zeerex Err '%s'; elem '%s/%s'", s, n->parent->name, n->name); } // returns an nmem-allocated string if attr is present, or null @@ -107,6 +109,16 @@ static Zr_langstr *findlangstr(NMEM m, xmlNode *node, const char *name) return res; } +const char *zr_langstr(Zr_langstr *s, const char *lang) +{ + Zr_langstr *p; + for (p = s; p; p = p->next) + if ((!lang && p->primary == Zr_bool_true) || + (lang && p->lang && !strcmp(lang, p->lang))) + return p->str; + return s->str; +} + static struct zr_authentication *authentication(NMEM m, xmlNode *node) { xmlNode *n; @@ -141,10 +153,10 @@ static struct zr_serverInfo *serverInfo(NMEM m, xmlNode *node) struct zr_serverInfo *r = nmem_malloc(m, sizeof(*r)); memset(r, 0, sizeof(*r)); - r->protocol = attrtostr(m, n, "protocol"); - r->version = attrtostr(m, n, "version"); - r->transport = attrtostr(m, n, "transport"); - r->method = attrtostr(m, n, "method"); + r->protocol = attrtostr(m, node, "protocol"); + r->version = attrtostr(m, node, "version"); + r->transport = attrtostr(m, node, "transport"); + r->method = attrtostr(m, node, "method"); for (n = node->children; n; n = n->next) { if (n->type != XML_ELEMENT_NODE) @@ -155,9 +167,11 @@ static struct zr_serverInfo *serverInfo(NMEM m, xmlNode *node) r->port = valuetoint(n); else if (!strcmp(n->name, "database")) r->database = valuetostr(m, n); - else if (!strcmp(n->name, "authentication") && !(r->authentication = - authentication(m, n))) - return 0; + else if (!strcmp(n->name, "authentication")) + { + if (!(r->authentication = authentication(m, n))) + return 0; + } else { fail("Unexpected element", n); @@ -237,15 +251,17 @@ struct zr_databaseInfo *databaseInfo(NMEM m, xmlNode *node) } } } - else if (!strcmp(n->name, "implementation") && - !(r->implementation = implementation(m, n))) - return 0; + else if (!strcmp(n->name, "implementation")) + { + if (!(r->implementation = implementation(m, n))) + return 0; + } else if (!strcmp(n->name, "links")) { xmlNode *n2; for (n2 = n->children; n2; n2 = n2->next) { - if (!n2->type != XML_ELEMENT_NODE) + if (n2->type != XML_ELEMENT_NODE) continue; if (!strcmp(n2->name, "link")) continue; @@ -278,7 +294,7 @@ struct zr_metaInfo *metaInfo(NMEM m, xmlNode *node) for (n = node->children; n; n = n->next) { - if (!n->type == XML_ELEMENT_NODE) + if (n->type != XML_ELEMENT_NODE) continue; if (!strcmp(n->name, "dateModified")) r->dateModified = valuetostr(m, n); @@ -403,6 +419,8 @@ static struct zr_index *parse_index(NMEM m, xmlNode *node) for (n = node->children; n; n = n->next) { + if (n->type != XML_ELEMENT_NODE) + continue; if (!strcmp(n->name, "map")) { struct zr_map *new = map(m, n); @@ -411,8 +429,11 @@ static struct zr_index *parse_index(NMEM m, xmlNode *node) new->next = r->maps; r->maps = new; } - else if (!strcmp(n->name, "configInfo") && !(r->configInfo = configInfo(m, n))) - return 0; + else if (!strcmp(n->name, "configInfo")) + { + if (!(r->configInfo = configInfo(m, n))) + return 0; + } else if (strcmp(n->name, "title")) { fail("Unknown child element", n); @@ -464,8 +485,11 @@ static struct zr_indexInfo *indexInfo(NMEM m , xmlNode *node) new->next = r->sortKeywords; r->sortKeywords = new; } - else if (!strcmp(n->name, "sortKeyword") && !(r->configInfo = configInfo(m, n))) - return 0; + else if (!strcmp(n->name, "sortKeyword")) + { + if (!(r->configInfo = configInfo(m, n))) + return 0; + } else { fail("Unknown child element", n); @@ -590,23 +614,46 @@ static struct zr_explain *explain(NMEM m, xmlNode *node) { if (n->type != XML_ELEMENT_NODE) continue; - if (!strcmp(n->name, "serverInfo") && !(r->serverInfo = serverInfo(m, n))) - return 0; - else if (!strcmp(n->name, "databaseInfo") && !(r->databaseInfo = databaseInfo(m, n))) - return 0; - else if (!strcmp(n->name, "metaInfo") && !(r->metaInfo = metaInfo(m, n))) - return 0; - else if (!strcmp(n->name, "indexInfo") && !(r->indexInfo = indexInfo(m, n))) - return 0; - else if (!strcmp(n->name, "recordInfo") && !(r->recordInfo = recordInfo(m, n))) - return 0; - else if (!strcmp(n->name, "schemaInfo") && !(r->schemaInfo = schemaInfo(m, n))) - return 0; - else if (!strcmp(n->name, "configInfo") && !(r->configInfo = configInfo(m, n))) - return 0; + if (!strcmp(n->name, "serverInfo")) + { + if (!(r->serverInfo = serverInfo(m, n))) + return 0; + } + else if (!strcmp(n->name, "databaseInfo")) + { + if (!(r->databaseInfo = databaseInfo(m, n))) + return 0; + } + else if (!strcmp(n->name, "metaInfo")) + { + if (!(r->metaInfo = metaInfo(m, n))) + return 0; + } + else if (!strcmp(n->name, "indexInfo")) + { + if (!(r->indexInfo = indexInfo(m, n))) + return 0; + } + else if (!strcmp(n->name, "recordInfo")) + { + if (!(r->recordInfo = recordInfo(m, n))) + return 0; + } + else if (!strcmp(n->name, "schemaInfo")) + { + if (!(r->schemaInfo = schemaInfo(m, n))) + return 0; + } + else if (!strcmp(n->name, "configInfo")) + { + if (!(r->configInfo = configInfo(m, n))) + return 0; + } + else if (!strcmp(n->name, "status")) + continue; else { - fail("Unknown child element", n); + fail("Unknown child element of root node", n); return 0; } }