- xmlDocPtr doc = xmlParseMemory(wrbuf_buf(record),
- wrbuf_len(record));
- if (!doc)
- {
- wrbuf_printf(p->wr_error, "xmlParseMemory failed");
- ret = -1;
- }
- else
- {
- xmlDocPtr res = xsltApplyStylesheet(r->u.xslt.xsp, doc, 0);
- if (res)
- {
- xmlChar *out_buf;
- int out_len;
- xmlDocDumpFormatMemory (res, &out_buf, &out_len, 1);
-
- wrbuf_rewind(record);
- wrbuf_write(record, (const char *) out_buf, out_len);
-
- xmlFree(out_buf);
- xmlFreeDoc(res);
- }
- else
- {
- wrbuf_printf(p->wr_error, "xsltApplyStylesheet faailed");
- ret = -1;
- }
- xmlFreeDoc(doc);
- }
- }
- else if (r->which == YAZ_RECORD_CONV_RULE_MARC)
- {
- yaz_marc_t mt = yaz_marc_create();
-
- yaz_marc_xml(mt, r->u.marc.output_format);
-
- if (r->u.marc.iconv_t)
- yaz_marc_iconv(mt, r->u.marc.iconv_t);
- if (r->u.marc.input_format == YAZ_MARC_ISO2709)
- {
- int sz = yaz_marc_read_iso2709(mt, wrbuf_buf(record),
- wrbuf_len(record));
- if (sz > 0)
- ret = 0;
- else
- ret = -1;
- }
- else if (r->u.marc.input_format == YAZ_MARC_MARCXML)
- {
- xmlDocPtr doc = xmlParseMemory(wrbuf_buf(record),
- wrbuf_len(record));
- if (!doc)
- {
- wrbuf_printf(p->wr_error, "xmlParseMemory failed");
- ret = -1;
- }
- else
- {
- ret = yaz_marc_read_xml(mt, xmlDocGetRootElement(doc));
- if (ret)
- wrbuf_printf(p->wr_error, "yaz_marc_read_xml failed");
- }
- xmlFreeDoc(doc);
- }
- else
- {
- wrbuf_printf(p->wr_error, "unsupported input format");
- ret = -1;
- }
- if (ret == 0)
- {
- wrbuf_rewind(record);
- ret = yaz_marc_write_mode(mt, record);
- if (ret)
- wrbuf_printf(p->wr_error, "yaz_marc_write_mode failed");
- }
- yaz_marc_destroy(mt);