def parse(self, xml_file):
        "Get a list of parsed recipes from BeerXML input"
        recipes = []
        with open(xml_file, "rt") as f:
            tree = ElementTree.parse(f)
        for recipeNode in tree.iter():
            if self.to_lower(recipeNode.tag) != "recipe":
                continue
            recipe = Recipe()
            recipes.append(recipe)
            for recipeProperty in list(recipeNode):
                tag_name = self.to_lower(recipeProperty.tag)
                if tag_name == "fermentables":
                    for fermentable_node in list(recipeProperty):
                        fermentable = Fermentable()
                        self.nodes_to_object(fermentable_node, fermentable)
                        recipe.fermentables.append(fermentable)
                elif tag_name == "yeasts":
                    for yeast_node in list(recipeProperty):
                        yeast = Yeast()
                        self.nodes_to_object(yeast_node, yeast)
                        recipe.yeasts.append(yeast)
                elif tag_name == "hops":
                    for hop_node in list(recipeProperty):
                        hop = Hop()
                        self.nodes_to_object(hop_node, hop)
                        recipe.hops.append(hop)
                elif tag_name == "miscs":
                    for misc_node in list(recipeProperty):
                        misc = Misc()
                        self.nodes_to_object(misc_node, misc)
                        recipe.miscs.append(misc)
                elif tag_name == "style":
                    style = Style()
                    recipe.style = style
                    self.nodes_to_object(recipeProperty, style)
                elif tag_name == "mash":
                    for mash_node in list(recipeProperty):
                        mash = Mash()
                        recipe.mash = mash
                        if self.to_lower(mash_node.tag) == "mash_steps":
                            for mash_step_node in list(mash_node):
                                mash_step = MashStep()
                                self.nodes_to_object(mash_step_node, mash_step)
                                mash.steps.append(mash_step)
                        else:
                            self.nodes_to_object(mash_node, mash)
                else:
                    self.node_to_object(recipeProperty, recipe)
        return recipes