-/* $Id: alvis.c,v 1.7 2006-12-05 09:26:04 adam Exp $
- Copyright (C) 1995-2006
+/* $Id: alvis.c,v 1.15 2007-03-19 21:50:39 adam Exp $
+ Copyright (C) 1995-2007
Index Data ApS
This file is part of the Zebra server.
{
struct filter_info *tinfo = clientData;
destroy_schemas(tinfo);
+ xfree(tinfo->full_name);
if (tinfo->reader)
xmlFreeTextReader(tinfo->reader);
odr_destroy(tinfo->odr);
sscanf(id_str, "%255s", ctrl->match_criteria);
if (rank_str)
- ctrl->staticrank = atoi(rank_str);
-
+ ctrl->staticrank = atozint(rank_str);
ptr = ptr->children;
}
p /* I/O handler */,
0 /* URL */,
0 /* encoding */,
- XML_PARSE_XINCLUDE);
+ XML_PARSE_XINCLUDE
+ | XML_PARSE_NOENT
+ | XML_PARSE_NONET);
}
if (!tinfo->reader)
return RECCTRL_EXTRACT_ERROR_GENERIC;
{
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)
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
+ | XML_PARSE_NONET);
+ if (!doc)
+ return RECCTRL_EXTRACT_ERROR_GENERIC;
+ /* else {
+ xmlNodePtr root = xmlDocGetRootElement(doc);
+ if (!root)
+ 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)
else
wrbuf_printf(wrbuf, "</snippet>\n");
- xml_doc_str = odr_strdup(p->odr, wrbuf_buf(wrbuf));
+ xml_doc_str = odr_strdup(p->odr, wrbuf_cstr(wrbuf));
zebra_snippets_destroy(res);
- wrbuf_free(wrbuf, 1);
+ wrbuf_destroy(wrbuf);
return xml_doc_str;
}
doc = xmlReadIO(ioread_ret, ioclose_ret, p /* I/O handler */,
0 /* URL */,
0 /* encoding */,
- XML_PARSE_XINCLUDE);
+ XML_PARSE_XINCLUDE | XML_PARSE_NOENT | XML_PARSE_NONET);
if (!doc)
{
p->diagnostic = YAZ_BIB1_SYSTEM_ERROR_IN_PRESENTING_RECORDS;