code: def get_child(parent, tag_name, root_or_cache, namespace):
      # type: (_Element, str, _DocRoot, str) -> typing.Optional[_Element]
      
      # logger.debug("get_child: " + tag_name)
      if parent is None:
          return None
      ret = parent.find('.//' + namespace + tag_name)
      if ret is None:  # no direct element - try reference
          reference = parent.find('.//' + namespace + tag_name + '-REF')
          if reference is not None:
              if isinstance(root_or_cache, ArTree):
                  ret = get_cached_element_by_path(root_or_cache, reference.text)
              else:
                  ret = get_element_by_path(root_or_cache, reference.text, namespace)
      return ret
docs: Get first sub-child or referenced sub-child with given name.