code: def read_xml_file(self, xml_file):
          
  
          assert self.__config is not None
  
          ffname = self.__file_full_name(xml_file)
          self.logger.debug("Reading xml file: [%s]", xml_file)
          decls = self.__dcache.cached_value(ffname, self.__config)
          if not decls:
              self.logger.debug("File has not been found in cache, parsing...")
              decls, _ = self.__parse_xml_file(ffname)
              self.__dcache.update(ffname, self.__config, decls, [])
          else:
              self.logger.debug(
                  "File has not been changed, reading declarations from cache.")
  
          return decls
docs: Read generated XML file.
  
          :param xml_file: path to xml file
          :type xml_file: str
  
          :rtype: declarations tree