def METHOD_NAME(game, node, xml_node):
    if xml_node.get("player") is None:
        node.append_move(game.players.chance, len(xml_node))
    elif xml_node.get("iset") is not None:
        p = game.players[int(xml_node.get("player"))-1]
        try:
            node.append_move(p.infosets[xml_node.get("iset")])
        except IndexError:
            iset = node.append_move(p, len(xml_node))
            iset.label = xml_node.get("iset")
    elif xml_node.get("player") is not None:
        node.append_move(game.players[int(xml_node.get("player"))-1],
                         len(xml_node))
    for (i, xml_child) in enumerate(xml_node):
        if xml_child.get("prob") is not None:
            node.infoset.actions[i].prob = Fraction(xml_child.get("prob"))
        if xml_child.get("move") is not None:
            node.infoset.actions[i].label = xml_child.get("move")
        if xml_child.tag == "outcome":
            node.children[i].outcome = game.outcomes.add()
            for (j, xml_payoff) in enumerate(xml_child.xpath("./payoff")):
                node.children[i].outcome[int(xml_payoff.get("player"))-1] = (
                    Fraction(xml_payoff.text)
                )
        elif xml_child.tag == "node":
            METHOD_NAME(game, node.children[i], xml_child)