32 #include <libxml/parser.h>
33 #include <libxml/tree.h>
43 struct marcmap *mm = 0, **mmp = &mmhead;
50 fp = fopen(filename,
"r");
54 while ((c = getc(fp) ) != EOF)
59 *mmp = mm = nmem_malloc(nmem,
sizeof(
struct marcmap));
63 if (c ==
' ' || c ==
'\n' || c ==
'\t')
73 mm->
field = nmem_malloc(nmem, len *
sizeof(
char));
74 strncpy(mm->
field, buf, len);
85 mm->
pz = nmem_malloc(nmem, len *
sizeof(
char));
86 strncpy(mm->
pz, buf, len);
120 xmlNodePtr xml_out_root;
122 xmlNodePtr meta_node;
128 xml_out = xmlNewDoc(BAD_CAST
"1.0");
129 xml_out->encoding = xmlCharStrdup(
"UTF-8");
130 xml_out_root = xmlNewNode(NULL, BAD_CAST
"record");
131 xmlDocSetRootElement(xml_out, xml_out_root);
132 ns_pz = xmlNewNs(xml_out_root, BAD_CAST
"http://www.indexdata.com/pazpar2/1.0", BAD_CAST
"pz");
133 xmlSetNs(xml_out_root, ns_pz);
134 nmem = nmem_create();
135 rec_node = xmlDocGetRootElement(xml_in);
140 while (mmcur != NULL)
148 meta_node = xmlNewChild(xml_out_root, ns_pz, BAD_CAST
"metadata", BAD_CAST s);
149 xmlSetProp(meta_node, BAD_CAST
"type", BAD_CAST mmcur->
pz);
154 meta_node = xmlNewChild(xml_out_root, ns_pz, BAD_CAST
"metadata", BAD_CAST s);
155 xmlSetProp(meta_node, BAD_CAST
"type", BAD_CAST mmcur->
pz);
167 meta_node = xmlNewChild(xml_out_root, ns_pz, BAD_CAST
"metadata", BAD_CAST s);
168 xmlSetProp(meta_node, BAD_CAST
"type", BAD_CAST mmcur->
pz);
185 strcpy(medium,
"electronic resource");
187 strcpy(medium,
"electronic resource");
189 strcpy(medium,
"article");
191 strcpy(medium,
"book");
193 meta_node = xmlNewChild(xml_out_root, ns_pz, BAD_CAST
"metadata", BAD_CAST medium);
194 xmlSetProp(meta_node, BAD_CAST
"type", BAD_CAST
"medium");
197 memset(mergekey, 0, 1024);
198 strcpy(mergekey,
"title ");
200 strncat(mergekey,
subfield->val, 1023 - strlen(mergekey));
201 strncat(mergekey,
" author ", 1023 - strlen(mergekey));
203 strncat(mergekey,
subfield->val, 1023 - strlen(mergekey));
204 strncat(mergekey,
" medium ", 1023 - strlen(mergekey));
205 strncat(mergekey, medium, 1023 - strlen(mergekey));
char * marchash_catenate_subfields(struct marcfield *field, const char *delim, NMEM nmem)
struct marcsubfield * marchash_get_subfield(char key, struct marcfield *field, struct marcsubfield *last)
struct marcfield * marchash_get_field(struct marchash *marchash, const char *key, struct marcfield *last)
struct marchash * marchash_create(NMEM nmem)
void marchash_ingest_marcxml(struct marchash *marchash, xmlNodePtr rec_node)
struct marcmap * marcmap_load(const char *filename, NMEM nmem)
xmlDoc * marcmap_apply(struct marcmap *marcmap, xmlDoc *xml_in)