X-Git-Url: http://lists.indexdata.com/cgi-bin?a=blobdiff_plain;f=src%2Fmarcmap.c;h=14cd21f392d6967cb2eec6e25f910452d7d144f4;hb=096341d55d0f82fbfdf4c1389c2216c368d385f3;hp=b3a447c804aba2b7e1f6b92fdd54c2eea62032ad;hpb=08303b063a01c5531f175e76358d78570e68bbb6;p=pazpar2-moved-to-github.git diff --git a/src/marcmap.c b/src/marcmap.c index b3a447c..14cd21f 100644 --- a/src/marcmap.c +++ b/src/marcmap.c @@ -144,36 +144,38 @@ xmlDoc *marcmap_apply(struct marcmap *marcmap, xmlDoc *xml_in) mmcur = marcmap; while (mmcur != NULL) { - if (field = marchash_get_field(marchash, mmcur->field, NULL)) - do + field = 0; + while ((field = marchash_get_field(marchash, mmcur->field, field)) != 0) + { + // field value + if ((mmcur->subfield == '$') && (s = field->val)) { - // field value - if ((mmcur->subfield == '$') && (s = field->val)) - { - meta_node = xmlNewChild(xml_out_root, ns_pz, BAD_CAST "metadata", s); - xmlSetProp(meta_node, BAD_CAST "type", mmcur->pz); - } - // catenate all subfields - else if ((mmcur->subfield == '*') && (s = marchash_catenate_subfields(field, " ", nmem))) - { - meta_node = xmlNewChild(xml_out_root, ns_pz, BAD_CAST "metadata", s); - xmlSetProp(meta_node, BAD_CAST "type", mmcur->pz); - } - // subfield value - else if (mmcur->subfield) + meta_node = xmlNewChild(xml_out_root, ns_pz, BAD_CAST "metadata", BAD_CAST s); + xmlSetProp(meta_node, BAD_CAST "type", BAD_CAST mmcur->pz); + } + // catenate all subfields + else if ((mmcur->subfield == '*') && (s = marchash_catenate_subfields(field, " ", nmem))) + { + meta_node = xmlNewChild(xml_out_root, ns_pz, BAD_CAST "metadata", BAD_CAST s); + xmlSetProp(meta_node, BAD_CAST "type", BAD_CAST mmcur->pz); + } + // subfield value + else if (mmcur->subfield) + { + subfield = 0; + while ((subfield = + marchash_get_subfield(mmcur->subfield, + field, subfield)) != 0) { - if (subfield = marchash_get_subfield(mmcur->subfield, field, NULL)) - do - if (s = subfield->val) - { - meta_node = xmlNewChild(xml_out_root, ns_pz, BAD_CAST "metadata", s); - xmlSetProp(meta_node, BAD_CAST "type", mmcur->pz); - } - while (subfield = marchash_get_subfield(mmcur->subfield, field, subfield)); + if ((s = subfield->val) != 0) + { + meta_node = xmlNewChild(xml_out_root, ns_pz, BAD_CAST "metadata", BAD_CAST s); + xmlSetProp(meta_node, BAD_CAST "type", BAD_CAST mmcur->pz); + } } - } - while (field = marchash_get_field(marchash, mmcur->field, field)); + + } mmcur = mmcur->next; }