Method takes either an etree.ElementTree or raw XML text
        as the first argument.

        Args:
            xml(etree.ElementTree or text

def run(self, xml, **kwargs):
        """Method takes either an etree.ElementTree or raw XML text
        as the first argument.

        Args:
            xml(etree.ElementTree or text
        """
        kwargs['output'] = self.__graph__()
        if isinstance(xml, str):
            try:
                self.source = etree.XML(xml)
            except ValueError:
                try:
                    self.source = etree.XML(xml.encode())
                except:
                    raise ValueError("Cannot run error {}".format(sys.exc_info()[0]))
        else:
            self.source = xml
        super(XMLProcessor, self).run(**kwargs)
        self.output = kwargs['output']
        return kwargs['output']