code: def parse_complex(tree_to_parse, xpath_root, xpath_map, complex_key):
      
  
      complex_struct = {}
  
      for prop in _complex_definitions.get(complex_key, xpath_map):
          # Normalize complex values: treat values with newlines like values from separate elements
          parsed = parse_property(tree_to_parse, xpath_root, xpath_map, prop)
          parsed = reduce_value(flatten_items(v.split(_COMPLEX_DELIM) for v in wrap_value(parsed)))
  
          complex_struct[prop] = get_default_for_complex_sub(complex_key, prop, parsed, xpath_map[prop])
  
      return complex_struct if any(complex_struct.values()) else {}
docs: Creates and returns a Dictionary data structure parsed from the metadata.
      :param tree_to_parse: the XML tree compatible with element_utils to be parsed
      :param xpath_root: the XPATH location of the structure inside the parent element
      :param xpath_map: a dict of XPATHs corresponding to a complex definition
      :param complex_key: indicates which complex definition describes the structure