X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Falvis.c;h=fad3671bdf1db5ac7641bbed666c055cf5f7bf24;hb=85c5e09eacc5c89eda6e1ffa6f039fa1e8dd7221;hp=da5817bad8e69b31e6ad99fbb61ec563cd9c0800;hpb=dd094f96179451fb9445cc33d288a0ba540dc42c;p=idzebra-moved-to-github.git diff --git a/index/alvis.c b/index/alvis.c index da5817b..fad3671 100644 --- a/index/alvis.c +++ b/index/alvis.c @@ -1,5 +1,5 @@ -/* $Id: alvis.c,v 1.7 2006-12-05 09:26:04 adam Exp $ - Copyright (C) 1995-2006 +/* $Id: alvis.c,v 1.12 2007-02-12 10:33:51 adam Exp $ + Copyright (C) 1995-2007 Index Data ApS This file is part of the Zebra server. @@ -434,8 +434,7 @@ static void index_record(struct filter_info *tinfo,struct recExtractCtrl *ctrl, sscanf(id_str, "%255s", ctrl->match_criteria); if (rank_str) - ctrl->staticrank = atoi(rank_str); - + ctrl->staticrank = atozint(rank_str); ptr = ptr->children; } @@ -508,7 +507,7 @@ static int extract_split(struct filter_info *tinfo, struct recExtractCtrl *p) p /* I/O handler */, 0 /* URL */, 0 /* encoding */, - XML_PARSE_XINCLUDE); + XML_PARSE_XINCLUDE|XML_PARSE_NOENT); } if (!tinfo->reader) return RECCTRL_EXTRACT_ERROR_GENERIC; @@ -518,9 +517,7 @@ static int extract_split(struct filter_info *tinfo, struct recExtractCtrl *p) { int type = xmlTextReaderNodeType(tinfo->reader); int depth = xmlTextReaderDepth(tinfo->reader); - if (tinfo->split_level == 0 || - (tinfo->split_level > 0 && - type == XML_READER_TYPE_ELEMENT && tinfo->split_level == depth)) + if (type == XML_READER_TYPE_ELEMENT && tinfo->split_level == depth) { xmlNodePtr ptr = xmlTextReaderExpand(tinfo->reader); if (ptr) @@ -546,13 +543,33 @@ static int extract_split(struct filter_info *tinfo, struct recExtractCtrl *p) return RECCTRL_EXTRACT_EOF; } +static int extract_full(struct filter_info *tinfo, struct recExtractCtrl *p) +{ + if (p->first_record) /* only one record per stream */ + { + xmlDocPtr doc = xmlReadIO(ioread_ex, ioclose_ex, p /* I/O handler */, + 0 /* URL */, + 0 /* encoding */, + XML_PARSE_XINCLUDE|XML_PARSE_NOENT); + if (!doc) + { + return RECCTRL_EXTRACT_ERROR_GENERIC; + } + return extract_doc(tinfo, p, doc); + } + else + return RECCTRL_EXTRACT_EOF; +} + static int filter_extract(void *clientData, struct recExtractCtrl *p) { struct filter_info *tinfo = clientData; odr_reset(tinfo->odr); - - return extract_split(tinfo, p); + if (tinfo->split_level == 0) + return extract_full(tinfo, p); + else + return extract_split(tinfo, p); } static int ioread_ret(void *context, char *buffer, int len) @@ -677,7 +694,7 @@ static int filter_retrieve (void *clientData, struct recRetrieveCtrl *p) doc = xmlReadIO(ioread_ret, ioclose_ret, p /* I/O handler */, 0 /* URL */, 0 /* encoding */, - XML_PARSE_XINCLUDE); + XML_PARSE_XINCLUDE|XML_PARSE_NOENT); if (!doc) { p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS;