docs: def _transform_libxslt(xml, xslt, params=None):
      """
      Transform ``xslt`` using any of the 3 supported xslt engines:
  
      - `lxml <http://codespeak.net/lxml/>`_
      - `libxml <http://xmlsoft.org/python.html>`_
  
      :param xml: The xml to be transformed.
      :param xslt: The xslt to be used when transforming the ``xml``.
      :param params: A dictionary containing xslt parameters. Use :func:`~easymode.xslt.prepare_string_param`\
          on strings you want to pass in.
      """
      try:
          xslt_doc = libxml2.parseFile(xslt)
          xslt_proc = libxslt.parseStylesheetDoc(xslt_doc)
          xml_doc = libxml2.parseDoc(xml)
          
          result = xslt_proc.applyStylesheet(xml_doc, params)
  
          xml_string = str(result)
          xml_unicode_string = xml_string.decode('utf-8')
  
          xslt_proc.freeStylesheet()
          xml_doc.freeDoc()
  
          return xml_unicode_string
      except RuntimeError as e:
          raise XsltError(str(e))