+ xmlNode *sroot;
+ for (sroot = root->children; sroot; sroot = sroot->next)
+ if (sroot->type == XML_ELEMENT_NODE)
+ {
+ const char *mergekey_norm =
+ get_mergekey(xdoc, sroot, cl, record_no, service, nmem,
+ se->mergekey);
+
+ struct record_metadata_attr *mk = (struct record_metadata_attr*)
+ nmem_malloc(nmem, sizeof(*mk));
+ mk->name = 0;
+ mk->value = nmem_strdup(nmem, mergekey_norm);
+ mk->next = 0;
+
+ r = ingest_sub_record(cl, xdoc, sroot, record_no, nmem, sdb,
+ mk);
+ if (r)
+ break;
+ }
+ }
+ else if (!strcmp((const char *) root->name, "record"))
+ {
+ const char *mergekey_norm =
+ get_mergekey(xdoc, root, cl, record_no, service, nmem,
+ se->mergekey);
+ if (mergekey_norm)
+ {
+ struct record_metadata_attr *mk = (struct record_metadata_attr*)
+ nmem_malloc(nmem, sizeof(*mk));
+ mk->name = 0;
+ mk->value = nmem_strdup(nmem, mergekey_norm);
+ mk->next = 0;
+
+ r = ingest_sub_record(cl, xdoc, root, record_no, nmem, sdb, mk);
+ }
+ }
+ else
+ {
+ session_log(se, YLOG_WARN, "Bad pz root element: %s",
+ (const char *) root->name);
+ r = -1;