code: def _get_existing_records(cr, fp, module_name):
      
      def yield_element(node, path=None):
          if node.tag not in ['openerp', 'odoo', 'data']:
              if node.tag == 'record':
                  xmlid = node.attrib['id']
                  if '.' not in xmlid:
                      module = module_name
                  else:
                      module, xmlid = xmlid.split('.', 1)
                  cr.execute(
                      'select id from ir_model_data where module=%s and name=%s',
                      (module, xmlid)
                  )
                  if not cr.rowcount:
                      return
              result = StringIO(etree.tostring(path, encoding='unicode'))
              result.name = None
              yield result
          else:
              for child in node:
                  for value in yield_element(
                          child,
                          etree.SubElement(path, node.tag, node.attrib)
                          if path else etree.Element(node.tag, node.attrib)
                  ):
                      yield value
      return yield_element(etree.parse(fp).getroot())
docs: yield file like objects per 'leaf' node in the xml file that exists.
      This is for not trying to create a record with partial data in case the
      record was removed in the database.