def METHOD_NAME(self, xml_node):
    """ traverse xml node and return ordered dictionary structure
    :param xml_node: ElementTree node
    :return: collections.OrderedDict
    """
    this_item = collections.OrderedDict()
    if len(list(xml_node)) > 0:
        for item in list(xml_node):
            item_content = self.METHOD_NAME(item)
            # for dictionary type items, add tag attributes
            if type(item_content) == collections.OrderedDict:
                for attr_key in item.attrib:
                    item_content["@%s" % attr_key] = item.attrib[attr_key]
            # store uuid's
            if 'uuid' in item.attrib:
                self.__uuid_data[item.attrib['uuid']] = item_content
                self.__uuid_tags[item.attrib['uuid']] = item.tag
            # add (list) items to this result
            if item.tag in this_item:
                if type(this_item[item.tag]) != list:
                    tmp_item = copy.deepcopy(this_item[item.tag])
                    this_item[item.tag] = []
                    this_item[item.tag].append(tmp_item)
                if item_content is not None:
                    # skip empty fields
                    this_item[item.tag].append(item_content)
            elif item_content is not None:
                # create a new named item
                this_item[item.tag] = item_content
    else:
        # last node, return text
        return xml_node.text
    return this_item