@staticmethod<EOL><INDENT>def node_less(node1, node2):<DEDENT>
for x in ['<STR_LIT>', '<STR_LIT:text>', '<STR_LIT>']:<EOL><INDENT>if node1.__getattribute__(x) != node2.__getattribute__(x):<EOL><INDENT>return False<EOL><DEDENT><DEDENT>for a in node1.attrib:<EOL><INDENT>if a not in node2.attrib ornode1.attrib[a] != node2.attrib[a]:<EOL><INDENT>return False<EOL><DEDENT><DEDENT>for child in node1.getchildren():<EOL><INDENT>peers = node2.findall(child.tag)<EOL>if len(peers) < <NUM_LIT:1>:<EOL><INDENT>return False<EOL><DEDENT>elif len(peers) > <NUM_LIT:1>:<EOL><INDENT>raise ModelError("<STR_LIT>".format(child.tag))<EOL><DEDENT>else:<EOL><INDENT>if not ModelDiff.node_less(child, peers[<NUM_LIT:0>]):<EOL><INDENT>return False<EOL><DEDENT><DEDENT><DEDENT>return True<EOL>
node_less

        Low-level api: Return True if all descendants of node1 exist in node2.
        Otherwise False. This is a recursive method.

        Parameters
        ----------

        node1 : `Element`
            A node in a model tree.

        node2 : `Element`
            A node in another model tree.

        Returns
        -------

        bool
            True if all descendants of node1 exist in node2, otherwise False.