X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fnormalize_record.c;h=ea15f46146ae4a60a1d035d3fc1083d6edff0d23;hb=a8559c6713a7130a271d77083d06b1561c38269c;hp=90876e56a54f1b02d49ae2f90e3a19aaf5dcfccd;hpb=6019a6da5031c198bae79830cc8cf6ff2f7dce7e;p=pazpar2-moved-to-github.git diff --git a/src/normalize_record.c b/src/normalize_record.c index 90876e5..ea15f46 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) 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 @@ -36,7 +36,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA struct normalize_step { struct normalize_step *next; - xsltStylesheet *stylesheet; /* created by normalize_record */ + xsltStylesheet *stylesheet1; /* created by normalize_record */ xsltStylesheet *stylesheet2; /* external stylesheet (service) */ struct marcmap *marcmap; }; @@ -66,15 +66,16 @@ normalize_record_t normalize_record_create(struct conf_service *service, if (!xsp_doc) no_errors++; + else { *m = nmem_malloc(nt->nmem, sizeof(**m)); (*m)->marcmap = NULL; - (*m)->stylesheet = NULL; + (*m)->stylesheet1 = NULL; (*m)->stylesheet2 = NULL; - - - (*m)->stylesheet = xsltParseStylesheetDoc(xsp_doc); - if (!(*m)->stylesheet) + + + (*m)->stylesheet1 = xsltParseStylesheetDoc(xsp_doc); + if (!(*m)->stylesheet1) no_errors++; m = &(*m)->next; } @@ -89,17 +90,17 @@ 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)->stylesheet1 = NULL; + (*m)->stylesheet2 = service_xslt_get(service, stylesheets[i]); if ((*m)->stylesheet2) ; - else if (!strcmp(&stylesheets[i][strlen(stylesheets[i])-4], ".xsl")) - { - if (!((*m)->stylesheet = + else if (!strcmp(&stylesheets[i][strlen(stylesheets[i])-4], ".xsl")) + { + if (!((*m)->stylesheet1 = xsltParseStylesheetFile((xmlChar *) wrbuf_cstr(fname)))) { yaz_log(YLOG_FATAL|YLOG_ERRNO, "Unable to load stylesheet: %s", @@ -121,7 +122,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; } @@ -143,8 +144,8 @@ void normalize_record_destroy(normalize_record_t nt) struct normalize_step *m; for (m = nt->steps; m; m = m->next) { - if (m->stylesheet) - xsltFreeStylesheet(m->stylesheet); + if (m->stylesheet1) + xsltFreeStylesheet(m->stylesheet1); } nmem_destroy(nt->nmem); } @@ -160,8 +161,8 @@ int normalize_record_transform(normalize_record_t nt, xmlDoc **doc, { xmlNodePtr root = 0; xmlDoc *ndoc; - if (m->stylesheet) - ndoc = xsltApplyStylesheet(m->stylesheet, *doc, parms); + if (m->stylesheet1) + ndoc = xsltApplyStylesheet(m->stylesheet1, *doc, parms); else if (m->stylesheet2) ndoc = xsltApplyStylesheet(m->stylesheet2, *doc, parms); else if (m->marcmap) @@ -170,7 +171,7 @@ int normalize_record_transform(normalize_record_t nt, xmlDoc **doc, ndoc = 0; xmlFreeDoc(*doc); *doc = 0; - + if (ndoc) root = xmlDocGetRootElement(ndoc); @@ -178,6 +179,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;