X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fnormalize_record.c;h=92ef3d0aef3b34f6574604b4139ebcdaeb911ff0;hb=39551c85d6c07bc20b8756ff41de3f85a3cd57b8;hp=2143d0d6800489a06604ab51cc8f312f2231fd83;hpb=848a659ecc0b24d1881c3f091393b99259130aa7;p=pazpar2-moved-to-github.git diff --git a/src/normalize_record.c b/src/normalize_record.c index 2143d0d..92ef3d0 100644 --- a/src/normalize_record.c +++ b/src/normalize_record.c @@ -1,5 +1,5 @@ /* This file is part of Pazpar2. - Copyright (C) 2006-2012 Index Data + Copyright (C) 2006-2013 Index Data Pazpar2 is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free @@ -47,12 +47,16 @@ struct normalize_record_s { }; normalize_record_t normalize_record_create(struct conf_service *service, - const char *spec, int embed) + const char *spec) { NMEM nmem = nmem_create(); normalize_record_t nt = nmem_malloc(nmem, sizeof(*nt)); struct normalize_step **m = &nt->steps; int no_errors = 0; + int embed = 0; + + if (*spec == '<') + embed = 1; nt->nmem = nmem; @@ -67,8 +71,8 @@ normalize_record_t normalize_record_create(struct conf_service *service, (*m)->marcmap = NULL; (*m)->stylesheet = NULL; (*m)->stylesheet2 = NULL; - - + + (*m)->stylesheet = xsltParseStylesheetDoc(xsp_doc); if (!(*m)->stylesheet) no_errors++; @@ -85,16 +89,16 @@ normalize_record_t normalize_record_create(struct conf_service *service, for (i = 0; i < num; i++) { WRBUF fname = conf_get_fname(conf, stylesheets[i]); - + *m = nmem_malloc(nt->nmem, sizeof(**m)); (*m)->marcmap = NULL; (*m)->stylesheet = NULL; - + (*m)->stylesheet2 = service_xslt_get(service, stylesheets[i]); if ((*m)->stylesheet2) ; - else if (!strcmp(&stylesheets[i][strlen(stylesheets[i])-4], ".xsl")) - { + else if (!strcmp(&stylesheets[i][strlen(stylesheets[i])-4], ".xsl")) + { if (!((*m)->stylesheet = xsltParseStylesheetFile((xmlChar *) wrbuf_cstr(fname)))) { @@ -117,7 +121,7 @@ normalize_record_t normalize_record_create(struct conf_service *service, yaz_log(YLOG_FATAL, "Cannot handle stylesheet: %s", stylesheets[i]); no_errors++; } - + wrbuf_destroy(fname); m = &(*m)->next; } @@ -166,7 +170,7 @@ int normalize_record_transform(normalize_record_t nt, xmlDoc **doc, ndoc = 0; xmlFreeDoc(*doc); *doc = 0; - + if (ndoc) root = xmlDocGetRootElement(ndoc); @@ -174,6 +178,12 @@ int normalize_record_transform(normalize_record_t nt, xmlDoc **doc, *doc = ndoc; else { + if (!ndoc) + yaz_log(YLOG_WARN, "XSLT produced no document"); + else if (!root) + yaz_log(YLOG_WARN, "XSLT produced XML with no root node"); + else if (!root->children) + yaz_log(YLOG_WARN, "XSLT produced XML with no root children nodes"); if (ndoc) xmlFreeDoc(ndoc); return -1;