- wrbuf_iconv_puts(wr, mt->iconv_cd, "\">");
- }
- else {
- //TODO convert special
- wrbuf_iconv_write_cdata(wr, mt->iconv_cd, n->u.controlfield.tag,
- strlen(n->u.controlfield.tag));
- wrbuf_iconv_puts(wr, mt->iconv_cd, ">");
- }
- wrbuf_iconv_write_cdata(wr, mt->iconv_cd,
- n->u.controlfield.data,
- strlen(n->u.controlfield.data));
- marc_iconv_reset(mt, wr);
- wrbuf_printf(wr, "</%s>", controlfield_name[turbo]);
- wrbuf_puts(wr, "\n");
- break;
- case YAZ_MARC_COMMENT:
- wrbuf_printf(wr, "<!-- ");
- wrbuf_puts(wr, n->u.comment);
- wrbuf_printf(wr, " -->\n");
- break;
- case YAZ_MARC_LEADER:
- wrbuf_printf(wr, " <%s>", leader_name[turbo]);
- wrbuf_iconv_write_cdata(wr,
- 0 /* no charset conversion for leader */,
- n->u.leader, strlen(n->u.leader));
- wrbuf_printf(wr, " </%s>", leader_name[turbo]);
- }
- }
- wrbuf_printf(wr, "</%s", record_name[turbo]);
- return 0;
-}
-
-static int yaz_marc_write_marcxml_ns1(yaz_marc_t mt, WRBUF wr,
- const char *ns,
- const char *format,
- const char *type)
-{
- struct yaz_marc_node *n;
- int identifier_length;
- const char *leader = 0;
-
- for (n = mt->nodes; n; n = n->next)
- if (n->which == YAZ_MARC_LEADER)
- {
- leader = n->u.leader;
- break;
- }
-
- if (!leader)
- return -1;
- if (!atoi_n_check(leader+11, 1, &identifier_length))
- return -1;
-
- if (mt->enable_collection != no_collection)
- {
- if (mt->enable_collection == collection_first)
- wrbuf_printf(wr, "<collection xmlns=\"%s\">\n", ns);
- mt->enable_collection = collection_second;
- wrbuf_printf(wr, "<record");
- }
- else
- {
- wrbuf_printf(wr, "<record xmlns=\"%s\"", ns);
- }
- if (format)
- wrbuf_printf(wr, " format=\"%.80s\"", format);
- if (type)
- wrbuf_printf(wr, " type=\"%.80s\"", type);
- wrbuf_printf(wr, ">\n");
- for (n = mt->nodes; n; n = n->next)
- {
- struct yaz_marc_subfield *s;
-
- switch(n->which)
- {
- case YAZ_MARC_DATAFIELD:
- wrbuf_printf(wr, " <datafield tag=\"");
- wrbuf_iconv_write_cdata(wr, mt->iconv_cd, n->u.datafield.tag,
- strlen(n->u.datafield.tag));
- wrbuf_printf(wr, "\"");
- if (n->u.datafield.indicator)
- {
- int i;
- for (i = 0; n->u.datafield.indicator[i]; i++)
- {
- wrbuf_printf(wr, " ind%d=\"", i+1);
- wrbuf_iconv_write_cdata(wr, mt->iconv_cd,
- n->u.datafield.indicator+i, 1);
- wrbuf_iconv_puts(wr, mt->iconv_cd, "\"");
- }