Imported Upstream version 3.3.1
authorHyunjee Kim <hj0426.kim@samsung.com>
Thu, 31 Jan 2019 01:38:55 +0000 (10:38 +0900)
committerHyunjee Kim <hj0426.kim@samsung.com>
Thu, 31 Jan 2019 01:39:19 +0000 (10:39 +0900)
Change-Id: I1504215716b1eb9ef9b69316e0b761cd0bd89f30
Signed-off-by: Hyunjee Kim <hj0426.kim@samsung.com>
426 files changed:
CHANGES.txt
MANIFEST.in
Makefile
PKG-INFO
doc/build.txt
doc/html/FAQ.html
doc/html/api.html
doc/html/api/abc.ABCMeta-class.html
doc/html/api/api-objects.txt
doc/html/api/class-tree.html
doc/html/api/cssselect.parser.SelectorError-class.html
doc/html/api/cssselect.parser.SelectorSyntaxError-class.html
doc/html/api/cssselect.xpath.ExpressionError-class.html
doc/html/api/cssselect.xpath.XPathExpr-class.html
doc/html/api/deprecated-index.html
doc/html/api/exceptions.AssertionError-class.html
doc/html/api/help.html
doc/html/api/identifier-index-A.html
doc/html/api/identifier-index-B.html
doc/html/api/identifier-index-C.html
doc/html/api/identifier-index-D.html
doc/html/api/identifier-index-E.html
doc/html/api/identifier-index-F.html
doc/html/api/identifier-index-G.html
doc/html/api/identifier-index-H.html
doc/html/api/identifier-index-I.html
doc/html/api/identifier-index-J.html
doc/html/api/identifier-index-K.html
doc/html/api/identifier-index-L.html
doc/html/api/identifier-index-M.html
doc/html/api/identifier-index-N.html
doc/html/api/identifier-index-O.html
doc/html/api/identifier-index-P.html
doc/html/api/identifier-index-Q.html
doc/html/api/identifier-index-R.html
doc/html/api/identifier-index-S.html
doc/html/api/identifier-index-T.html
doc/html/api/identifier-index-U.html
doc/html/api/identifier-index-V.html
doc/html/api/identifier-index-W.html
doc/html/api/identifier-index-X.html
doc/html/api/identifier-index-Y.html
doc/html/api/identifier-index-Z.html
doc/html/api/identifier-index-_.html
doc/html/api/identifier-index.html
doc/html/api/lxml-module.html
doc/html/api/lxml-pysrc.html
doc/html/api/lxml.ElementInclude-module.html
doc/html/api/lxml.ElementInclude-pysrc.html
doc/html/api/lxml.ElementInclude.FatalIncludeError-class.html
doc/html/api/lxml.builder-module.html
doc/html/api/lxml.builder-pysrc.html
doc/html/api/lxml.builder.ElementMaker-class.html
doc/html/api/lxml.cssselect-module.html
doc/html/api/lxml.cssselect-pysrc.html
doc/html/api/lxml.cssselect.CSSSelector-class.html
doc/html/api/lxml.cssselect.LxmlHTMLTranslator-class.html
doc/html/api/lxml.cssselect.LxmlTranslator-class.html
doc/html/api/lxml.doctestcompare-module.html
doc/html/api/lxml.doctestcompare-pysrc.html
doc/html/api/lxml.doctestcompare.LHTMLOutputChecker-class.html
doc/html/api/lxml.doctestcompare.LXMLOutputChecker-class.html
doc/html/api/lxml.doctestcompare._RestoreChecker-class.html
doc/html/api/lxml.etree-module.html
doc/html/api/lxml.etree.AncestorsIterator-class.html
doc/html/api/lxml.etree.AttributeBasedElementClassLookup-class.html
doc/html/api/lxml.etree.C14NError-class.html
doc/html/api/lxml.etree.CDATA-class.html
doc/html/api/lxml.etree.CommentBase-class.html
doc/html/api/lxml.etree.CustomElementClassLookup-class.html
doc/html/api/lxml.etree.DTD-class.html
doc/html/api/lxml.etree.DTDError-class.html
doc/html/api/lxml.etree.DTDParseError-class.html
doc/html/api/lxml.etree.DTDValidateError-class.html
doc/html/api/lxml.etree.DocInfo-class.html
doc/html/api/lxml.etree.DocumentInvalid-class.html
doc/html/api/lxml.etree.ETCompatXMLParser-class.html
doc/html/api/lxml.etree.ETXPath-class.html
doc/html/api/lxml.etree.ElementBase-class.html
doc/html/api/lxml.etree.ElementChildIterator-class.html
doc/html/api/lxml.etree.ElementClassLookup-class.html
doc/html/api/lxml.etree.ElementDefaultClassLookup-class.html
doc/html/api/lxml.etree.ElementDepthFirstIterator-class.html
doc/html/api/lxml.etree.ElementNamespaceClassLookup-class.html
doc/html/api/lxml.etree.ElementTextIterator-class.html
doc/html/api/lxml.etree.EntityBase-class.html
doc/html/api/lxml.etree.Error-class.html
doc/html/api/lxml.etree.ErrorDomains-class.html
doc/html/api/lxml.etree.ErrorLevels-class.html
doc/html/api/lxml.etree.ErrorTypes-class.html
doc/html/api/lxml.etree.FallbackElementClassLookup-class.html
doc/html/api/lxml.etree.HTMLParser-class.html
doc/html/api/lxml.etree.HTMLPullParser-class.html
doc/html/api/lxml.etree.LxmlError-class.html
doc/html/api/lxml.etree.LxmlRegistryError-class.html
doc/html/api/lxml.etree.LxmlSyntaxError-class.html
doc/html/api/lxml.etree.NamespaceRegistryError-class.html
doc/html/api/lxml.etree.PIBase-class.html
doc/html/api/lxml.etree.ParseError-class.html
doc/html/api/lxml.etree.ParserBasedElementClassLookup-class.html
doc/html/api/lxml.etree.ParserError-class.html
doc/html/api/lxml.etree.PyErrorLog-class.html
doc/html/api/lxml.etree.PythonElementClassLookup-class.html
doc/html/api/lxml.etree.QName-class.html
doc/html/api/lxml.etree.RelaxNG-class.html
doc/html/api/lxml.etree.RelaxNGError-class.html
doc/html/api/lxml.etree.RelaxNGErrorTypes-class.html
doc/html/api/lxml.etree.RelaxNGParseError-class.html
doc/html/api/lxml.etree.RelaxNGValidateError-class.html
doc/html/api/lxml.etree.Resolver-class.html
doc/html/api/lxml.etree.Schematron-class.html
doc/html/api/lxml.etree.SchematronError-class.html
doc/html/api/lxml.etree.SchematronParseError-class.html
doc/html/api/lxml.etree.SchematronValidateError-class.html
doc/html/api/lxml.etree.SerialisationError-class.html
doc/html/api/lxml.etree.SiblingsIterator-class.html
doc/html/api/lxml.etree.TreeBuilder-class.html
doc/html/api/lxml.etree.XInclude-class.html
doc/html/api/lxml.etree.XIncludeError-class.html
doc/html/api/lxml.etree.XMLParser-class.html
doc/html/api/lxml.etree.XMLPullParser-class.html
doc/html/api/lxml.etree.XMLSchema-class.html
doc/html/api/lxml.etree.XMLSchemaError-class.html
doc/html/api/lxml.etree.XMLSchemaParseError-class.html
doc/html/api/lxml.etree.XMLSchemaValidateError-class.html
doc/html/api/lxml.etree.XMLSyntaxError-class.html
doc/html/api/lxml.etree.XPath-class.html
doc/html/api/lxml.etree.XPathDocumentEvaluator-class.html
doc/html/api/lxml.etree.XPathElementEvaluator-class.html
doc/html/api/lxml.etree.XPathError-class.html
doc/html/api/lxml.etree.XPathEvalError-class.html
doc/html/api/lxml.etree.XPathFunctionError-class.html
doc/html/api/lxml.etree.XPathResultError-class.html
doc/html/api/lxml.etree.XPathSyntaxError-class.html
doc/html/api/lxml.etree.XSLT-class.html
doc/html/api/lxml.etree.XSLTAccessControl-class.html
doc/html/api/lxml.etree.XSLTApplyError-class.html
doc/html/api/lxml.etree.XSLTError-class.html
doc/html/api/lxml.etree.XSLTExtension-class.html
doc/html/api/lxml.etree.XSLTExtensionError-class.html
doc/html/api/lxml.etree.XSLTParseError-class.html
doc/html/api/lxml.etree.XSLTSaveError-class.html
doc/html/api/lxml.etree._Attrib-class.html
doc/html/api/lxml.etree._BaseErrorLog-class.html
doc/html/api/lxml.etree._Comment-class.html
doc/html/api/lxml.etree._Document-class.html
doc/html/api/lxml.etree._DomainErrorLog-class.html
doc/html/api/lxml.etree._Element-class.html
doc/html/api/lxml.etree._ElementIterator-class.html
doc/html/api/lxml.etree._ElementMatchIterator-class.html
doc/html/api/lxml.etree._ElementStringResult-class.html
doc/html/api/lxml.etree._ElementTagMatcher-class.html
doc/html/api/lxml.etree._ElementTree-class.html
doc/html/api/lxml.etree._ElementUnicodeResult-class.html
doc/html/api/lxml.etree._Entity-class.html
doc/html/api/lxml.etree._ErrorLog-class.html
doc/html/api/lxml.etree._FeedParser-class.html
doc/html/api/lxml.etree._IDDict-class.html
doc/html/api/lxml.etree._ListErrorLog-class.html
doc/html/api/lxml.etree._LogEntry-class.html
doc/html/api/lxml.etree._ProcessingInstruction-class.html
doc/html/api/lxml.etree._RotatingErrorLog-class.html
doc/html/api/lxml.etree._SaxParserTarget-class.html
doc/html/api/lxml.etree._TargetParserResult-class.html
doc/html/api/lxml.etree._Validator-class.html
doc/html/api/lxml.etree._XPathEvaluatorBase-class.html
doc/html/api/lxml.etree._XSLTProcessingInstruction-class.html
doc/html/api/lxml.etree._XSLTResultTree-class.html
doc/html/api/lxml.etree.iterparse-class.html
doc/html/api/lxml.etree.iterwalk-class.html
doc/html/api/lxml.etree.xmlfile-class.html
doc/html/api/lxml.html-module.html
doc/html/api/lxml.html-pysrc.html
doc/html/api/lxml.html.CheckboxGroup-class.html
doc/html/api/lxml.html.CheckboxValues-class.html
doc/html/api/lxml.html.ElementSoup-module.html
doc/html/api/lxml.html.ElementSoup-pysrc.html
doc/html/api/lxml.html.FieldsDict-class.html
doc/html/api/lxml.html.FormElement-class.html
doc/html/api/lxml.html.HTMLParser-class.html
doc/html/api/lxml.html.HtmlComment-class.html
doc/html/api/lxml.html.HtmlElement-class.html
doc/html/api/lxml.html.HtmlElementClassLookup-class.html
doc/html/api/lxml.html.HtmlEntity-class.html
doc/html/api/lxml.html.HtmlMixin-class.html
doc/html/api/lxml.html.HtmlProcessingInstruction-class.html
doc/html/api/lxml.html.InputElement-class.html
doc/html/api/lxml.html.InputGetter-class.html
doc/html/api/lxml.html.InputMixin-class.html
doc/html/api/lxml.html.LabelElement-class.html
doc/html/api/lxml.html.MultipleSelectOptions-class.html
doc/html/api/lxml.html.RadioGroup-class.html
doc/html/api/lxml.html.SelectElement-class.html
doc/html/api/lxml.html.TextareaElement-class.html
doc/html/api/lxml.html.XHTMLParser-class.html
doc/html/api/lxml.html._MethodFunc-class.html
doc/html/api/lxml.html.builder-module.html
doc/html/api/lxml.html.builder-pysrc.html
doc/html/api/lxml.html.clean-module.html
doc/html/api/lxml.html.clean-pysrc.html
doc/html/api/lxml.html.clean.Cleaner-class.html
doc/html/api/lxml.html.defs-module.html
doc/html/api/lxml.html.defs-pysrc.html
doc/html/api/lxml.html.diff-module.html
doc/html/api/lxml.html.diff-pysrc.html
doc/html/api/lxml.html.diff.DEL_END-class.html
doc/html/api/lxml.html.diff.DEL_START-class.html
doc/html/api/lxml.html.diff.InsensitiveSequenceMatcher-class.html
doc/html/api/lxml.html.diff.NoDeletes-class.html
doc/html/api/lxml.html.diff.href_token-class.html
doc/html/api/lxml.html.diff.tag_token-class.html
doc/html/api/lxml.html.diff.token-class.html
doc/html/api/lxml.html.formfill-module.html
doc/html/api/lxml.html.formfill-pysrc.html
doc/html/api/lxml.html.formfill.DefaultErrorCreator-class.html
doc/html/api/lxml.html.formfill.FormNotFound-class.html
doc/html/api/lxml.html.html5parser-module.html
doc/html/api/lxml.html.html5parser-pysrc.html
doc/html/api/lxml.html.html5parser.HTMLParser-class.html
doc/html/api/lxml.html.html5parser.XHTMLParser-class.html
doc/html/api/lxml.html.soupparser-module.html
doc/html/api/lxml.html.soupparser-pysrc.html
doc/html/api/lxml.html.usedoctest-module.html
doc/html/api/lxml.html.usedoctest-pysrc.html
doc/html/api/lxml.includes-module.html
doc/html/api/lxml.includes-pysrc.html
doc/html/api/lxml.isoschematron-module.html
doc/html/api/lxml.isoschematron-pysrc.html
doc/html/api/lxml.isoschematron.Schematron-class.html
doc/html/api/lxml.objectify-module.html
doc/html/api/lxml.objectify.BoolElement-class.html
doc/html/api/lxml.objectify.ElementMaker-class.html
doc/html/api/lxml.objectify.FloatElement-class.html
doc/html/api/lxml.objectify.IntElement-class.html
doc/html/api/lxml.objectify.LongElement-class.html
doc/html/api/lxml.objectify.NoneElement-class.html
doc/html/api/lxml.objectify.NumberElement-class.html
doc/html/api/lxml.objectify.ObjectPath-class.html
doc/html/api/lxml.objectify.ObjectifiedDataElement-class.html
doc/html/api/lxml.objectify.ObjectifiedElement-class.html
doc/html/api/lxml.objectify.ObjectifyElementClassLookup-class.html
doc/html/api/lxml.objectify.PyType-class.html
doc/html/api/lxml.objectify.StringElement-class.html
doc/html/api/lxml.pyclasslookup-module.html
doc/html/api/lxml.pyclasslookup-pysrc.html
doc/html/api/lxml.sax-module.html
doc/html/api/lxml.sax-pysrc.html
doc/html/api/lxml.sax.ElementTreeContentHandler-class.html
doc/html/api/lxml.sax.ElementTreeProducer-class.html
doc/html/api/lxml.sax.SaxError-class.html
doc/html/api/lxml.tests-module.html
doc/html/api/lxml.tests-pysrc.html
doc/html/api/lxml.tests.common_imports-module.html
doc/html/api/lxml.tests.common_imports-pysrc.html
doc/html/api/lxml.tests.common_imports.HelperTestCase-class.html
doc/html/api/lxml.tests.common_imports.LargeFileLike-class.html
doc/html/api/lxml.tests.common_imports.LargeFileLikeUnicode-class.html
doc/html/api/lxml.tests.common_imports.SillyFileLike-class.html
doc/html/api/lxml.tests.dummy_http_server-module.html
doc/html/api/lxml.tests.dummy_http_server-pysrc.html
doc/html/api/lxml.tests.dummy_http_server.HTTPRequestCollector-class.html
doc/html/api/lxml.tests.dummy_http_server.WebServer-class.html
doc/html/api/lxml.tests.dummy_http_server._RequestHandler-class.html
doc/html/api/lxml.tests.test_builder-module.html
doc/html/api/lxml.tests.test_builder-pysrc.html
doc/html/api/lxml.tests.test_builder.BuilderTestCase-class.html
doc/html/api/lxml.tests.test_classlookup-module.html
doc/html/api/lxml.tests.test_classlookup-pysrc.html
doc/html/api/lxml.tests.test_classlookup.ClassLookupTestCase-class.html
doc/html/api/lxml.tests.test_classlookup.ProxyTestCase-class.html
doc/html/api/lxml.tests.test_css-module.html
doc/html/api/lxml.tests.test_css-pysrc.html
doc/html/api/lxml.tests.test_css.CSSTestCase-class.html
doc/html/api/lxml.tests.test_dtd-module.html
doc/html/api/lxml.tests.test_dtd-pysrc.html
doc/html/api/lxml.tests.test_dtd.ETreeDtdTestCase-class.html
doc/html/api/lxml.tests.test_elementtree-module.html
doc/html/api/lxml.tests.test_elementtree-pysrc.html
doc/html/api/lxml.tests.test_elementtree.CElementTreeTestCase-class.html
doc/html/api/lxml.tests.test_elementtree.ETreePullTestCase-class.html
doc/html/api/lxml.tests.test_elementtree.ETreeTestCase-class.html
doc/html/api/lxml.tests.test_elementtree.ElementTreeTestCase-class.html
doc/html/api/lxml.tests.test_elementtree._ETreeTestCaseBase-class.html
doc/html/api/lxml.tests.test_elementtree._XMLPullParserTest-class.html
doc/html/api/lxml.tests.test_errors-module.html
doc/html/api/lxml.tests.test_errors-pysrc.html
doc/html/api/lxml.tests.test_errors.ErrorTestCase-class.html
doc/html/api/lxml.tests.test_etree-module.html
doc/html/api/lxml.tests.test_etree-pysrc.html
doc/html/api/lxml.tests.test_etree.ETreeC14NTestCase-class.html
doc/html/api/lxml.tests.test_etree.ETreeErrorLogTest-class.html
doc/html/api/lxml.tests.test_etree.ETreeOnlyTestCase-class.html
doc/html/api/lxml.tests.test_etree.ETreeWriteTestCase-class.html
doc/html/api/lxml.tests.test_etree.ETreeXIncludeTestCase-class.html
doc/html/api/lxml.tests.test_etree.ElementIncludeTestCase-class.html
doc/html/api/lxml.tests.test_etree.XMLPullParserTest-class.html
doc/html/api/lxml.tests.test_etree._XIncludeTestCase-class.html
doc/html/api/lxml.tests.test_htmlparser-module.html
doc/html/api/lxml.tests.test_htmlparser-pysrc.html
doc/html/api/lxml.tests.test_htmlparser.HtmlParserTestCase-class.html
doc/html/api/lxml.tests.test_http_io-module.html
doc/html/api/lxml.tests.test_http_io-pysrc.html
doc/html/api/lxml.tests.test_http_io.HttpIOTestCase-class.html
doc/html/api/lxml.tests.test_incremental_xmlfile-module.html
doc/html/api/lxml.tests.test_incremental_xmlfile-pysrc.html
doc/html/api/lxml.tests.test_incremental_xmlfile.BytesIOXmlFileTestCase-class.html
doc/html/api/lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html
doc/html/api/lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase.SimpleFileLike-class.html
doc/html/api/lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase-class.html
doc/html/api/lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html
doc/html/api/lxml.tests.test_io-module.html
doc/html/api/lxml.tests.test_io-pysrc.html
doc/html/api/lxml.tests.test_io.ETreeIOTestCase-class.html
doc/html/api/lxml.tests.test_io.ElementTreeIOTestCase-class.html
doc/html/api/lxml.tests.test_io._IOTestCaseBase-class.html
doc/html/api/lxml.tests.test_isoschematron-module.html
doc/html/api/lxml.tests.test_isoschematron-pysrc.html
doc/html/api/lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html
doc/html/api/lxml.tests.test_nsclasses-module.html
doc/html/api/lxml.tests.test_nsclasses-pysrc.html
doc/html/api/lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html
doc/html/api/lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase.bluff_class-class.html
doc/html/api/lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase.default_class-class.html
doc/html/api/lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase.maeh_class-class.html
doc/html/api/lxml.tests.test_objectify-module.html
doc/html/api/lxml.tests.test_objectify-pysrc.html
doc/html/api/lxml.tests.test_objectify.ObjectifyTestCase-class.html
doc/html/api/lxml.tests.test_pyclasslookup-module.html
doc/html/api/lxml.tests.test_pyclasslookup-pysrc.html
doc/html/api/lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html
doc/html/api/lxml.tests.test_relaxng-module.html
doc/html/api/lxml.tests.test_relaxng-pysrc.html
doc/html/api/lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html
doc/html/api/lxml.tests.test_sax-module.html
doc/html/api/lxml.tests.test_sax-pysrc.html
doc/html/api/lxml.tests.test_sax.ETreeSaxTestCase-class.html
doc/html/api/lxml.tests.test_schematron-module.html
doc/html/api/lxml.tests.test_schematron-pysrc.html
doc/html/api/lxml.tests.test_schematron.ETreeSchematronTestCase-class.html
doc/html/api/lxml.tests.test_threading-module.html
doc/html/api/lxml.tests.test_threading-pysrc.html
doc/html/api/lxml.tests.test_threading.ThreadPipelineTestCase-class.html
doc/html/api/lxml.tests.test_threading.ThreadPipelineTestCase.ParseAndExtendWorker-class.html
doc/html/api/lxml.tests.test_threading.ThreadPipelineTestCase.ParseWorker-class.html
doc/html/api/lxml.tests.test_threading.ThreadPipelineTestCase.ReverseWorker-class.html
doc/html/api/lxml.tests.test_threading.ThreadPipelineTestCase.RotateWorker-class.html
doc/html/api/lxml.tests.test_threading.ThreadPipelineTestCase.SerialiseWorker-class.html
doc/html/api/lxml.tests.test_threading.ThreadPipelineTestCase.Worker-class.html
doc/html/api/lxml.tests.test_threading.ThreadingTestCase-class.html
doc/html/api/lxml.tests.test_unicode-module.html
doc/html/api/lxml.tests.test_unicode-pysrc.html
doc/html/api/lxml.tests.test_unicode.UnicodeTestCase-class.html
doc/html/api/lxml.tests.test_xmlschema-module.html
doc/html/api/lxml.tests.test_xmlschema-pysrc.html
doc/html/api/lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html
doc/html/api/lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase.simple_resolver-class.html
doc/html/api/lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html
doc/html/api/lxml.tests.test_xpathevaluator-module.html
doc/html/api/lxml.tests.test_xpathevaluator-pysrc.html
doc/html/api/lxml.tests.test_xpathevaluator.ETreeETXPathClassTestCase-class.html
doc/html/api/lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html
doc/html/api/lxml.tests.test_xpathevaluator.ETreeXPathExsltTestCase-class.html
doc/html/api/lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html
doc/html/api/lxml.tests.test_xslt-module.html
doc/html/api/lxml.tests.test_xslt-pysrc.html
doc/html/api/lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html
doc/html/api/lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html
doc/html/api/lxml.tests.test_xslt.ETreeXSLTExtFuncTestCase-class.html
doc/html/api/lxml.tests.test_xslt.ETreeXSLTTestCase-class.html
doc/html/api/lxml.tests.test_xslt.Py3XSLTTestCase-class.html
doc/html/api/lxml.usedoctest-module.html
doc/html/api/lxml.usedoctest-pysrc.html
doc/html/api/mimetools.Message-class.html
doc/html/api/module-tree.html
doc/html/api/str-class.html
doc/html/api/xml.etree.ElementTree-module.html
doc/html/api/xml.etree.ElementTree-pysrc.html
doc/html/api/xml.etree.ElementTree.Element-class.html
doc/html/api/xml.etree.ElementTree.ElementTree-class.html
doc/html/api/xml.etree.ElementTree.ParseError-class.html
doc/html/api/xml.etree.ElementTree.QName-class.html
doc/html/api/xml.etree.ElementTree.TreeBuilder-class.html
doc/html/api/xml.etree.ElementTree.XMLParser-class.html
doc/html/api/xml.etree.ElementTree._IterParseIterator-class.html
doc/html/api/xml.etree.ElementTree._SimpleElementPath-class.html
doc/html/build.html
doc/html/capi.html
doc/html/changes-3.3.1.html [moved from doc/html/changes-3.3.0.html with 99% similarity]
doc/html/compatibility.html
doc/html/credits.html
doc/html/cssselect.html
doc/html/element_classes.html
doc/html/elementsoup.html
doc/html/extensions.html
doc/html/html5parser.html
doc/html/index.html
doc/html/installation.html
doc/html/intro.html
doc/html/lxml-source-howto.html
doc/html/lxmlhtml.html
doc/html/objectify.html
doc/html/parsing.html
doc/html/performance.html
doc/html/resolvers.html
doc/html/sax.html
doc/html/sitemap.html
doc/html/tutorial.html
doc/html/validation.html
doc/html/xpathxslt.html
doc/main.txt
doc/parsing.txt
requirements.txt [new file with mode: 0644]
setup.py
src/lxml.egg-info/PKG-INFO
src/lxml.egg-info/SOURCES.txt
src/lxml/includes/lxml-version.h
src/lxml/lxml.etree.c
src/lxml/lxml.etree.h
src/lxml/lxml.objectify.c
src/lxml/lxml_endian.h
src/lxml/parser.pxi
src/lxml/proxy.pxi
src/lxml/python.pxd
src/lxml/tests/test_htmlparser.py
src/lxml/tests/test_io.py
version.txt

index 1ae43a3..77801c2 100644 (file)
@@ -2,6 +2,30 @@
 lxml changelog
 ==============
 
+3.3.1 (2014-02-12)
+==================
+
+Features added
+--------------
+
+Bugs fixed
+----------
+
+* LP#1014290: HTML documents parsed with ``parser.feed()`` failed to find
+  elements during tag iteration.
+
+* LP#1273709: Building in PyPy failed due to missing support for
+  ``PyUnicode_Compare()`` and ``PyByteArray_*()`` in PyPy's C-API.
+
+* LP#1274413: Compilation in MSVC failed due to missing "stdint.h" standard
+  header file.
+
+* LP#1274118: iterparse() failed to parse BOM prefixed files.
+
+Other changes
+-------------
+
+
 3.3.0 (2014-01-26)
 ==================
 
index b8b3d80..3be8731 100644 (file)
@@ -2,7 +2,7 @@ exclude *.py
 include setup.py ez_setup.py setupinfo.py versioninfo.py buildlibxml.py
 include test.py selftest.py selftest2.py
 include update-error-constants.py
-include MANIFEST.in Makefile version.txt
+include MANIFEST.in Makefile version.txt requirements.txt
 include CHANGES.txt CREDITS.txt INSTALL.txt LICENSES.txt README.rst TODO.txt
 recursive-include src *.pyx *.pxd *.pxi *.py
 recursive-include src/lxml lxml.etree.c lxml.objectify.c
index 6bb1cb8..74dcea1 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -5,17 +5,26 @@ TESTOPTS=
 SETUPFLAGS=
 LXMLVERSION=`cat version.txt`
 
-PY2_WITH_CYTHON=$(shell $(PYTHON)  -c 'import Cython.Compiler' >/dev/null 2>/dev/null && echo " --with-cython" || true)
+PYTHON_WITH_CYTHON=$(shell $(PYTHON)  -c 'import Cython.Compiler' >/dev/null 2>/dev/null && echo " --with-cython" || true)
 PY3_WITH_CYTHON=$(shell $(PYTHON3) -c 'import Cython.Compiler' >/dev/null 2>/dev/null && echo " --with-cython" || true)
 
 all: inplace
 
 # Build in-place
 inplace:
-       $(PYTHON) setup.py $(SETUPFLAGS) build_ext -i $(PY2_WITH_CYTHON)
+       $(PYTHON) setup.py $(SETUPFLAGS) build_ext -i $(PYTHON_WITH_CYTHON)
+
+sdist:
+       $(PYTHON) setup.py $(SETUPFLAGS) sdist $(PYTHON_WITH_CYTHON)
 
 build:
-       $(PYTHON) setup.py $(SETUPFLAGS) build $(PY2_WITH_CYTHON)
+       $(PYTHON) setup.py $(SETUPFLAGS) build $(PYTHON_WITH_CYTHON)
+
+wheel:
+       $(PYTHON) setup.py $(SETUPFLAGS) bdist_wheel $(PYTHON_WITH_CYTHON)
+
+wheel_static:
+       $(PYTHON) setup.py $(SETUPFLAGS) bdist_wheel $(PYTHON_WITH_CYTHON) --static-deps
 
 test_build: build
        $(PYTHON) test.py $(TESTFLAGS) $(TESTOPTS)
index 0daeaa4..704dea4 100644 (file)
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: lxml
-Version: 3.3.0
+Version: 3.3.1
 Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
 Home-page: http://lxml.de/
 Author: lxml dev team
 Author-email: lxml-dev@lxml.de
 License: UNKNOWN
-Download-URL: http://pypi.python.org/packages/source/l/lxml/lxml-3.3.0.tar.gz
+Download-URL: http://pypi.python.org/packages/source/l/lxml/lxml-3.3.1.tar.gz
 Description: lxml is a Pythonic, mature binding for the libxml2 and libxslt libraries.  It
         provides safe and convenient access to these libraries using the ElementTree
         API.
@@ -37,7 +37,7 @@ Description: lxml is a Pythonic, mature binding for the libxml2 and libxslt libr
         as soon as a maintenance branch has been established.  Note that this
         requires Cython to be installed at an appropriate version for the build.
         
-        3.3.0 (2014-01-26)
+        3.3.1 (2014-02-12)
         ==================
         
         Features added
@@ -46,8 +46,16 @@ Description: lxml is a Pythonic, mature binding for the libxml2 and libxslt libr
         Bugs fixed
         ----------
         
-        * The heuristic that distinguishes file paths from URLs was tightened
-          to produce less false negatives.
+        * LP#1014290: HTML documents parsed with ``parser.feed()`` failed to find
+          elements during tag iteration.
+        
+        * LP#1273709: Building in PyPy failed due to missing support for
+          ``PyUnicode_Compare()`` and ``PyByteArray_*()`` in PyPy's C-API.
+        
+        * LP#1274413: Compilation in MSVC failed due to missing "stdint.h" standard
+          header file.
+        
+        * LP#1274118: iterparse() failed to parse BOM prefixed files.
         
         Other changes
         -------------
index 90c2597..074b532 100644 (file)
@@ -23,6 +23,7 @@ Cython
 
 .. _pip: http://pypi.python.org/pypi/pip
 .. _Cython: http://cython.org
+.. _wheel: http://wheel.readthedocs.org/en/latest/
 
 The lxml.etree and lxml.objectify modules are written in Cython_.
 Since we distribute the Cython-generated .c files with lxml releases,
@@ -42,7 +43,9 @@ developer sources (e.g. to test a bug fix that has not been release
 yet) or if you want to be an lxml developer, then you do need a
 working Cython installation.  You can use pip_ to install it::
 
-    pip install "Cython>=0.20"
+    pip install -r requirements.txt
+
+https://github.com/lxml/lxml/blob/master/requirements.txt
 
 lxml currently requires at least Cython 0.20, later release versions
 should work as well.
@@ -165,25 +168,53 @@ your operating system type (Linux, Windows, MacOS-X, ...).
 .. _`mailing list`: http://lxml.de/mailinglist/
 
 
-Building an egg
----------------
+Building an egg or wheel
+------------------------
+
+This is the procedure to make an lxml egg or wheel_ for your platform.
+It assumes that you have ``setuptools`` or ``distribute`` installed, as well
+as the ``wheel`` package.
+
+First, download the lxml-x.y.tar.gz release.  This contains the pregenerated
+C files so that you can be sure you build exactly from the release sources.
+Unpack them and ``cd`` into the resulting directory.  Then, to build a wheel,
+simply run the command
+
+::
+
+  python setup.py bdist_wheel
+
+or, to build a statically linked wheel with all of libxml2, libxslt and
+friends compiled in, run
 
-This is the procedure to make an lxml egg for your platform (assuming
-that you have "setuptools" or "distribute" installed):
+  python setup.py bdist_wheel --static-deps
 
-* Download the lxml-x.y.tar.gz release.  This contains the pregenerated C so
-  that you can be sure you build exactly from the release sources.  Unpack
-  them and cd into the resulting directory.
+The resulting .whl file will be written into the ``dist`` directory.
+
+To build an egg file, run
+
+::
+
+  python setup.py build_egg
+
+If you are on a Unix-like platform, you can first build the extension modules
+using
+
+::
+
+  python setup.py build
 
-* python setup.py build
+and then ``cd`` into the directory ``build/lib.your.platform`` to call
+``strip`` on any ``.so`` file you find there.  This reduces the size of
+the binary distribution considerably.  Then, from the package root directory,
+call
 
-* If you're on a unixy platform, cd into ``build/lib.your.platform`` and strip
-  any ``.so`` file you find there.  This reduces the size of the egg
-  considerably.
+::
 
-* ``python setup.py bdist_egg``
+  python setup.py bdist_egg
 
-This will put the egg into the ``dist`` directory.
+This will quickly package the pre-built packages into an egg file and
+drop it into the ``dist`` directory.
 
 
 Building lxml on MacOS-X
index 19b164d..8a11519 100644 (file)
@@ -10,7 +10,7 @@
 </head>
 <body>
 <div class="document" id="lxml-faq-frequently-asked-questions">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu current" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">lxml FAQ - Frequently Asked Questions</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu current" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">lxml FAQ - Frequently Asked Questions</h1>
 
 <p>Frequently asked questions on lxml.  See also the notes on <a class="reference external" href="compatibility.html">compatibility</a> to
 <a class="reference external" href="http://effbot.org/zone/element-index.htm">ElementTree</a>.</p>
@@ -917,7 +917,7 @@ map it to your namespace.  See also the question above.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 963c9dc..d74c73a 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="apis-specific-to-lxml-etree">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu current" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">APIs specific to lxml.etree</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu current" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">APIs specific to lxml.etree</h1>
 
 <p>lxml.etree tries to follow established APIs wherever possible.  Sometimes,
 however, the need to expose a feature in an easy way led to the invention of a
@@ -450,7 +450,7 @@ example:</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index c097548..fdf37c2 100644 (file)
@@ -426,7 +426,7 @@ even via super()).</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9e21ea2..11c96b1 100644 (file)
@@ -6047,8 +6047,9 @@ lxml.tests.test_htmlparser.HtmlParserTestCase.test_module_parse_html      lxml.tests.
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_parser_target_doctype_html_full        lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_doctype_html_full
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_element_name_colon     lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_element_name_colon
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_subelement_name_quote  lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_subelement_name_quote
-lxml.tests.test_htmlparser.HtmlParserTestCase.test_module_parse_html_error     lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_parse_html_error
+lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_feed_parser    lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_feed_parser
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_iterparse      lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse
+lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_feed_parser_more_tags  lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_feed_parser_more_tags
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_iterparse_start        lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse_start
 lxml.tests.test_htmlparser.HtmlParserTestCase.tearDown lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#tearDown
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_subelement_name_colon  lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_subelement_name_colon
@@ -6058,6 +6059,7 @@ lxml.tests.test_htmlparser.HtmlParserTestCase.test_module_HTML_unicode    lxml.test
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_parse_encoding_8bit_override        lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_parse_encoding_8bit_override
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_parse_encoding_8bit_explicit        lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_parse_encoding_8bit_explicit
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_module_HTML lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML
+lxml.tests.test_htmlparser.HtmlParserTestCase.test_module_parse_html_error     lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_parse_html_error
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_module_HTML_cdata   lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML_cdata
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_parser_target_tag      lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_tag
 lxml.tests.common_imports.HelperTestCase._rootstring   lxml.tests.common_imports.HelperTestCase-class.html#_rootstring
@@ -6077,6 +6079,7 @@ lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_iterparse_broken_no_reco
 lxml.tests.test_htmlparser.HtmlParserTestCase.html_str lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#html_str
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_iterparse_stop_short   lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse_stop_short
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_iterparse_file lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse_file
+lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_feed_parser_chunky     lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_feed_parser_chunky
 lxml.tests.common_imports.HelperTestCase.assertFalse   lxml.tests.common_imports.HelperTestCase-class.html#assertFalse
 lxml.tests.test_htmlparser.HtmlParserTestCase.test_html_element_name_space     lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_element_name_space
 lxml.tests.test_http_io.HttpIOTestCase lxml.tests.test_http_io.HttpIOTestCase-class.html
@@ -6223,8 +6226,10 @@ lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_element    lxml.tests
 lxml.tests.common_imports.HelperTestCase.assertFalse   lxml.tests.common_imports.HelperTestCase-class.html#assertFalse
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_pi       lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_pi
 lxml.tests.test_io.ETreeIOTestCase     lxml.tests.test_io.ETreeIOTestCase-class.html
+lxml.tests.test_io._IOTestCaseBase.test_iterparse_utf8_bom     lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf8_bom
 lxml.tests.test_io._IOTestCaseBase.test_class_parse_fileobject lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_fileobject
 lxml.tests.test_io._IOTestCaseBase.test_module_parse_gzipobject        lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_gzipobject
+lxml.tests.test_io._IOTestCaseBase.test_iterparse_utf16_bom    lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf16_bom
 lxml.tests.test_io.ETreeIOTestCase.test_write_compressed_text  lxml.tests.test_io.ETreeIOTestCase-class.html#test_write_compressed_text
 lxml.tests.test_io.ETreeIOTestCase.etree       lxml.etree-module.html
 lxml.tests.test_io._IOTestCaseBase.test_class_parse_filename   lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_filename
@@ -6236,6 +6241,7 @@ lxml.tests.test_io._IOTestCaseBase.test_write_filename    lxml.tests.test_io._IOTes
 lxml.tests.test_io._IOTestCaseBase.test_tree_io_latin1 lxml.tests.test_io._IOTestCaseBase-class.html#test_tree_io_latin1
 lxml.tests.test_io._IOTestCaseBase.setUp       lxml.tests.test_io._IOTestCaseBase-class.html#setUp
 lxml.tests.test_io._IOTestCaseBase.test_class_parse_unamed_fileobject  lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_unamed_fileobject
+lxml.tests.test_io._IOTestCaseBase.test_parse_utf8_bom lxml.tests.test_io._IOTestCaseBase-class.html#test_parse_utf8_bom
 lxml.tests.test_io._IOTestCaseBase.test_etree_parse_io_error   lxml.tests.test_io._IOTestCaseBase-class.html#test_etree_parse_io_error
 lxml.tests.test_io._IOTestCaseBase.test_module_parse_fileobject_error  lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_error
 lxml.tests.test_io._IOTestCaseBase.test_module_parse_large_fileobject  lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_large_fileobject
@@ -6248,8 +6254,10 @@ lxml.tests.test_io._IOTestCaseBase.test_tree_io  lxml.tests.test_io._IOTestCaseBa
 lxml.tests.test_io._IOTestCaseBase.test_module_parse_fileobject_late_error     lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_late_error
 lxml.tests.common_imports.HelperTestCase.assertFalse   lxml.tests.common_imports.HelperTestCase-class.html#assertFalse
 lxml.tests.test_io.ElementTreeIOTestCase       lxml.tests.test_io.ElementTreeIOTestCase-class.html
+lxml.tests.test_io._IOTestCaseBase.test_iterparse_utf8_bom     lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf8_bom
 lxml.tests.test_io._IOTestCaseBase.test_class_parse_fileobject lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_fileobject
 lxml.tests.test_io._IOTestCaseBase.test_module_parse_gzipobject        lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_gzipobject
+lxml.tests.test_io._IOTestCaseBase.test_iterparse_utf16_bom    lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf16_bom
 lxml.tests.test_io.ElementTreeIOTestCase.etree xml.etree.ElementTree-module.html
 lxml.tests.test_io._IOTestCaseBase.test_class_parse_filename   lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_filename
 lxml.tests.test_io._IOTestCaseBase.test_write_invalid_filename lxml.tests.test_io._IOTestCaseBase-class.html#test_write_invalid_filename
@@ -6260,6 +6268,7 @@ lxml.tests.test_io._IOTestCaseBase.test_write_filename    lxml.tests.test_io._IOTes
 lxml.tests.test_io._IOTestCaseBase.test_tree_io_latin1 lxml.tests.test_io._IOTestCaseBase-class.html#test_tree_io_latin1
 lxml.tests.test_io._IOTestCaseBase.setUp       lxml.tests.test_io._IOTestCaseBase-class.html#setUp
 lxml.tests.test_io._IOTestCaseBase.test_class_parse_unamed_fileobject  lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_unamed_fileobject
+lxml.tests.test_io._IOTestCaseBase.test_parse_utf8_bom lxml.tests.test_io._IOTestCaseBase-class.html#test_parse_utf8_bom
 lxml.tests.test_io._IOTestCaseBase.test_etree_parse_io_error   lxml.tests.test_io._IOTestCaseBase-class.html#test_etree_parse_io_error
 lxml.tests.test_io._IOTestCaseBase.test_module_parse_fileobject_error  lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_error
 lxml.tests.test_io._IOTestCaseBase.test_module_parse_large_fileobject  lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_large_fileobject
@@ -6272,8 +6281,10 @@ lxml.tests.test_io._IOTestCaseBase.test_tree_io  lxml.tests.test_io._IOTestCaseBa
 lxml.tests.test_io._IOTestCaseBase.test_module_parse_fileobject_late_error     lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_late_error
 lxml.tests.common_imports.HelperTestCase.assertFalse   lxml.tests.common_imports.HelperTestCase-class.html#assertFalse
 lxml.tests.test_io._IOTestCaseBase     lxml.tests.test_io._IOTestCaseBase-class.html
+lxml.tests.test_io._IOTestCaseBase.test_iterparse_utf8_bom     lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf8_bom
 lxml.tests.test_io._IOTestCaseBase.test_class_parse_fileobject lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_fileobject
 lxml.tests.test_io._IOTestCaseBase.test_module_parse_gzipobject        lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_gzipobject
+lxml.tests.test_io._IOTestCaseBase.test_iterparse_utf16_bom    lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf16_bom
 lxml.tests.test_io._IOTestCaseBase.etree       lxml.tests.test_io._IOTestCaseBase-class.html#etree
 lxml.tests.test_io._IOTestCaseBase.test_class_parse_filename   lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_filename
 lxml.tests.test_io._IOTestCaseBase.test_write_invalid_filename lxml.tests.test_io._IOTestCaseBase-class.html#test_write_invalid_filename
@@ -6284,6 +6295,7 @@ lxml.tests.test_io._IOTestCaseBase.test_write_filename    lxml.tests.test_io._IOTes
 lxml.tests.test_io._IOTestCaseBase.test_tree_io_latin1 lxml.tests.test_io._IOTestCaseBase-class.html#test_tree_io_latin1
 lxml.tests.test_io._IOTestCaseBase.setUp       lxml.tests.test_io._IOTestCaseBase-class.html#setUp
 lxml.tests.test_io._IOTestCaseBase.test_class_parse_unamed_fileobject  lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_unamed_fileobject
+lxml.tests.test_io._IOTestCaseBase.test_parse_utf8_bom lxml.tests.test_io._IOTestCaseBase-class.html#test_parse_utf8_bom
 lxml.tests.test_io._IOTestCaseBase.test_etree_parse_io_error   lxml.tests.test_io._IOTestCaseBase-class.html#test_etree_parse_io_error
 lxml.tests.test_io._IOTestCaseBase.test_module_parse_fileobject_error  lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_error
 lxml.tests.test_io._IOTestCaseBase.test_module_parse_large_fileobject  lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_large_fileobject
index 054bf78..cdcf84d 100644 (file)
@@ -1228,7 +1228,7 @@ type(name, bases, dict) -&gt; a new type</em>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c66c14c..de7a617 100644 (file)
@@ -194,7 +194,7 @@ You can just use ``except SelectorError:`` when calling
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d9ac19a..526bb74 100644 (file)
@@ -201,7 +201,7 @@ Parsing a selector that does not match the grammar.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index eebda25..b65903a 100644 (file)
@@ -193,7 +193,7 @@ Unknown or unsupported selector (eg. pseudo-class).
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b2b6280..ff8d6b3 100644 (file)
@@ -379,7 +379,7 @@ to a single parent.</td>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 69bcfab..b9eb999 100644 (file)
@@ -145,7 +145,7 @@ with older versions of lxml or ElementTree.</li>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f88aa8e..2c7ed20 100644 (file)
@@ -280,7 +280,7 @@ Assertion failed.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4baec7a..67e9618 100644 (file)
@@ -256,7 +256,7 @@ page was last updated. </p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f42f4d9..a28accd 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index eec04a2..5884dc3 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 33dbaec..d262c73 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7bb7f18..2cc83be 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index afb9899..fba179a 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8030874..e4e83cb 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 62ae6bb..8059fd6 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f48c6a6..9e28d47 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e1cd9a6..101eecc 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index bc25612..8d9eada 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f83a95a..95c4791 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6d0cc40..451a5bf 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6839653..0069d0c 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ce0938d..cefedfd 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6cd92c9..914b18b 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3978388..2ce7e15 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5121a70..3392fe5 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e67fbd7..b1b78bd 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f4d2459..d53870c 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 79f7f29..5982874 100644 (file)
 <tr>
 <td width="33%" class="link-index"><a href="lxml.html.builder-module.html#TABLE">TABLE</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.builder-module.html">lxml.html.builder</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_all_comment_pi">test_getiterator_filter_all_comment_pi()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_element">test_getiterator_filter_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_all_replace_reversed_ns1">test_setslice_all_replace_reversed_ns1()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_all_replace">test_setslice_all_replace()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.html.defs-module.html#table_tags">table_tags</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.defs-module.html">lxml.html.defs</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_filter_comment">test_getiterator_filter_comment()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_all_replace_reversed_ns2">test_setslice_all_replace_reversed_ns2()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_entities">test_getiterator_filter_entities()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_all_replace_reversed">test_setslice_all_replace_reversed()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.etree._Comment-class.html#tag">tag</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree._Comment-class.html" onclick="show_private();">_Comment</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_element">test_getiterator_filter_element()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_local_name">test_getiterator_filter_local_name()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_complete">test_setslice_complete()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_all_replace_reversed_ns1">test_setslice_all_replace_reversed_ns1()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.etree._Element-class.html#tag">tag</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree._Element-class.html" onclick="show_private();">_Element</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_entities">test_getiterator_filter_entities()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_multiple">test_getiterator_filter_multiple()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_elements">test_setslice_elements()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_all_replace_reversed_ns2">test_setslice_all_replace_reversed_ns2()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.etree._Entity-class.html#tag">tag</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree._Entity-class.html" onclick="show_private();">_Entity</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_local_name">test_getiterator_filter_local_name()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_multiple_tuple">test_getiterator_filter_multiple_tuple()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_empty">test_setslice_empty()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_complete">test_setslice_complete()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.etree._ProcessingInstruction-class.html#tag">tag</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree._ProcessingInstruction-class.html" onclick="show_private();">_ProcessingInstruction</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_multiple">test_getiterator_filter_multiple()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_namespace">test_getiterator_filter_namespace()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_empty">test_setslice_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_elements">test_setslice_elements()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="xml.etree.ElementTree.Element-class.html#tag">tag</a><br />
 <span class="index-where">(in&nbsp;<a href="xml.etree.ElementTree.Element-class.html">Element</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_multiple_tuple">test_getiterator_filter_multiple_tuple()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_end">test_setslice_end()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_filter_pi">test_getiterator_filter_pi()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_empty">test_setslice_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator-module.html#tag">tag()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator-module.html">lxml.tests.test_xpathevaluator</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_namespace">test_getiterator_filter_namespace()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_insert">test_setslice_insert()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_filter_with_text">test_getiterator_filter_with_text()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_empty">test_setslice_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.doctestcompare.LXMLOutputChecker-class.html#tag_compare">tag_compare()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.doctestcompare.LXMLOutputChecker-class.html">LXMLOutputChecker</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_filter_pi">test_getiterator_filter_pi()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_with_text">test_getiterator_with_text()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_end">test_setslice_end()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_insert_neg">test_setslice_insert_neg()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator-module.html#tag_or_value">tag_or_value()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator-module.html">lxml.tests.test_xpathevaluator</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_filter_with_text">test_getiterator_filter_with_text()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_negative">test_setslice_negative()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getnext">test_getnext()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_insert">test_setslice_insert()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.html.diff.tag_token-class.html">tag_token</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.diff-module.html">lxml.html.diff</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_with_text">test_getiterator_with_text()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_negative2">test_setslice_negative2()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getparent">test_getparent()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_insert_neg">test_setslice_insert_neg()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.html.defs-module.html#tags">tags</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.defs-module.html">lxml.html.defs</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getnext">test_getnext()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getprevious">test_getprevious()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_partial">test_setslice_partial()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_negative">test_setslice_negative()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.etree._Element-class.html#tail">tail</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree._Element-class.html" onclick="show_private();">_Element</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getparent">test_getparent()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getroottree">test_getroottree()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_partial_allneg">test_setslice_partial_allneg()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_negative2">test_setslice_negative2()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="xml.etree.ElementTree.Element-class.html#tail">tail</a><br />
 <span class="index-where">(in&nbsp;<a href="xml.etree.ElementTree.Element-class.html">Element</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getprevious">test_getprevious()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_partial_neg">test_setslice_partial_neg()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getslice">test_getslice()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_partial">test_setslice_partial()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.etree._ProcessingInstruction-class.html#target">target</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree._ProcessingInstruction-class.html" onclick="show_private();">_ProcessingInstruction</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getroottree">test_getroottree()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_partial_wrong_length">test_setslice_partial_wrong_length()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_getslice_complete">test_getslice_complete()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_partial_allneg">test_setslice_partial_allneg()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.html.builder-module.html#TBODY">TBODY</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.builder-module.html">lxml.html.builder</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getslice">test_getslice()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_single">test_setslice_single()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getslice_negative">test_getslice_negative()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_partial_neg">test_setslice_partial_neg()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.html.builder-module.html#TD">TD</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.builder-module.html">lxml.html.builder</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_getslice_complete">test_getslice_complete()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_getslice_partial">test_getslice_partial()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setslice_partial_wrong_length">test_setslice_partial_wrong_length()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_setslice_step">test_setslice_step()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.common_imports.HelperTestCase-class.html#tearDown">tearDown()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.common_imports.HelperTestCase-class.html">HelperTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getslice_negative">test_getslice_negative()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_getslice_partial_neg">test_getslice_partial_neg()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_single">test_setslice_single()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_setslice_step_negative">test_setslice_step_negative()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#tearDown">tearDown()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_getslice_partial">test_getslice_partial()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_setslice_step_negative2">test_setslice_step_negative2()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getslice_step">test_getslice_step()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_setslice_step">test_setslice_step()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#tearDown">tearDown()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_getslice_partial_neg">test_getslice_partial_neg()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_setslice_step_overrun">test_setslice_step_overrun()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getslice_text">test_getslice_text()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_setslice_step_negative">test_setslice_step_negative()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#tearDown">tearDown()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getslice_step">test_getslice_step()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_tail">test_setslice_tail()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_html_base">test_html_base()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_setslice_step_negative2">test_setslice_step_negative2()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#tearDown">tearDown()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getslice_text">test_getslice_text()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_shallowcopy">test_shallowcopy()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_html_base_tag">test_html_base_tag()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_setslice_step_overrun">test_setslice_step_overrun()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html#tearDown">tearDown()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html">ETreeNamespaceClassesTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_html_base">test_html_base()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_HTML_base_url_docinfo">test_HTML_base_url_docinfo()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_shallowcopy_elementtree">test_shallowcopy_elementtree()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_tail">test_setslice_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#tearDown">tearDown()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_html_base_tag">test_html_base_tag()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_simple">test_simple()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_element_name_colon">test_html_element_name_colon()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_shallowcopy">test_shallowcopy()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#tearDown">tearDown()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_HTML_base_url_docinfo">test_HTML_base_url_docinfo()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html#test_simple_xml">test_simple_xml()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html" onclick="show_private();">_XMLPullParserTest</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_element_name_empty">test_html_element_name_empty()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_shallowcopy_elementtree">test_shallowcopy_elementtree()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.doctestcompare-module.html#temp_install">temp_install()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.doctestcompare-module.html">lxml.doctestcompare</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_element_name_colon">test_html_element_name_colon()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_element_name_quote">test_html_element_name_quote()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html#test_simple_xml_with_ns">test_simple_xml_with_ns()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html" onclick="show_private();">_XMLPullParserTest</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_simple">test_simple()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase-class.html">TempXmlFileTestCase</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile-module.html">lxml.tests.test_incremental_xmlfile</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_element_name_empty">test_html_element_name_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_element_name_space">test_html_element_name_space()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_sourceline_element">test_sourceline_element()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html#test_simple_xml">test_simple_xml()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html" onclick="show_private();">_XMLPullParserTest</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_addattr">test_addattr()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_element_name_quote">test_html_element_name_quote()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_feed_parser">test_html_feed_parser()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_sourceline_iterparse_end">test_sourceline_iterparse_end()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html#test_simple_xml_with_ns">test_simple_xml_with_ns()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html" onclick="show_private();">_XMLPullParserTest</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_addattr_element">test_addattr_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_element_name_space">test_html_element_name_space()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_feed_parser_chunky">test_html_feed_parser_chunky()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_sourceline_iterparse_start">test_sourceline_iterparse_start()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_sourceline_element">test_sourceline_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_addattr_list">test_addattr_list()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_file_error">test_html_file_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_feed_parser_more_tags">test_html_feed_parser_more_tags()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_sourceline_parse">test_sourceline_parse()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_sourceline_iterparse_end">test_sourceline_iterparse_end()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addnext">test_addnext()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse">test_html_iterparse()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_file_error">test_html_file_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_sourceline_XML">test_sourceline_XML()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_sourceline_iterparse_start">test_sourceline_iterparse_start()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addnext_comment">test_addnext_comment()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse_broken">test_html_iterparse_broken()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse">test_html_iterparse()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_standalone">test_standalone()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_sourceline_parse">test_sourceline_parse()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addnext_noops">test_addnext_noops()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse_broken_no_recover">test_html_iterparse_broken_no_recover()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse_broken">test_html_iterparse_broken()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_standard_lookup">test_standard_lookup()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_sourceline_XML">test_sourceline_XML()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addnext_pi">test_addnext_pi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse_broken_no_recover">test_html_iterparse_broken_no_recover()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_standalone">test_standalone()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addnext_root">test_addnext_root()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse_file">test_html_iterparse_file()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_str">test_str()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_standard_lookup">test_standard_lookup()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addnext_root">test_addnext_root()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addnext_root_comment">test_addnext_root_comment()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse_start">test_html_iterparse_start()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_attributes">test_strip_attributes()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_str">test_str()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addnext_root_comment">test_addnext_root_comment()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addnext_root_pi">test_addnext_root_pi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse_stop_short">test_html_iterparse_stop_short()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_attributes_ns">test_strip_attributes_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_attributes">test_strip_attributes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addnext_root_pi">test_addnext_root_pi()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addprevious">test_addprevious()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_doctype_empty">test_html_parser_target_doctype_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_elements">test_strip_elements()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_attributes_ns">test_strip_attributes_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addprevious">test_addprevious()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addprevious_comment">test_addprevious_comment()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_doctype_html">test_html_parser_target_doctype_html()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_elements_ns">test_strip_elements_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_elements">test_strip_elements()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addprevious_comment">test_addprevious_comment()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addprevious_noops">test_addprevious_noops()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_doctype_html_full">test_html_parser_target_doctype_html_full()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_tags">test_strip_tags()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_elements_ns">test_strip_elements_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addprevious_noops">test_addprevious_noops()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addprevious_pi">test_addprevious_pi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_tag">test_html_parser_target_tag()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_tags_and_remove">test_strip_tags_and_remove()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_tags">test_strip_tags()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addprevious_pi">test_addprevious_pi()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addprevious_root_comment">test_addprevious_root_comment()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_html_prefix_nsmap">test_html_prefix_nsmap()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_tags_doc_style">test_strip_tags_doc_style()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_tags_and_remove">test_strip_tags_and_remove()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addprevious_root_comment">test_addprevious_root_comment()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addprevious_root_pi">test_addprevious_root_pi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_subelement_name_colon">test_html_subelement_name_colon()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_tags_ns">test_strip_tags_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_tags_doc_style">test_strip_tags_doc_style()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_addprevious_root_pi">test_addprevious_root_pi()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_anonymous_namespace">test_anonymous_namespace()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_subelement_name_empty">test_html_subelement_name_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_tags_pi_comment">test_strip_tags_pi_comment()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_tags_ns">test_strip_tags_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_anonymous_namespace">test_anonymous_namespace()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_append_error">test_append_error()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_subelement_name_quote">test_html_subelement_name_quote()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_tags_pi_comment_all">test_strip_tags_pi_comment_all()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_tags_pi_comment">test_strip_tags_pi_comment()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_append_error">test_append_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_append_recursive_error">test_append_recursive_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_subelement_name_space">test_html_subelement_name_space()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_data_element_nsmap_custom">test_sub_data_element_nsmap_custom()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_strip_tags_pi_comment_all">test_strip_tags_pi_comment_all()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_append_recursive_error">test_append_recursive_error()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser-module.html">test_htmlparser</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib">test_attrib()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser-module.html">test_htmlparser</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_data_element_nsmap_custom_prefixes">test_sub_data_element_nsmap_custom_prefixes()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_data_element_nsmap_custom">test_sub_data_element_nsmap_custom()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib">test_attrib()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attrib_and_keywords">test_attrib_and_keywords()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_http_io.HttpIOTestCase-class.html#test_http_client">test_http_client()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_http_io.HttpIOTestCase-class.html">HttpIOTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_data_element_nsmap_default">test_sub_data_element_nsmap_default()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_data_element_nsmap_custom_prefixes">test_sub_data_element_nsmap_custom_prefixes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attrib_and_keywords">test_attrib_and_keywords()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_as_attrib">test_attrib_as_attrib()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_http_io.HttpIOTestCase-class.html#test_http_client_404">test_http_client_404()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_http_io.HttpIOTestCase-class.html">HttpIOTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_data_element_nsmap_empty">test_sub_data_element_nsmap_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_data_element_nsmap_default">test_sub_data_element_nsmap_default()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_as_attrib">test_attrib_as_attrib()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_clear">test_attrib_clear()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_http_io.HttpIOTestCase-class.html#test_http_client_gzip">test_http_client_gzip()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_http_io.HttpIOTestCase-class.html">HttpIOTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_element_nsmap_custom">test_sub_element_nsmap_custom()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_data_element_nsmap_empty">test_sub_data_element_nsmap_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_clear">test_attrib_clear()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_copy">test_attrib_copy()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_http_io-module.html">test_http_io</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_element_nsmap_custom_prefixes">test_sub_element_nsmap_custom_prefixes()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_element_nsmap_custom">test_sub_element_nsmap_custom()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_copy">test_attrib_copy()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_deepcopy">test_attrib_deepcopy()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile-module.html">test_incremental_xmlfile</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_element_nsmap_default">test_sub_element_nsmap_default()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_element_nsmap_custom_prefixes">test_sub_element_nsmap_custom_prefixes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_deepcopy">test_attrib_deepcopy()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_dict">test_attrib_dict()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_index">test_index()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_element_nsmap_empty">test_sub_element_nsmap_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_element_nsmap_default">test_sub_element_nsmap_default()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_dict">test_attrib_dict()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_get">test_attrib_get()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_insert">test_insert()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_subelement">test_subelement()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_sub_element_nsmap_empty">test_sub_element_nsmap_empty()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_get">test_attrib_get()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_ns_clear">test_attrib_ns_clear()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_insert_beyond_index">test_insert_beyond_index()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_subelement_attribute_invalid">test_subelement_attribute_invalid()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_subelement">test_subelement()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_ns_clear">test_attrib_ns_clear()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attrib_order">test_attrib_order()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_insert_negative">test_insert_negative()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_subelement_name_colon">test_subelement_name_colon()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_subelement_attribute_invalid">test_subelement_attribute_invalid()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attrib_order">test_attrib_order()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_pop">test_attrib_pop()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_insert_tail">test_insert_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_subelement_name_empty">test_subelement_name_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_subelement_name_colon">test_subelement_name_colon()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_pop">test_attrib_pop()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_pop_default">test_attrib_pop_default()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_internal_dtds">test_internal_dtds()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_subelement_name_quote">test_subelement_name_quote()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_subelement_name_empty">test_subelement_name_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_pop_default">test_attrib_pop_default()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_pop_empty_default">test_attrib_pop_empty_default()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_io-module.html">test_io</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_subelement_name_space">test_subelement_name_space()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_subelement_name_quote">test_subelement_name_quote()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_pop_empty_default">test_attrib_pop_empty_default()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_pop_invalid_args">test_attrib_pop_invalid_args()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iselement">test_iselement()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_subelement_nsmap">test_subelement_nsmap()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_subelement_name_space">test_subelement_name_space()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_pop_invalid_args">test_attrib_pop_invalid_args()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_pop_unknown">test_attrib_pop_unknown()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron-module.html">test_isoschematron</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_subelement_reference">test_subelement_reference()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_subelement_nsmap">test_subelement_nsmap()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_pop_unknown">test_attrib_pop_unknown()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_set_clear">test_attrib_set_clear()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iter">test_iter()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_subelement_with_attributes">test_subelement_with_attributes()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_subelement_reference">test_subelement_reference()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attrib_set_clear">test_attrib_set_clear()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_attribute">test_attribute()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterancestors">test_iterancestors()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_subelement_with_attributes_ns">test_subelement_with_attributes_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_subelement_with_attributes">test_subelement_with_attributes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_attribute">test_attribute()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_attribute_based_lookup">test_attribute_based_lookup()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterancestors_tag">test_iterancestors_tag()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_subelement_with_attributes_ns">test_subelement_with_attributes_ns()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_contains">test_attribute_contains()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterancestors_tag_multiple">test_iterancestors_tag_multiple()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadingTestCase-class.html#test_subtree_copy_thread">test_subtree_copy_thread()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading.ThreadingTestCase-class.html">ThreadingTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_attribute_based_lookup">test_attribute_based_lookup()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterancestors_tag_multiple">test_iterancestors_tag_multiple()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_gets_namespace_prefix_on_merge">test_attribute_gets_namespace_prefix_on_merge()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration">test_iteration()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_builder-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_builder-module.html">lxml.tests.test_builder</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_contains">test_attribute_contains()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration">test_iteration()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_gets_namespace_prefix_on_merge_with_nons">test_attribute_gets_namespace_prefix_on_merge_with_nons()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_crash">test_iteration_crash()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup-module.html">lxml.tests.test_classlookup</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_gets_namespace_prefix_on_merge">test_attribute_gets_namespace_prefix_on_merge()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_has_key">test_attribute_has_key()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_crash">test_iteration_crash()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_del_child">test_iteration_del_child()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_css-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_css-module.html">lxml.tests.test_css</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_gets_namespace_prefix_on_merge_with_nons">test_attribute_gets_namespace_prefix_on_merge_with_nons()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_del_child">test_iteration_del_child()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_items">test_attribute_items()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_double">test_iteration_double()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_dtd-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd-module.html">lxml.tests.test_dtd</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_has_key">test_attribute_has_key()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_double">test_iteration_double()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_items2">test_attribute_items2()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_empty">test_iteration_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree-module.html">lxml.tests.test_elementtree</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_items">test_attribute_items()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_items_ns">test_attribute_items_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_empty">test_iteration_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_reversed">test_iteration_reversed()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_errors-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_errors-module.html">lxml.tests.test_errors</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_items2">test_attribute_items2()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_iterator">test_attribute_iterator()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_reversed">test_iteration_reversed()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_subelement">test_iteration_subelement()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree-module.html">lxml.tests.test_etree</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_items_ns">test_attribute_items_ns()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_subelement">test_iteration_subelement()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_keeps_namespace_prefix_on_merge">test_attribute_keeps_namespace_prefix_on_merge()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_text_only">test_iteration_text_only()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser-module.html">lxml.tests.test_htmlparser</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_iterator">test_attribute_iterator()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iteration_text_only">test_iteration_text_only()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_keeps_namespace_prefix_on_merge_with_nons">test_attribute_keeps_namespace_prefix_on_merge_with_nons()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren">test_iterchildren()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_http_io-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_http_io-module.html">lxml.tests.test_http_io</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_keeps_namespace_prefix_on_merge">test_attribute_keeps_namespace_prefix_on_merge()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren">test_iterchildren()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_keys">test_attribute_keys()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_reversed">test_iterchildren_reversed()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile-module.html">lxml.tests.test_incremental_xmlfile</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_keeps_namespace_prefix_on_merge_with_nons">test_attribute_keeps_namespace_prefix_on_merge_with_nons()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_reversed">test_iterchildren_reversed()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_keys2">test_attribute_keys2()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_tag">test_iterchildren_tag()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_io-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_io-module.html">lxml.tests.test_io</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_keys">test_attribute_keys()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_keys_ns">test_attribute_keys_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_tag">test_iterchildren_tag()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_tag_multiple">test_iterchildren_tag_multiple()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron-module.html">lxml.tests.test_isoschematron</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_keys2">test_attribute_keys2()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_manipulation">test_attribute_manipulation()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_tag_multiple">test_iterchildren_tag_multiple()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_tag_multiple_posarg">test_iterchildren_tag_multiple_posarg()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_nsclasses-module.html">lxml.tests.test_nsclasses</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_keys_ns">test_attribute_keys_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_namespace_roundtrip">test_attribute_namespace_roundtrip()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_tag_multiple_posarg">test_iterchildren_tag_multiple_posarg()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_tag_multiple_reversed">test_iterchildren_tag_multiple_reversed()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify-module.html">lxml.tests.test_objectify</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_manipulation">test_attribute_manipulation()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_namespace_roundtrip_replaced">test_attribute_namespace_roundtrip_replaced()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_tag_multiple_reversed">test_iterchildren_tag_multiple_reversed()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_tag_posarg">test_iterchildren_tag_posarg()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup-module.html">lxml.tests.test_pyclasslookup</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_namespace_roundtrip">test_attribute_namespace_roundtrip()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_set">test_attribute_set()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_tag_posarg">test_iterchildren_tag_posarg()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_tag_reversed">test_iterchildren_tag_reversed()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_relaxng-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng-module.html">lxml.tests.test_relaxng</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_namespace_roundtrip_replaced">test_attribute_namespace_roundtrip_replaced()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterchildren_tag_reversed">test_iterchildren_tag_reversed()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_set">test_attribute_set()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterdescendants">test_iterdescendants()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_sax-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax-module.html">lxml.tests.test_sax</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_set">test_attribute_set()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterdescendants">test_iterdescendants()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_set_invalid">test_attribute_set_invalid()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterdescendants_tag">test_iterdescendants_tag()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_schematron-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_schematron-module.html">lxml.tests.test_schematron</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_set">test_attribute_set()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterdescendants_tag">test_iterdescendants_tag()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_str">test_attribute_str()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterdescendants_tag_multiple">test_iterdescendants_tag_multiple()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading-module.html">lxml.tests.test_threading</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_set_invalid">test_attribute_set_invalid()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterdescendants_tag_multiple">test_iterdescendants_tag_multiple()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_update_attrib">test_attribute_update_attrib()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse">test_iterparse()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_unicode-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode-module.html">lxml.tests.test_unicode</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_str">test_attribute_str()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_update_dict">test_attribute_update_dict()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse">test_iterparse()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse_attrib_ns">test_iterparse_attrib_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema-module.html">lxml.tests.test_xmlschema</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_update_attrib">test_attribute_update_attrib()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse_attrib_ns">test_iterparse_attrib_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_update_iter">test_attribute_update_iter()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_broken">test_iterparse_broken()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator-module.html">lxml.tests.test_xpathevaluator</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_update_dict">test_attribute_update_dict()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_update_sequence">test_attribute_update_sequence()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_broken">test_iterparse_broken()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_broken_multi_recover">test_iterparse_broken_multi_recover()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt-module.html#test_suite">test_suite()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt-module.html">lxml.tests.test_xslt</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_update_iter">test_attribute_update_iter()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_values">test_attribute_values()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_broken_multi_recover">test_iterparse_broken_multi_recover()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_broken_recover">test_iterparse_broken_recover()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tag_reset_ns">test_tag_reset_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_update_sequence">test_attribute_update_sequence()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_broken_recover">test_iterparse_broken_recover()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_values">test_attribute_values()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse_cdata">test_iterparse_cdata()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tag_reset_root_ns">test_tag_reset_root_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_values">test_attribute_values()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_values_ns">test_attribute_values_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse_cdata">test_iterparse_cdata()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse_clear">test_iterparse_clear()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tag_str_subclass">test_tag_str_subclass()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_attribute_values">test_attribute_values()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse_clear">test_iterparse_clear()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_xmlns_move">test_attribute_xmlns_move()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_comments">test_iterparse_comments()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tag_write">test_tag_write()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_values_ns">test_attribute_values_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attributes_get">test_attributes_get()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_comments">test_iterparse_comments()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_encoding_8bit_override">test_iterparse_encoding_8bit_override()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tail">test_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attribute_xmlns_move">test_attribute_xmlns_move()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_encoding_8bit_override">test_iterparse_encoding_8bit_override()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_errors.ErrorTestCase-class.html#test_bad_element">test_bad_element()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_errors.ErrorTestCase-class.html">ErrorTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_encoding_error">test_iterparse_encoding_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tail1">test_tail1()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_attributes_get">test_attributes_get()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_builder.BuilderTestCase-class.html#test_build_from_xpath_result">test_build_from_xpath_result()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_builder.BuilderTestCase-class.html">BuilderTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse_file">test_iterparse_file()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_encoding_error">test_iterparse_encoding_error()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tail_append">test_tail_append()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_errors.ErrorTestCase-class.html#test_bad_element">test_bad_element()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_errors.ErrorTestCase-class.html">ErrorTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse_file">test_iterparse_file()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tail_elementtree_root">test_tail_elementtree_root()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_builder.BuilderTestCase-class.html#test_build_from_xpath_result">test_build_from_xpath_result()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_builder.BuilderTestCase-class.html">BuilderTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_build_tree">test_build_tree()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_iterparse_file_dtd_end">test_iterparse_file_dtd_end()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tail_set_none">test_tail_set_none()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tail_elementtree_root">test_tail_elementtree_root()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_build_tree">test_build_tree()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_builder-module.html">test_builder</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_iterparse_file_dtd_start">test_iterparse_file_dtd_start()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tail_set_twice">test_tail_set_twice()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tail_set_none">test_tail_set_none()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_builder-module.html">test_builder</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_byte_invalid">test_byte_invalid()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse_getiterator">test_iterparse_getiterator()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tail_str_subclass">test_tail_str_subclass()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tail_set_twice">test_tail_set_twice()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_byte_invalid">test_byte_invalid()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_byte_zero">test_byte_zero()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_keep_cdata">test_iterparse_keep_cdata()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text">test_text()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tail_str_subclass">test_tail_str_subclass()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_byte_zero">test_byte_zero()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n">test_c14n()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">ETreeC14NTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse_large">test_iterparse_large()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text_empty">test_text_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text">test_text()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n">test_c14n()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_element_tostring_exclusive">test_c14n_element_tostring_exclusive()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">ETreeC14NTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse_move_elements">test_iterparse_move_elements()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text_escape_in">test_text_escape_in()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text_empty">test_text_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_element_tostring_exclusive">test_c14n_element_tostring_exclusive()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_element_tostring_with_comments">test_c14n_element_tostring_with_comments()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">ETreeC14NTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_pis">test_iterparse_pis()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text_escape_out">test_text_escape_out()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text_escape_in">test_text_escape_in()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_element_tostring_with_comments">test_c14n_element_tostring_with_comments()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_exclusive">test_c14n_exclusive()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">ETreeC14NTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_remove_comments">test_iterparse_remove_comments()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text_escape_tostring">test_text_escape_tostring()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text_escape_out">test_text_escape_out()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_exclusive">test_c14n_exclusive()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_file">test_c14n_file()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">ETreeC14NTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse_start">test_iterparse_start()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text_other">test_text_other()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text_escape_tostring">test_text_escape_tostring()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_file">test_c14n_file()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_file_gzip">test_c14n_file_gzip()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">ETreeC14NTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_iterparse_start_end">test_iterparse_start_end()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text_str_subclass">test_text_str_subclass()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text_other">test_text_other()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_file_gzip">test_c14n_file_gzip()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_gzip">test_c14n_gzip()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">ETreeC14NTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_strip">test_iterparse_strip()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_text_str_subclass">test_text_str_subclass()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_tostring_exclusive">test_c14n_tostring_exclusive()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">ETreeC14NTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tag">test_iterparse_tag()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadingTestCase-class.html#test_thread_create_xslt">test_thread_create_xslt()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading.ThreadingTestCase-class.html">ThreadingTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_gzip">test_c14n_gzip()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_tostring_inclusive_ns_prefixes">test_c14n_tostring_inclusive_ns_prefixes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">ETreeC14NTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tag">test_iterparse_tag()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tag_all">test_iterparse_tag_all()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadingTestCase-class.html#test_thread_error_log">test_thread_error_log()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading.ThreadingTestCase-class.html">ThreadingTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_tostring_exclusive">test_c14n_tostring_exclusive()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_tostring_with_comments">test_c14n_tostring_with_comments()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">ETreeC14NTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tag_all">test_iterparse_tag_all()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tag_ns">test_iterparse_tag_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadingTestCase-class.html#test_thread_mix">test_thread_mix()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading.ThreadingTestCase-class.html">ThreadingTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_tostring_inclusive_ns_prefixes">test_c14n_tostring_inclusive_ns_prefixes()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_with_comments">test_c14n_with_comments()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">ETreeC14NTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tag_ns">test_iterparse_tag_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tag_ns_all">test_iterparse_tag_ns_all()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadPipelineTestCase-class.html#test_thread_pipeline_global_parse">test_thread_pipeline_global_parse()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading.ThreadPipelineTestCase-class.html">ThreadPipelineTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_tostring_with_comments">test_c14n_tostring_with_comments()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">ETreeC14NTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tag_ns_all">test_iterparse_tag_ns_all()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_c_api">test_c_api()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tag_ns_empty">test_iterparse_tag_ns_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadPipelineTestCase-class.html#test_thread_pipeline_thread_parse">test_thread_pipeline_thread_parse()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading.ThreadPipelineTestCase-class.html">ThreadPipelineTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html#test_c14n_with_comments">test_c14n_with_comments()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">ETreeC14NTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tag_ns_empty">test_iterparse_tag_ns_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_cdata">test_cdata()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tag_ns_empty_all">test_iterparse_tag_ns_empty_all()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadingTestCase-class.html#test_thread_xslt">test_thread_xslt()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading.ThreadingTestCase-class.html">ThreadingTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_c_api">test_c_api()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_cdata_errors">test_cdata_errors()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tag_ns_empty_all">test_iterparse_tag_ns_empty_all()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tree_comments">test_iterparse_tree_comments()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadingTestCase-class.html#test_thread_xslt_attr_replace">test_thread_xslt_attr_replace()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading.ThreadingTestCase-class.html">ThreadingTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_cdata">test_cdata()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterparse_tree_comments">test_iterparse_tree_comments()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_cdata_parser">test_cdata_parser()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf16_bom">test_iterparse_utf16_bom()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading-module.html">test_threading</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_cdata_errors">test_cdata_errors()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_itersiblings">test_itersiblings()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_cdata_type">test_cdata_type()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf8_bom">test_iterparse_utf8_bom()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tostring">test_tostring()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_cdata_parser">test_cdata_parser()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_cdata_xpath">test_cdata_xpath()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_itersiblings_tag">test_itersiblings_tag()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_itersiblings">test_itersiblings()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tostring_element">test_tostring_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_cdata_type">test_cdata_type()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_itersiblings_tag_multiple">test_itersiblings_tag_multiple()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_change_pytype_attribute">test_change_pytype_attribute()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_itersiblings_tag">test_itersiblings_tag()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tostring_element_tail">test_tostring_element_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_cdata_xpath">test_cdata_xpath()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child">test_child()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_itersiblings_tag_multiple">test_itersiblings_tag_multiple()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_itertext">test_itertext()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tostring_method_html">test_tostring_method_html()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_change_pytype_attribute">test_change_pytype_attribute()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_addattr">test_child_addattr()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_itertext_child">test_itertext_child()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_itertext">test_itertext()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_tostring_method_text">test_tostring_method_text()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child">test_child()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_getattr">test_child_getattr()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk">test_iterwalk()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_itertext_child">test_itertext_child()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_method_text_encoding">test_tostring_method_text_encoding()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_addattr">test_child_addattr()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_getattr_empty_ns">test_child_getattr_empty_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_attrib_ns">test_iterwalk_attrib_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk">test_iterwalk()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_method_text_unicode">test_tostring_method_text_unicode()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_getattr">test_child_getattr()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_index">test_child_index()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_clear">test_iterwalk_clear()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_attrib_ns">test_iterwalk_attrib_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_none">test_tostring_none()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_getattr_empty_ns">test_child_getattr_empty_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_index_neg">test_child_index_neg()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_getiterator">test_iterwalk_getiterator()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_clear">test_iterwalk_clear()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_pretty">test_tostring_pretty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_index">test_child_index()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_iter">test_child_iter()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_start">test_iterwalk_start()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_getiterator">test_iterwalk_getiterator()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_standalone">test_tostring_standalone()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_index_neg">test_child_index_neg()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_len">test_child_len()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_start_end">test_iterwalk_start_end()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_start">test_iterwalk_start()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_standalone_in_out">test_tostring_standalone_in_out()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_iter">test_child_iter()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_nonexistant">test_child_nonexistant()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_tag">test_iterwalk_tag()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_start_end">test_iterwalk_start_end()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_unicode">test_tostring_unicode()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_len">test_child_len()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_ns_nons">test_child_ns_nons()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_tag_all">test_iterwalk_tag_all()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_tag">test_iterwalk_tag()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_unicode_element">test_tostring_unicode_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_nonexistant">test_child_nonexistant()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup">test_lookup()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_unicode_element_tail">test_tostring_unicode_element_tail()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_ns_nons">test_child_ns_nons()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_attrib">test_lookup_attrib()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_unicode_none">test_tostring_unicode_none()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-</tr>
-<tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_child_set_ro">test_child_set_ro()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_bool">test_lookup_bool()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_unicode_pretty">test_tostring_unicode_pretty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_iterwalk_tag_all">test_iterwalk_tag_all()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_unicode_element_tail">test_tostring_unicode_element_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_class_lookup">test_class_lookup()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_get">test_lookup_get()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup">test_lookup()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_with_tail">test_tostring_with_tail()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_unicode_none">test_tostring_unicode_none()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_class_lookup_reentry">test_class_lookup_reentry()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_get_default">test_lookup_get_default()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_attrib">test_lookup_attrib()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tounicode">test_tounicode()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_unicode_pretty">test_tostring_unicode_pretty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_class_lookup_type_mismatch">test_class_lookup_type_mismatch()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getchildren">test_lookup_getchildren()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_bool">test_lookup_bool()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tounicode_element">test_tounicode_element()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tostring_with_tail">test_tostring_with_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_filename">test_class_parse_filename()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getitem">test_lookup_getitem()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_get">test_lookup_get()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tounicode_element_tail">test_tounicode_element_tail()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tounicode">test_tounicode()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_filename_remove_previous">test_class_parse_filename_remove_previous()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getitem_neg">test_lookup_getitem_neg()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_get_default">test_lookup_get_default()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tounicode_none">test_tounicode_none()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tounicode_element">test_tounicode_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_fileobject">test_class_parse_fileobject()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getnext">test_lookup_getnext()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getchildren">test_lookup_getchildren()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tounicode_pretty">test_tounicode_pretty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tounicode_element_tail">test_tounicode_element_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_unamed_fileobject">test_class_parse_unamed_fileobject()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getparent">test_lookup_getparent()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getitem">test_lookup_getitem()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_tree_io">test_tree_io()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tounicode_none">test_tounicode_none()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup-module.html">test_classlookup</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getprevious">test_lookup_getprevious()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getitem_neg">test_lookup_getitem_neg()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_tree_io_latin1">test_tree_io_latin1()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_tounicode_pretty">test_tounicode_pretty()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_clear">test_clear()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getslice">test_lookup_getslice()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getnext">test_lookup_getnext()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_treebuilder">test_treebuilder()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_tree_io">test_tree_io()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_clear_sub">test_clear_sub()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_iter_children">test_lookup_iter_children()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getparent">test_lookup_getparent()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_treebuilder_target">test_treebuilder_target()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_tree_io_latin1">test_tree_io_latin1()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_clear_tail">test_clear_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_iterchildren">test_lookup_iterchildren()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getprevious">test_lookup_getprevious()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_bool">test_type_bool()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_treebuilder">test_treebuilder()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_closing_out_of_order_in_error_case">test_closing_out_of_order_in_error_case()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_iterchildren_tag">test_lookup_iterchildren_tag()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_getslice">test_lookup_getslice()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_bool_cmp">test_type_bool_cmp()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_treebuilder_target">test_treebuilder_target()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_comment">test_comment()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_keep_ref_assertion">test_lookup_keep_ref_assertion()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_iter_children">test_lookup_iter_children()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_float">test_type_float()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_bool">test_type_bool()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_comment">test_comment()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_len">test_lookup_len()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_iterchildren">test_lookup_iterchildren()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_int">test_type_int()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_bool_cmp">test_type_bool_cmp()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ProxyTestCase-class.html#test_comment_base">test_comment_base()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ProxyTestCase-class.html">ProxyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_prefix">test_lookup_prefix()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_iterchildren_tag">test_lookup_iterchildren_tag()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_int_cmp">test_type_int_cmp()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_float">test_type_float()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_comment_empty">test_comment_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_sourceline">test_lookup_sourceline()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_keep_ref_assertion">test_lookup_keep_ref_assertion()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_none_cmp">test_type_none_cmp()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_int">test_type_int()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_comment_getitem_getslice">test_comment_getitem_getslice()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_tag">test_lookup_tag()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_len">test_lookup_len()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_NoneType">test_type_NoneType()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_int_cmp">test_type_int_cmp()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_comment_immutable">test_comment_immutable()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_tail">test_lookup_tail()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_prefix">test_lookup_prefix()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str">test_type_str()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_none_cmp">test_type_none_cmp()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_comment_no_proxy_yet">test_comment_no_proxy_yet()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_text">test_lookup_text()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_sourceline">test_lookup_sourceline()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_add">test_type_str_add()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_NoneType">test_type_NoneType()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_comment_nonsense">test_comment_nonsense()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_lookup_without_fallback">test_lookup_without_fallback()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_as_complex">test_type_str_as_complex()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_tag">test_lookup_tag()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str">test_type_str()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_comment_parse_empty">test_comment_parse_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadingTestCase-class.html#test_main_xslt_in_thread">test_main_xslt_in_thread()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading.ThreadingTestCase-class.html">ThreadingTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_as_float">test_type_str_as_float()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_tail">test_lookup_tail()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_add">test_type_str_add()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_comment_text">test_comment_text()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_makeelement">test_makeelement()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_as_int">test_type_str_as_int()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html#test_lookup_text">test_lookup_text()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">PyClassLookupTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_as_complex">test_type_str_as_complex()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_comment_whitespace">test_comment_whitespace()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_merge_namespaced_subtree_as_slice">test_merge_namespaced_subtree_as_slice()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_cmp">test_type_str_cmp()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_lookup_without_fallback">test_lookup_without_fallback()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_as_float">test_type_str_as_float()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadingTestCase-class.html#test_concurrent_class_lookup">test_concurrent_class_lookup()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading.ThreadingTestCase-class.html">ThreadingTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML">test_module_HTML()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_floatliteral">test_type_str_floatliteral()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadingTestCase-class.html#test_main_xslt_in_thread">test_main_xslt_in_thread()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading.ThreadingTestCase-class.html">ThreadingTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_as_int">test_type_str_as_int()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadingTestCase-class.html#test_concurrent_proxies">test_concurrent_proxies()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading.ThreadingTestCase-class.html">ThreadingTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML_access">test_module_HTML_access()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_hash">test_type_str_hash()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_makeelement">test_makeelement()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_cmp">test_type_str_cmp()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_countchildren">test_countchildren()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML_broken">test_module_HTML_broken()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_intliteral">test_type_str_intliteral()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_merge_namespaced_subtree_as_slice">test_merge_namespaced_subtree_as_slice()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_floatliteral">test_type_str_floatliteral()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_crash">test_crash()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML_cdata">test_module_HTML_cdata()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML">test_module_HTML()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_mod">test_type_str_mod()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_hash">test_type_str_hash()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html#test_create_element">test_create_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html">ETreeNamespaceClassesTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML_pretty_print">test_module_HTML_pretty_print()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML_access">test_module_HTML_access()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_mod_data_elements">test_type_str_mod_data_elements()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_intliteral">test_type_str_intliteral()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html#test_create_element_default">test_create_element_default()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html">ETreeNamespaceClassesTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML_unicode">test_module_HTML_unicode()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML_broken">test_module_HTML_broken()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_mul">test_type_str_mul()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_mod">test_type_str_mod()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_css-module.html">test_css</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_error">test_module_parse_fileobject_error()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_sequence">test_type_str_sequence()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML_cdata">test_module_HTML_cdata()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_mod_data_elements">test_type_str_mod_data_elements()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_css.CSSTestCase-class.html#test_cssselect">test_cssselect()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_css.CSSTestCase-class.html">CSSTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_late_error">test_module_parse_fileobject_late_error()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_unregistered">test_type_unregistered()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML_pretty_print">test_module_HTML_pretty_print()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_mul">test_type_str_mul()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_custom_lookup">test_custom_lookup()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_type_error">test_module_parse_fileobject_type_error()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_ustr">test_type_ustr()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_HTML_unicode">test_module_HTML_unicode()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_str_sequence">test_type_str_sequence()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_custom_lookup_ns_fallback">test_custom_lookup_ns_fallback()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_gzipobject">test_module_parse_gzipobject()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_error">test_module_parse_fileobject_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_ustr_add">test_type_ustr_add()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_unregistered">test_type_unregistered()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_attrib_attributes_precedence">test_data_element_attrib_attributes_precedence()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_parse_html">test_module_parse_html()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_ustr_floatliteral">test_type_ustr_floatliteral()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_late_error">test_module_parse_fileobject_late_error()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_ustr">test_type_ustr()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_bool">test_data_element_bool()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_parse_html_error">test_module_parse_html_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_type_error">test_module_parse_fileobject_type_error()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_ustr_add">test_type_ustr_add()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg">test_data_element_data_element_arg()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_gzipobject">test_module_parse_gzipobject()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_ustr_floatliteral">test_type_ustr_floatliteral()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg_invalid_pytype">test_data_element_data_element_arg_invalid_pytype()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_parse_html">test_module_parse_html()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_ustr_intliteral">test_type_ustr_intliteral()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg">test_data_element_data_element_arg()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg_invalid_xsi">test_data_element_data_element_arg_invalid_xsi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_parse_html_filelike">test_module_parse_html_filelike()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_parse_html_error">test_module_parse_html_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_type_ustr_mul">test_type_ustr_mul()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg_invalid_pytype">test_data_element_data_element_arg_invalid_pytype()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg_pytype">test_data_element_data_element_arg_pytype()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_parse_html_norecover">test_module_parse_html_norecover()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_parse_html_filelike">test_module_parse_html_filelike()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_unicode-module.html">test_unicode</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg_invalid_xsi">test_data_element_data_element_arg_invalid_xsi()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg_pytype_none">test_data_element_data_element_arg_pytype_none()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_large_fileobject">test_module_parse_large_fileobject()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_module_parse_html_norecover">test_module_parse_html_norecover()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_attr">test_unicode_attr()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg_pytype">test_data_element_data_element_arg_pytype()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg_pytype_xsitype">test_data_element_data_element_arg_pytype_xsitype()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_large_fileobject">test_module_parse_large_fileobject()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_unicode_byte_invalid">test_unicode_byte_invalid()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg_xsitype">test_data_element_data_element_arg_xsitype()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_multiple_elementrees">test_multiple_elementrees()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_unicode_byte_invalid">test_unicode_byte_invalid()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_unicode_byte_invalid_sequence">test_unicode_byte_invalid_sequence()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg_pytype_none">test_data_element_data_element_arg_pytype_none()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_element_arg">test_data_element_element_arg()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_multiple_elementrees">test_multiple_elementrees()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">ETreeRelaxNGTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_unicode_byte_invalid_sequence">test_unicode_byte_invalid_sequence()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_unicode_byte_zero">test_unicode_byte_zero()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg_pytype_xsitype">test_data_element_data_element_arg_pytype_xsitype()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_float">test_data_element_float()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_multiple_elementrees">test_multiple_elementrees()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_unicode_byte_zero">test_unicode_byte_zero()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_comment">test_unicode_comment()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_data_element_arg_xsitype">test_data_element_data_element_arg_xsitype()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_float_hash">test_data_element_float_hash()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespace_cleanup">test_namespace_cleanup()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_comment">test_unicode_comment()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_ns_invalid">test_unicode_ns_invalid()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_element_arg">test_data_element_element_arg()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_int">test_data_element_int()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_namespace_lookup">test_namespace_lookup()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_ns_invalid">test_unicode_ns_invalid()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_nstag">test_unicode_nstag()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_float">test_data_element_float()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_int_hash">test_data_element_int_hash()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_namespace_nested_anonymous">test_namespace_nested_anonymous()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_nstag">test_unicode_nstag()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_nstag_invalid">test_unicode_nstag_invalid()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_float_hash">test_data_element_float_hash()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_invalid_pytype">test_data_element_invalid_pytype()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_namespace_nested_nsmap">test_namespace_nested_nsmap()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_nstag_invalid">test_unicode_nstag_invalid()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_parse_stringio">test_unicode_parse_stringio()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_int">test_data_element_int()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_invalid_xsi">test_data_element_invalid_xsi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_namespace_nsmap">test_namespace_nsmap()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_parse_stringio">test_unicode_parse_stringio()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_qname">test_unicode_qname()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_int_hash">test_data_element_int_hash()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_NoneType">test_data_element_NoneType()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespaces">test_namespaces()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_qname">test_unicode_qname()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_qname_invalid">test_unicode_qname_invalid()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_invalid_pytype">test_data_element_invalid_pytype()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_nsmap_custom">test_data_element_nsmap_custom()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_namespaces_after_serialize">test_namespaces_after_serialize()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_qname_invalid">test_unicode_qname_invalid()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_invalid_xsi">test_data_element_invalid_xsi()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespaces_copy_element">test_namespaces_copy_element()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_tag">test_unicode_tag()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_NoneType">test_data_element_NoneType()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_nsmap_custom_prefixes">test_data_element_nsmap_custom_prefixes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespaces_default">test_namespaces_default()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespaces_copy_element">test_namespaces_copy_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_tag_invalid">test_unicode_tag_invalid()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_nsmap_custom">test_data_element_nsmap_custom()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_nsmap_default">test_data_element_nsmap_default()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespaces_default_and_attr">test_namespaces_default_and_attr()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespaces_default">test_namespaces_default()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_xml">test_unicode_xml()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_nsmap_custom_prefixes">test_data_element_nsmap_custom_prefixes()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_nsmap_empty">test_data_element_nsmap_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespaces_default_copy_element">test_namespaces_default_copy_element()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespaces_default_and_attr">test_namespaces_default_and_attr()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_unicode_xml_broken">test_unicode_xml_broken()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_nsmap_default">test_data_element_nsmap_default()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_pytype_none">test_data_element_pytype_none()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespaces_elementtree">test_namespaces_elementtree()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespaces_default_copy_element">test_namespaces_default_copy_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html#test_unknown_event">test_unknown_event()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html" onclick="show_private();">_XMLPullParserTest</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_nsmap_empty">test_data_element_nsmap_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_pytype_none_compat">test_data_element_pytype_none_compat()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespaces_reuse_after_move">test_namespaces_reuse_after_move()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespaces_elementtree">test_namespaces_elementtree()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_builder.BuilderTestCase-class.html#test_unknown_type_raises">test_unknown_type_raises()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_builder.BuilderTestCase-class.html">BuilderTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_pytype_none">test_data_element_pytype_none()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_pytypes">test_data_element_pytypes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_nested_default_namespace">test_nested_default_namespace()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_namespaces_reuse_after_move">test_namespaces_reuse_after_move()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtFuncTestCase-class.html#test_variable_result_tree_fragment">test_variable_result_tree_fragment()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtFuncTestCase-class.html">ETreeXSLTExtFuncTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_pytype_none_compat">test_data_element_pytype_none_compat()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_str">test_data_element_str()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_http_io.HttpIOTestCase-class.html#test_network_dtd">test_network_dtd()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_http_io.HttpIOTestCase-class.html">HttpIOTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_nested_default_namespace">test_nested_default_namespace()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_vars">test_vars()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_pytypes">test_data_element_pytypes()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_str_floatliteral">test_data_element_str_floatliteral()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_access">test_ns_access()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_http_io.HttpIOTestCase-class.html#test_network_dtd">test_network_dtd()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_http_io.HttpIOTestCase-class.html">HttpIOTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_version">test_version()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_str">test_data_element_str()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_str_intliteral">test_data_element_str_intliteral()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_access2">test_ns_access2()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_access">test_ns_access()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_weird_dict_interaction">test_weird_dict_interaction()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_str_floatliteral">test_data_element_str_floatliteral()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_unregistered">test_data_element_unregistered()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_attr">test_ns_attr()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_access2">test_ns_access2()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_wide_unicode_xml">test_wide_unicode_xml()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_str_intliteral">test_data_element_str_intliteral()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_ustr">test_data_element_ustr()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html#test_ns_classes">test_ns_classes()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html">ETreeNamespaceClassesTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_attr">test_ns_attr()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_unicode.UnicodeTestCase-class.html#test_wide_unicode_xml">test_wide_unicode_xml()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">UnicodeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_unregistered">test_data_element_unregistered()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_ustr_floatliteral">test_data_element_ustr_floatliteral()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_decl_tostring">test_ns_decl_tostring()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html#test_ns_classes">test_ns_classes()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html">ETreeNamespaceClassesTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_write">test_write()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_ustr">test_data_element_ustr()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_ustr_intliteral">test_data_element_ustr_intliteral()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_decl_tostring_default">test_ns_decl_tostring_default()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_decl_tostring">test_ns_decl_tostring()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html#test_write">test_write()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html">ETreeWriteTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_ustr_floatliteral">test_data_element_ustr_floatliteral()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_xsitypes">test_data_element_xsitypes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_decl_tostring_element">test_ns_decl_tostring_element()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_decl_tostring_default">test_ns_decl_tostring_default()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_io.ETreeIOTestCase-class.html#test_write_compressed_text">test_write_compressed_text()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_io.ETreeIOTestCase-class.html">ETreeIOTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_ustr_intliteral">test_data_element_ustr_intliteral()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_xsitypes_prefixed">test_data_element_xsitypes_prefixed()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_decl_tostring_root">test_ns_decl_tostring_root()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_decl_tostring_element">test_ns_decl_tostring_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_write_Element">test_write_Element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_xsitypes">test_data_element_xsitypes()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_xsitypes_xsdprefixed">test_data_element_xsitypes_xsdprefixed()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html#test_ns_events">test_ns_events()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html" onclick="show_private();">_XMLPullParserTest</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_write_Element_repeatedly">test_write_Element_repeatedly()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_decl_tostring_root">test_ns_decl_tostring_root()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_write_Element_repeatedly">test_write_Element_repeatedly()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_xsitypes_prefixed">test_data_element_xsitypes_prefixed()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_dataelement_xsi">test_dataelement_xsi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_move">test_ns_move()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html#test_ns_events">test_ns_events()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html" onclick="show_private();">_XMLPullParserTest</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_write_ElementTreeDoctest">test_write_ElementTreeDoctest()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_data_element_xsitypes_xsdprefixed">test_data_element_xsitypes_xsdprefixed()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_dataelement_xsi_nsmap">test_dataelement_xsi_nsmap()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_setting">test_ns_setting()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_move">test_ns_move()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_write_fail">test_write_fail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_dataelement_xsi">test_dataelement_xsi()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_dataelement_xsi_prefix_error">test_dataelement_xsi_prefix_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_tag_parse">test_ns_tag_parse()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_setting">test_ns_setting()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html#test_write_file">test_write_file()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html">ETreeWriteTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_dataelement_xsi_nsmap">test_dataelement_xsi_nsmap()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_date_element_efactory_tail">test_date_element_efactory_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses-module.html">test_nsclasses</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ns_tag_parse">test_ns_tag_parse()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html#test_write_file_gzip">test_write_file_gzip()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html">ETreeWriteTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_dataelement_xsi_prefix_error">test_dataelement_xsi_prefix_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_date_element_efactory_text">test_date_element_efactory_text()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_nsmap_prefix_invalid">test_nsmap_prefix_invalid()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses-module.html">test_nsclasses</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html#test_write_file_gzip_parse">test_write_file_gzip_parse()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html">ETreeWriteTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_date_element_efactory_tail">test_date_element_efactory_tail()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path">test_object_path()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_deannotate">test_deannotate()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_nsmap_prefix_invalid">test_nsmap_prefix_invalid()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html#test_write_file_gzipfile_parse">test_write_file_gzipfile_parse()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html">ETreeWriteTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_date_element_efactory_text">test_date_element_efactory_text()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_addattr">test_object_path_addattr()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy">test_deepcopy()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path">test_object_path()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_write_filename">test_write_filename()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_deannotate">test_deannotate()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_addattr_create">test_object_path_addattr_create()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy_append">test_deepcopy_append()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_addattr">test_object_path_addattr()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html#test_write_gzip">test_write_gzip()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html">ETreeWriteTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy">test_deepcopy()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy_comment">test_deepcopy_comment()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_addattr_create_element">test_object_path_addattr_create_element()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_addattr_create">test_object_path_addattr_create()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html#test_write_gzip_level">test_write_gzip_level()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html">ETreeWriteTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy_append">test_deepcopy_append()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy_elementtree">test_deepcopy_elementtree()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_addattr_create_list">test_object_path_addattr_create_list()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_addattr_create_element">test_object_path_addattr_create_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_write_invalid_filename">test_write_invalid_filename()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy_comment">test_deepcopy_comment()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_addattr_element">test_object_path_addattr_element()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_deepcopy_elementtree_dtd">test_deepcopy_elementtree_dtd()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_addattr_create_list">test_object_path_addattr_create_list()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_write_method_html">test_write_method_html()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy_elementtree">test_deepcopy_elementtree()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_default_absolute">test_object_path_default_absolute()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_deepcopy_elementtree_pi">test_deepcopy_elementtree_pi()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_addattr_element">test_object_path_addattr_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_write_method_text">test_write_method_text()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_deepcopy_elementtree_dtd">test_deepcopy_elementtree_dtd()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_default_relative">test_object_path_default_relative()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy_namespaces">test_deepcopy_namespaces()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_default_absolute">test_object_path_default_absolute()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree._XIncludeTestCase-class.html#test_xinclude">test_xinclude()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree._XIncludeTestCase-class.html" onclick="show_private();">_XIncludeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_deepcopy_elementtree_pi">test_deepcopy_elementtree_pi()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_deepcopy_pi">test_deepcopy_pi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_dot">test_object_path_dot()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_default_relative">test_object_path_default_relative()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree._XIncludeTestCase-class.html#test_xinclude_resolver">test_xinclude_resolver()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree._XIncludeTestCase-class.html" onclick="show_private();">_XIncludeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy_namespaces">test_deepcopy_namespaces()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy_subelement">test_deepcopy_subelement()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_dot_list">test_object_path_dot_list()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_dot">test_object_path_dot()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree._XIncludeTestCase-class.html#test_xinclude_text">test_xinclude_text()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree._XIncludeTestCase-class.html" onclick="show_private();">_XIncludeTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_deepcopy_pi">test_deepcopy_pi()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_dot_root">test_object_path_dot_root()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy_tail">test_deepcopy_tail()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_dot_list">test_object_path_dot_list()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_XML">test_XML()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy_subelement">test_deepcopy_subelement()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_dot_root_list">test_object_path_dot_root_list()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_default_class_lookup">test_default_class_lookup()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_dot_root">test_object_path_dot_root()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_xml_base">test_xml_base()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_deepcopy_tail">test_deepcopy_tail()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_fail">test_object_path_fail()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_default_class_lookup_pull_parser">test_default_class_lookup_pull_parser()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_dot_root_list">test_object_path_dot_root_list()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_xml_base">test_xml_base()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_default_class_lookup">test_default_class_lookup()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_fail_parse_empty">test_object_path_fail_parse_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_default_namespace">test_default_namespace()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_fail">test_object_path_fail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_xml_base_attribute">test_xml_base_attribute()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_default_class_lookup_pull_parser">test_default_class_lookup_pull_parser()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_fail_parse_empty_list">test_object_path_fail_parse_empty_list()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_default_parser_HTML_broken">test_default_parser_HTML_broken()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_fail_parse_empty">test_object_path_fail_parse_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_xml_base_attribute">test_xml_base_attribute()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_default_namespace">test_default_namespace()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_hasattr">test_object_path_hasattr()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html#test_default_tagname">test_default_tagname()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html">ETreeNamespaceClassesTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_fail_parse_empty_list">test_object_path_fail_parse_empty_list()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_XML_base_url_docinfo">test_XML_base_url_docinfo()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_default_parser_HTML_broken">test_default_parser_HTML_broken()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_index">test_object_path_index()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_del_attribute_ns">test_del_attribute_ns()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_hasattr">test_object_path_hasattr()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_XML_base_url_docinfo">test_XML_base_url_docinfo()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html#test_default_tagname">test_default_tagname()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html">ETreeNamespaceClassesTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_index_fail_lookup">test_object_path_index_fail_lookup()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_del_attribute_ns_parsed">test_del_attribute_ns_parsed()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_index">test_object_path_index()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_XML_set_base_url_docinfo">test_XML_set_base_url_docinfo()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_del_attribute_ns">test_del_attribute_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_del_insert">test_del_insert()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_index_fail_parse">test_object_path_index_fail_parse()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_index_fail_lookup">test_object_path_index_fail_lookup()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_XML_set_base_url_docinfo">test_XML_set_base_url_docinfo()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_del_attribute_ns_parsed">test_del_attribute_ns_parsed()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_del_setitem">test_del_setitem()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_index_list">test_object_path_index_list()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_index_fail_parse">test_object_path_index_fail_parse()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_XMLDTDID">test_XMLDTDID()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_del_insert">test_del_insert()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_del_setslice">test_del_setslice()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_list">test_object_path_list()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_index_list">test_object_path_index_list()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_XMLDTDID_empty">test_XMLDTDID_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_del_setitem">test_del_setitem()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delitem">test_delitem()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_ns">test_object_path_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_list">test_object_path_list()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_XMLID">test_XMLID()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_del_setslice">test_del_setslice()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delitem_tail">test_delitem_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_ns_list">test_object_path_ns_list()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_ns">test_object_path_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema-module.html">test_xmlschema</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delitem">test_delitem()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice">test_delslice()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_set">test_object_path_set()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_ns_list">test_object_path_ns_list()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema">test_xmlschema()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delitem_tail">test_delitem_tail()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_child_tail">test_delslice_child_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_set_create">test_object_path_set_create()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_set">test_object_path_set()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_comment_error">test_xmlschema_comment_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice">test_delslice()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_memory">test_delslice_memory()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_set_create_element">test_object_path_set_create_element()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_set_create">test_object_path_set_create()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_default_attributes">test_xmlschema_default_attributes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_child_tail">test_delslice_child_tail()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_negative1">test_delslice_negative1()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_set_create_list">test_object_path_set_create_list()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_set_create_element">test_object_path_set_create_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_elementtree_error">test_xmlschema_elementtree_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_memory">test_delslice_memory()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_negative2">test_delslice_negative2()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_set_element">test_object_path_set_element()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_set_create_list">test_object_path_set_create_list()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_file">test_xmlschema_file()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_negative1">test_delslice_negative1()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_step">test_delslice_step()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_syntax">test_object_path_syntax()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_set_element">test_object_path_set_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_illegal_validation_error">test_xmlschema_illegal_validation_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_negative2">test_delslice_negative2()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_step_negative">test_delslice_step_negative()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_object_path_syntax">test_object_path_syntax()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_import_file">test_xmlschema_import_file()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_step_negative2">test_delslice_step_negative2()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify-module.html">test_objectify</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_import_file">test_xmlschema_import_file()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_invalid_schema1">test_xmlschema_invalid_schema1()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_step">test_delslice_step()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_tail">test_delslice_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parse_base_url_docinfo">test_parse_base_url_docinfo()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_invalid_schema1">test_xmlschema_invalid_schema1()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_invalid_schema2">test_xmlschema_invalid_schema2()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_step_negative">test_delslice_step_negative()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_descendant_paths">test_descendant_paths()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_parse_base_url_docinfo">test_parse_base_url_docinfo()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_invalid_schema2">test_xmlschema_invalid_schema2()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_iterparse">test_xmlschema_iterparse()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_step_negative2">test_delslice_step_negative2()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_descendant_paths_child">test_descendant_paths_child()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_cdata">test_parse_cdata()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_iterparse">test_xmlschema_iterparse()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_iterparse_fail">test_xmlschema_iterparse_fail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_delslice_tail">test_delslice_tail()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_descendant_paths_prefix">test_descendant_paths_prefix()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_encoding_8bit_explicit">test_parse_encoding_8bit_explicit()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_iterparse_fail">test_xmlschema_iterparse_fail()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html#test_xmlschema_nested_resolvers">test_xmlschema_nested_resolvers()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html">ETreeXMLSchemaResolversTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_descendant_paths">test_descendant_paths()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_dir">test_dir()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_parse_encoding_8bit_explicit">test_parse_encoding_8bit_explicit()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html#test_xmlschema_nested_resolvers">test_xmlschema_nested_resolvers()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html">ETreeXMLSchemaResolversTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_parse">test_xmlschema_parse()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_descendant_paths_child">test_descendant_paths_child()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_docinfo_empty">test_docinfo_empty()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_encoding_8bit_override">test_parse_encoding_8bit_override()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_parse">test_xmlschema_parse()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_parse_default_attributes">test_xmlschema_parse_default_attributes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_descendant_paths_prefix">test_descendant_paths_prefix()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_docinfo_name_only">test_docinfo_name_only()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_parse_encoding_8bit_override">test_parse_encoding_8bit_override()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_parse_default_attributes">test_xmlschema_parse_default_attributes()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_parse_default_attributes_schema_config">test_xmlschema_parse_default_attributes_schema_config()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_dir">test_dir()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_docinfo_public">test_docinfo_public()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_error">test_parse_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_parse_default_attributes_schema_config">test_xmlschema_parse_default_attributes_schema_config()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_parse_fixed_attributes">test_xmlschema_parse_fixed_attributes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_docinfo_empty">test_docinfo_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_docinfo_system">test_docinfo_system()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_error_from_file">test_parse_error_from_file()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_parse_fixed_attributes">test_xmlschema_parse_fixed_attributes()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html#test_xmlschema_resolvers">test_xmlschema_resolvers()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html">ETreeXMLSchemaResolversTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_docinfo_name_only">test_docinfo_name_only()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_doctype_name_only_roundtrip">test_doctype_name_only_roundtrip()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeErrorLogTest-class.html#test_parse_error_logging">test_parse_error_logging()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeErrorLogTest-class.html">ETreeErrorLogTest</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html#test_xmlschema_resolvers">test_xmlschema_resolvers()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html#test_xmlschema_resolvers_noroot">test_xmlschema_resolvers_noroot()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html">ETreeXMLSchemaResolversTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_docinfo_public">test_docinfo_public()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_doctype_output_override">test_doctype_output_override()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_error_none">test_parse_error_none()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html#test_xmlschema_resolvers_noroot">test_xmlschema_resolvers_noroot()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html#test_xmlschema_resolvers_root">test_xmlschema_resolvers_root()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html">ETreeXMLSchemaResolversTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_docinfo_system">test_docinfo_system()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd-module.html">test_dtd</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_file">test_parse_file()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html#test_xmlschema_resolvers_root">test_xmlschema_resolvers_root()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html">ETreeXMLSchemaResolversTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_shortcut">test_xmlschema_shortcut()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_doctype_name_only_roundtrip">test_doctype_name_only_roundtrip()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd">test_dtd()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_parse_file_dtd">test_parse_file_dtd()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_shortcut">test_xmlschema_shortcut()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_doctype_output_override">test_doctype_output_override()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_file_encoding">test_parse_file_encoding()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html#test_xmlschema_stringio">test_xmlschema_stringio()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">ETreeXMLSchemaTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd-module.html">test_dtd</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_file_nonexistent">test_parse_file_nonexistent()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_api_internal">test_dtd_api_internal()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_file_encoding">test_parse_file_encoding()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_boolean">test_xpath_boolean()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd">test_dtd()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_assertValid">test_dtd_assertValid()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_file_object">test_parse_file_object()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_file_nonexistent">test_parse_file_nonexistent()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_class_error">test_xpath_class_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_api_internal">test_dtd_api_internal()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_attrs">test_dtd_attrs()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_file_object_encoding">test_parse_file_object_encoding()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_file_object">test_parse_file_object()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_class_prefix_error">test_xpath_class_prefix_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_assertValid">test_dtd_assertValid()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_broken">test_dtd_broken()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parse_fileobject_unicode">test_parse_fileobject_unicode()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_file_object_encoding">test_parse_file_object_encoding()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html#test_xpath_compile_doc">test_xpath_compile_doc()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html">ETreeXPathClassTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_attrs">test_dtd_attrs()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_file">test_dtd_file()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parse_parser_type_error">test_parse_parser_type_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parse_fileobject_unicode">test_parse_fileobject_unicode()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html#test_xpath_compile_element">test_xpath_compile_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html">ETreeXPathClassTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_broken">test_dtd_broken()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_internal">test_dtd_internal()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parse_remove_comments">test_parse_remove_comments()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parse_parser_type_error">test_parse_parser_type_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html#test_xpath_compile_error">test_xpath_compile_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html">ETreeXPathClassTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_file">test_dtd_file()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_internal_invalid">test_dtd_internal_invalid()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parse_remove_pis">test_parse_remove_pis()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parse_remove_comments">test_parse_remove_comments()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeETXPathClassTestCase-class.html#test_xpath_compile_ns">test_xpath_compile_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeETXPathClassTestCase-class.html">ETreeETXPathClassTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_internal">test_dtd_internal()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_invalid">test_dtd_invalid()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_stringio">test_parse_stringio()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parse_remove_pis">test_parse_remove_pis()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html#test_xpath_compile_vars">test_xpath_compile_vars()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html">ETreeXPathClassTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_internal_invalid">test_dtd_internal_invalid()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_dtd_io">test_dtd_io()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_stringio">test_parse_stringio()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_context_node">test_xpath_context_node()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_parse_file_not_found">test_dtd_parse_file_not_found()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parse_stringio_base_url">test_parse_stringio_base_url()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_context_node">test_xpath_context_node()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_document_root">test_xpath_document_root()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_invalid">test_dtd_invalid()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_parse_invalid">test_dtd_parse_invalid()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_parse_stringio_base_url">test_parse_stringio_base_url()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_document_root">test_xpath_document_root()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html#test_xpath_elementtree_error">test_xpath_elementtree_error()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html">ETreeXPathClassTestCase</a>)</span></td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_parse_valid">test_dtd_parse_valid()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_parse_utf8_bom">test_parse_utf8_bom()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_error">test_xpath_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_dtd_io">test_dtd_io()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_parse_valid_file_url">test_dtd_parse_valid_file_url()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parse_with_encoding">test_parse_with_encoding()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html#test_xpath_elementtree_error">test_xpath_elementtree_error()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html">ETreeXPathClassTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_eval_context_clear">test_xpath_eval_context_clear()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_parse_file_not_found">test_dtd_parse_file_not_found()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_parse_valid_relative">test_dtd_parse_valid_relative()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parseid">test_parseid()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_error">test_xpath_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_eval_context_propagation">test_xpath_eval_context_propagation()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_parse_invalid">test_dtd_parse_invalid()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_parse_valid_relative_file_url">test_dtd_parse_valid_relative_file_url()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_parser_based_lookup">test_parser_based_lookup()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_eval_context_clear">test_xpath_eval_context_clear()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_evaluator">test_xpath_evaluator()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_parse_valid">test_dtd_parse_valid()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_stringio">test_dtd_stringio()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parser_encoding">test_parser_encoding()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_eval_context_propagation">test_xpath_eval_context_propagation()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_evaluator_element">test_xpath_evaluator_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_parse_valid_file_url">test_dtd_parse_valid_file_url()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_dump_none">test_dump_none()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parser_encoding_unknown">test_parser_encoding_unknown()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_evaluator">test_xpath_evaluator()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_evaluator_tree">test_xpath_evaluator_tree()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_parse_valid_relative">test_dtd_parse_valid_relative()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_attrib">test_efactory_attrib()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_http_io.HttpIOTestCase-class.html#test_parser_input_mix">test_parser_input_mix()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_http_io.HttpIOTestCase-class.html">HttpIOTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_evaluator_element">test_xpath_evaluator_element()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_evaluator_tree_absolute">test_xpath_evaluator_tree_absolute()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_parse_valid_relative_file_url">test_dtd_parse_valid_relative_file_url()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_bool">test_efactory_bool()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parser_target_attrib">test_parser_target_attrib()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_evaluator_tree">test_xpath_evaluator_tree()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathExsltTestCase-class.html#test_xpath_exslt_functions_date">test_xpath_exslt_functions_date()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathExsltTestCase-class.html">ETreeXPathExsltTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html#test_dtd_stringio">test_dtd_stringio()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">ETreeDtdTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_float">test_efactory_float()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parser_target_cdata">test_parser_target_cdata()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_evaluator_tree_absolute">test_xpath_evaluator_tree_absolute()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathExsltTestCase-class.html#test_xpath_exslt_functions_strings">test_xpath_exslt_functions_strings()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathExsltTestCase-class.html">ETreeXPathExsltTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_dump_none">test_dump_none()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_int">test_efactory_int()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parser_target_comment">test_parser_target_comment()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathExsltTestCase-class.html#test_xpath_exslt_functions_date">test_xpath_exslt_functions_date()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathExsltTestCase-class.html">ETreeXPathExsltTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions">test_xpath_extensions()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_attrib">test_efactory_attrib()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_nested">test_efactory_nested()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parser_target_data">test_parser_target_data()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathExsltTestCase-class.html#test_xpath_exslt_functions_strings">test_xpath_exslt_functions_strings()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathExsltTestCase-class.html">ETreeXPathExsltTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions_error">test_xpath_extensions_error()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_bool">test_efactory_bool()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_none">test_efactory_none()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parser_target_entity">test_parser_target_entity()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions">test_xpath_extensions()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions_mix">test_xpath_extensions_mix()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_float">test_efactory_float()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_str">test_efactory_str()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parser_target_entity_unknown">test_parser_target_entity_unknown()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions_error">test_xpath_extensions_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions_nodes">test_xpath_extensions_nodes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_int">test_efactory_int()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_subtype">test_efactory_subtype()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parser_target_error_in_close">test_parser_target_error_in_close()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions_mix">test_xpath_extensions_mix()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions_nodes_append">test_xpath_extensions_nodes_append()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_nested">test_efactory_nested()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_unicode">test_efactory_unicode()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parser_target_error_in_end">test_parser_target_error_in_end()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions_nodes">test_xpath_extensions_nodes()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions_nodes_append2">test_xpath_extensions_nodes_append2()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_none">test_efactory_none()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_value_concatenation">test_efactory_value_concatenation()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parser_target_error_in_start">test_parser_target_error_in_start()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions_nodes_append">test_xpath_extensions_nodes_append()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions_wrong_args">test_xpath_extensions_wrong_args()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_str">test_efactory_str()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element">test_element()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parser_target_error_in_start_and_close">test_parser_target_error_in_start_and_close()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions_nodes_append2">test_xpath_extensions_nodes_append2()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_attribute">test_xpath_list_attribute()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_subtype">test_efactory_subtype()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element">test_element()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parser_target_feed_exception">test_parser_target_feed_exception()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_extensions_wrong_args">test_xpath_extensions_wrong_args()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_attribute_parent">test_xpath_list_attribute_parent()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_unicode">test_efactory_unicode()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ProxyTestCase-class.html#test_element_base">test_element_base()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ProxyTestCase-class.html">ProxyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parser_target_fromstring_exception">test_parser_target_fromstring_exception()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_attribute">test_xpath_list_attribute()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_attribute_parent_no_smart_strings">test_xpath_list_attribute_parent_no_smart_strings()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_efactory_value_concatenation">test_efactory_value_concatenation()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ProxyTestCase-class.html#test_element_base_children">test_element_base_children()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ProxyTestCase-class.html">ProxyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parser_target_pi">test_parser_target_pi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_attribute_parent">test_xpath_list_attribute_parent()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_comment">test_xpath_list_comment()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element">test_element()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_contains">test_element_contains()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parser_target_property">test_parser_target_property()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_attribute_parent_no_smart_strings">test_xpath_list_attribute_parent_no_smart_strings()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_elements">test_xpath_list_elements()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element">test_element()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html#test_element_creation">test_element_creation()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html">ETreeNamespaceClassesTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_parser_target_recover">test_parser_target_recover()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_comment">test_xpath_list_comment()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_nothing">test_xpath_list_nothing()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ProxyTestCase-class.html#test_element_base">test_element_base()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ProxyTestCase-class.html">ProxyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_errors.ErrorTestCase-class.html#test_element_cyclic_gc_none">test_element_cyclic_gc_none()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_errors.ErrorTestCase-class.html">ErrorTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parser_target_tag">test_parser_target_tag()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_elements">test_xpath_list_elements()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_text">test_xpath_list_text()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ProxyTestCase-class.html#test_element_base_children">test_element_base_children()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ProxyTestCase-class.html">ProxyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_indexing_negative">test_element_indexing_negative()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_parser_version">test_parser_version()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_nothing">test_xpath_list_nothing()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_text_parent">test_xpath_list_text_parent()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_contains">test_element_contains()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_indexing_only_text">test_element_indexing_only_text()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_pi">test_pi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_text">test_xpath_list_text()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_text_parent_no_smart_strings">test_xpath_list_text_parent_no_smart_strings()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html#test_element_creation">test_element_creation()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html">ETreeNamespaceClassesTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_indexing_with_text">test_element_indexing_with_text()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_pi">test_pi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_text_parent">test_xpath_list_text_parent()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_unicode_text_parent">test_xpath_list_unicode_text_parent()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_errors.ErrorTestCase-class.html#test_element_cyclic_gc_none">test_element_cyclic_gc_none()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_errors.ErrorTestCase-class.html">ErrorTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_indexing_with_text2">test_element_indexing_with_text2()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_pi">test_pi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_text_parent_no_smart_strings">test_xpath_list_text_parent_no_smart_strings()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_namespace">test_xpath_namespace()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_indexing_negative">test_element_indexing_negative()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_name_colon">test_element_name_colon()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ProxyTestCase-class.html#test_pi_base">test_pi_base()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ProxyTestCase-class.html">ProxyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_list_unicode_text_parent">test_xpath_list_unicode_text_parent()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_namespace_empty">test_xpath_namespace_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_indexing_only_text">test_element_indexing_only_text()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_name_empty">test_element_name_empty()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_pi_nonsense">test_pi_nonsense()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_namespace">test_xpath_namespace()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_ns">test_xpath_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_indexing_with_text">test_element_indexing_with_text()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_name_quote">test_element_name_quote()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_pi_parse">test_pi_parse()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_namespace_empty">test_xpath_namespace_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_ns_empty">test_xpath_ns_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_indexing_with_text2">test_element_indexing_with_text2()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_name_space">test_element_name_space()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_pi_pseudo_attributes_attrib">test_pi_pseudo_attributes_attrib()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_ns">test_xpath_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_ns_none">test_xpath_ns_none()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_name_colon">test_element_name_colon()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_names">test_element_names()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_pi_pseudo_attributes_get">test_pi_pseudo_attributes_get()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_ns_empty">test_xpath_ns_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_number">test_xpath_number()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_name_empty">test_element_name_empty()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element_nested">test_element_nested()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pickle">test_pickle()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_ns_none">test_xpath_ns_none()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_prefix_error">test_xpath_prefix_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_name_quote">test_element_name_quote()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element_nested_with_text">test_element_nested_with_text()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pickle_boolelement">test_pickle_boolelement()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_number">test_xpath_number()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_string">test_xpath_string()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_name_space">test_element_name_space()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_nsmap">test_element_nsmap()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pickle_elementtree">test_pickle_elementtree()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_prefix_error">test_xpath_prefix_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_text_from_other_document">test_xpath_text_from_other_document()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_names">test_element_names()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_element_nsmap_custom">test_element_nsmap_custom()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pickle_floattelement">test_pickle_floattelement()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_string">test_xpath_string()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_variables">test_xpath_variables()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element_nested">test_element_nested()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_element_nsmap_custom_prefixes">test_element_nsmap_custom_prefixes()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pickle_intelement">test_pickle_intelement()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_text_from_other_document">test_xpath_text_from_other_document()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_variables_nodeset">test_xpath_variables_nodeset()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element_nested_with_text">test_element_nested_with_text()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_element_nsmap_default">test_element_nsmap_default()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pickle_noneelement">test_pickle_noneelement()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_variables">test_xpath_variables()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator-module.html">test_xpathevaluator</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_nsmap">test_element_nsmap()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_element_nsmap_empty">test_element_nsmap_empty()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pickle_strelement">test_pickle_strelement()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_xpath_variables_nodeset">test_xpath_variables_nodeset()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_xsiannotate_ignore_old">test_xsiannotate_ignore_old()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_element_nsmap_custom">test_element_nsmap_custom()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_refcycle">test_element_refcycle()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_prefix">test_prefix()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator-module.html">test_xpathevaluator</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_xsiannotate_use_old">test_xsiannotate_use_old()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_element_nsmap_custom_prefixes">test_element_nsmap_custom_prefixes()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_element_sax">test_element_sax()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_prefix_default_ns">test_prefix_default_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_xsiannotate_ignore_old">test_xsiannotate_ignore_old()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_xsinil_deannotate">test_xsinil_deannotate()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_element_nsmap_default">test_element_nsmap_default()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_element_sax_ns">test_element_sax_ns()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_processinginstruction">test_processinginstruction()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_xsiannotate_use_old">test_xsiannotate_use_old()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_xsitype_deannotate">test_xsitype_deannotate()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_element_nsmap_empty">test_element_nsmap_empty()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_with_attributes">test_element_with_attributes()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ProxyTestCase-class.html#test_proxy_hashing">test_proxy_hashing()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ProxyTestCase-class.html">ProxyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_xsinil_deannotate">test_xsinil_deannotate()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt-module.html">test_xslt</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_element_refcycle">test_element_refcycle()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_with_attributes_keywords">test_element_with_attributes_keywords()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ProxyTestCase-class.html#test_proxy_reuse">test_proxy_reuse()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ProxyTestCase-class.html">ProxyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_xsitype_deannotate">test_xsitype_deannotate()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt">test_xslt()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_element_sax">test_element_sax()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_with_attributes_ns">test_element_with_attributes_ns()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ProxyTestCase-class.html#test_proxy_reuse_after_del_root">test_proxy_reuse_after_del_root()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ProxyTestCase-class.html">ProxyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt-module.html">test_xslt</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_access_control_repr">test_xslt_access_control_repr()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_element_sax_ns">test_element_sax_ns()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element_write_text">test_element_write_text()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ProxyTestCase-class.html#test_proxy_reuse_after_gc">test_proxy_reuse_after_gc()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ProxyTestCase-class.html">ProxyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt">test_xslt()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_broken">test_xslt_broken()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_with_attributes">test_element_with_attributes()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree-module.html">test_elementtree</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.XMLPullParserTest-class.html#test_pull_from_simple_target">test_pull_from_simple_target()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.XMLPullParserTest-class.html">XMLPullParserTest</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_access_control_repr">test_xslt_access_control_repr()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_copy">test_xslt_copy()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_with_attributes_keywords">test_element_with_attributes_keywords()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ElementTree">test_ElementTree()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.XMLPullParserTest-class.html#test_pull_from_simple_target_start_end">test_pull_from_simple_target_start_end()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.XMLPullParserTest-class.html">XMLPullParserTest</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_broken">test_xslt_broken()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_default_parameters">test_xslt_default_parameters()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_element_with_attributes_ns">test_element_with_attributes_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_elementtree">test_elementtree()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.XMLPullParserTest-class.html#test_pull_from_tree_builder">test_pull_from_tree_builder()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.XMLPullParserTest-class.html">XMLPullParserTest</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_copy">test_xslt_copy()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_elementtree">test_xslt_document_elementtree()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element_write_text">test_element_write_text()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_elementtree_find_qname">test_elementtree_find_qname()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.XMLPullParserTest-class.html#test_pull_from_tree_builder_subclass">test_pull_from_tree_builder_subclass()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.XMLPullParserTest-class.html">XMLPullParserTest</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_default_parameters">test_xslt_default_parameters()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_error">test_xslt_document_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree-module.html">test_elementtree</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_elementtree_findall_ns_qname">test_elementtree_findall_ns_qname()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pyannotate_empty">test_pyannotate_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_elementtree">test_xslt_document_elementtree()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_parse">test_xslt_document_parse()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_ElementTree">test_ElementTree()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_elementtree_findall_qname">test_elementtree_findall_qname()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pyannotate_ignore_old">test_pyannotate_ignore_old()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_error">test_xslt_document_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_parse_allow">test_xslt_document_parse_allow()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_elementtree">test_elementtree()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_elementtree_getiterator">test_elementtree_getiterator()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pyannotate_use_old">test_pyannotate_use_old()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_parse">test_xslt_document_parse()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_parse_deny">test_xslt_document_parse_deny()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_elementtree_find_qname">test_elementtree_find_qname()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_elementtree_getiterator_filter">test_elementtree_getiterator_filter()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup-module.html">test_pyclasslookup</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_parse_allow">test_xslt_document_parse_allow()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_parse_deny_all">test_xslt_document_parse_deny_all()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_elementtree_findall_ns_qname">test_elementtree_findall_ns_qname()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_elementtree_getpath">test_elementtree_getpath()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_pypy_proxy_collect">test_pypy_proxy_collect()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_parse_deny">test_xslt_document_parse_deny()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_XML">test_xslt_document_XML()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_elementtree_findall_qname">test_elementtree_findall_qname()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_elementtree_getpath_partial">test_elementtree_getpath_partial()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pytype_annotation">test_pytype_annotation()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_parse_deny_all">test_xslt_document_parse_deny_all()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_XML_resolver">test_xslt_document_XML_resolver()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_elementtree_getiterator">test_elementtree_getiterator()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_elementtree_parser_target">test_elementtree_parser_target()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pytype_annotation_empty">test_pytype_annotation_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_XML">test_xslt_document_XML()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_elementtree_error">test_xslt_elementtree_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_elementtree_getiterator_filter">test_elementtree_getiterator_filter()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_elementtree_parser_target_type_error">test_elementtree_parser_target_type_error()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pytype_annotation_use_old">test_pytype_annotation_use_old()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_document_XML_resolver">test_xslt_document_XML_resolver()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_empty">test_xslt_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_elementtree_getpath">test_elementtree_getpath()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_errors.ErrorTestCase-class.html#test_empty_parse">test_empty_parse()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_errors.ErrorTestCase-class.html">ErrorTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pytype_deannotate">test_pytype_deannotate()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_elementtree_error">test_xslt_elementtree_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_encoding">test_xslt_encoding()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_elementtree_getpath_partial">test_elementtree_getpath_partial()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding">test_encoding()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_pytype_xsitype_annotation">test_pytype_xsitype_annotation()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_empty">test_xslt_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_encoding_override">test_xslt_encoding_override()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_elementtree_parser_target">test_elementtree_parser_target()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_encoding">test_encoding()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_qname">test_qname()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_encoding">test_xslt_encoding()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_html_output">test_xslt_html_output()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_elementtree_parser_target_type_error">test_elementtree_parser_target_type_error()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_8bit_latin1">test_encoding_8bit_latin1()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_qname_attrib">test_qname_attrib()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_encoding_override">test_xslt_encoding_override()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_include">test_xslt_include()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_errors.ErrorTestCase-class.html#test_empty_parse">test_empty_parse()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_errors.ErrorTestCase-class.html">ErrorTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_8bit_parse_stringio">test_encoding_8bit_parse_stringio()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_qname_attrib_resolve">test_qname_attrib_resolve()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_html_output">test_xslt_html_output()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_include_from_filelike">test_xslt_include_from_filelike()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding">test_encoding()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_8bit_xml">test_encoding_8bit_xml()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_qname_attribute_getset">test_qname_attribute_getset()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_include">test_xslt_include()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_input">test_xslt_input()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_encoding">test_encoding()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_exact">test_encoding_exact()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_qname_attribute_resolve">test_qname_attribute_resolve()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_include_from_filelike">test_xslt_include_from_filelike()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_input_none">test_xslt_input_none()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_8bit_latin1">test_encoding_8bit_latin1()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_sub_tostring_default_encoding">test_encoding_sub_tostring_default_encoding()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_qname_attribute_resolve_new">test_qname_attribute_resolve_new()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_input">test_xslt_input()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_input_partial_doc">test_xslt_input_partial_doc()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_8bit_parse_stringio">test_encoding_8bit_parse_stringio()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_tostring">test_encoding_tostring()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_qname_cmp">test_qname_cmp()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_input_none">test_xslt_input_none()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_invalid_stylesheet">test_xslt_invalid_stylesheet()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_8bit_xml">test_encoding_8bit_xml()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_tostring_default_encoding">test_encoding_tostring_default_encoding()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_qname_colon">test_qname_colon()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_input_partial_doc">test_xslt_input_partial_doc()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_message">test_xslt_message()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_exact">test_encoding_exact()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_tostring_sub">test_encoding_tostring_sub()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_qname_element">test_qname_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_invalid_stylesheet">test_xslt_invalid_stylesheet()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_message_terminate">test_xslt_message_terminate()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_sub_tostring_default_encoding">test_encoding_sub_tostring_default_encoding()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_tostring_sub_tail">test_encoding_tostring_sub_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_qname_empty">test_qname_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_message">test_xslt_message()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_move_result">test_xslt_move_result()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_tostring">test_encoding_tostring()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_tostring_unknown">test_encoding_tostring_unknown()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_qname_namespace_localname">test_qname_namespace_localname()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_message_terminate">test_xslt_message_terminate()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_multiple_parameters">test_xslt_multiple_parameters()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_tostring_default_encoding">test_encoding_tostring_default_encoding()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_encoding_tostring_utf16">test_encoding_tostring_utf16()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_qname_space">test_qname_space()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_move_result">test_xslt_move_result()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_multiple_transforms">test_xslt_multiple_transforms()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_tostring_sub">test_encoding_tostring_sub()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_utf8_bom">test_encoding_utf8_bom()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_qname_text_resolve">test_qname_text_resolve()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_multiple_parameters">test_xslt_multiple_parameters()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_parameter_invalid">test_xslt_parameter_invalid()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_tostring_sub_tail">test_encoding_tostring_sub_tail()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_write_default_encoding">test_encoding_write_default_encoding()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_register_namespace">test_register_namespace()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_multiple_transforms">test_xslt_multiple_transforms()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_parameter_missing">test_xslt_parameter_missing()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_tostring_unknown">test_encoding_tostring_unknown()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_entity_append">test_entity_append()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_registered_type_stringify">test_registered_type_stringify()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_parameter_invalid">test_xslt_parameter_invalid()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_parameter_xpath">test_xslt_parameter_xpath()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_encoding_tostring_utf16">test_encoding_tostring_utf16()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_entity_error">test_entity_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_registered_types">test_registered_types()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_parameter_missing">test_xslt_parameter_missing()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_parameter_xpath_object">test_xslt_parameter_xpath_object()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_utf8_bom">test_encoding_utf8_bom()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_entity_parse">test_entity_parse()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html#test_registry">test_registry()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html">ETreeNamespaceClassesTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_parameter_xpath">test_xslt_parameter_xpath()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_parameters">test_xslt_parameters()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_encoding_write_default_encoding">test_encoding_write_default_encoding()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_entity_restructure">test_entity_restructure()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_rel_xpath_boolean">test_rel_xpath_boolean()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_parameter_xpath_object">test_xslt_parameter_xpath_object()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_pi">test_xslt_pi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_entity_append">test_entity_append()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_entity_values">test_entity_values()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html#test_rel_xpath_list_elements">test_rel_xpath_list_elements()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">ETreeXPathTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_parameters">test_xslt_parameters()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_pi_embedded_id">test_xslt_pi_embedded_id()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_entity_error">test_entity_error()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_errors-module.html">test_errors</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_relaxng-module.html">test_relaxng</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_pi">test_xslt_pi()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_entity_parse">test_entity_parse()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng">test_relaxng()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">ETreeRelaxNGTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_pi_embedded_id">test_xslt_pi_embedded_id()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
-</tr>
-<tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_entity_restructure">test_entity_restructure()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_elementtree_error">test_relaxng_elementtree_error()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">ETreeRelaxNGTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_pi_embedded_xmlid">test_xslt_pi_embedded_xmlid()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_entity_values">test_entity_values()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_error">test_relaxng_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_escaping">test_escaping()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng">test_relaxng()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">ETreeRelaxNGTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_pi_get">test_xslt_pi_get()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_errors-module.html">test_errors</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree-module.html">test_etree</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_include">test_relaxng_include()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_elementtree_error">test_relaxng_elementtree_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">ETreeRelaxNGTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_pi_get_all">test_xslt_pi_get_all()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_escaping">test_escaping()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_invalid_schema">test_relaxng_invalid_schema()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_etree_parse_io_error">test_etree_parse_io_error()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_error">test_relaxng_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">ETreeRelaxNGTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_pi_get_all_reversed">test_xslt_pi_get_all_reversed()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree-module.html">test_etree</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_invalid_schema2">test_relaxng_invalid_schema2()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_attributes">test_etree_sax_attributes()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_include">test_relaxng_include()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">ETreeRelaxNGTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_pi_get_unknown">test_xslt_pi_get_unknown()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_etree_parse_io_error">test_etree_parse_io_error()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">_IOTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_invalid_schema3">test_relaxng_invalid_schema3()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_comment">test_etree_sax_comment()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_invalid_schema">test_relaxng_invalid_schema()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">ETreeRelaxNGTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_pi_set_new">test_xslt_pi_set_new()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_attributes">test_etree_sax_attributes()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_comment_root">test_etree_sax_comment_root()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_invalid_schema4">test_relaxng_invalid_schema4()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_invalid_schema2">test_relaxng_invalid_schema2()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">ETreeRelaxNGTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_pi_set_replace">test_xslt_pi_set_replace()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_comment">test_etree_sax_comment()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_double">test_etree_sax_double()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_shortcut">test_relaxng_shortcut()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_invalid_schema3">test_relaxng_invalid_schema3()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">ETreeRelaxNGTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_repeat_transform">test_xslt_repeat_transform()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_comment_root">test_etree_sax_comment_root()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_error">test_etree_sax_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_stringio">test_relaxng_stringio()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_invalid_schema4">test_relaxng_invalid_schema4()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">ETreeRelaxNGTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_resolver_url_building">test_xslt_resolver_url_building()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_double">test_etree_sax_double()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_error2">test_etree_sax_error2()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_remove">test_remove()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_shortcut">test_relaxng_shortcut()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">ETreeRelaxNGTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.Py3XSLTTestCase-class.html#test_xslt_result_bytearray">test_xslt_result_bytearray()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.Py3XSLTTestCase-class.html">Py3XSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_error">test_etree_sax_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_handler_default_ns">test_etree_sax_handler_default_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_remove_nonexisting">test_remove_nonexisting()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html#test_relaxng_stringio">test_relaxng_stringio()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">ETreeRelaxNGTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.Py3XSLTTestCase-class.html#test_xslt_result_bytes">test_xslt_result_bytes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.Py3XSLTTestCase-class.html">Py3XSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_error2">test_etree_sax_error2()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_handler_default_ns_None">test_etree_sax_handler_default_ns_None()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_remove_ns">test_remove_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_remove">test_remove()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.Py3XSLTTestCase-class.html#test_xslt_result_memoryview">test_xslt_result_memoryview()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.Py3XSLTTestCase-class.html">Py3XSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_handler_default_ns">test_etree_sax_handler_default_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_no_ns">test_etree_sax_no_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_remove_tail">test_remove_tail()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_remove_nonexisting">test_remove_nonexisting()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_shortcut">test_xslt_shortcut()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_handler_default_ns_None">test_etree_sax_handler_default_ns_None()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_no_ns_attributes">test_etree_sax_no_ns_attributes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_replace">test_replace()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_remove_ns">test_remove_ns()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_string_parameters">test_xslt_string_parameters()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_no_ns">test_etree_sax_no_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_ns1">test_etree_sax_ns1()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_replace_new">test_replace_new()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_remove_tail">test_remove_tail()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_unicode">test_xslt_unicode()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_no_ns_attributes">test_etree_sax_no_ns_attributes()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_ns2">test_etree_sax_ns2()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_replace_slice_tail">test_replace_slice_tail()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_replace">test_replace()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_unicode_standalone">test_xslt_unicode_standalone()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_ns1">test_etree_sax_ns1()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_ns_attributes">test_etree_sax_ns_attributes()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_bytes_dtd">test_resolve_bytes_dtd()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_replace_new">test_replace_new()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html#test_xslt_utf8">test_xslt_utf8()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">ETreeXSLTTestCase</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_ns2">test_etree_sax_ns2()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_pi">test_etree_sax_pi()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_empty">test_resolve_empty()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_replace_slice_tail">test_replace_slice_tail()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests-module.html">tests</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml-module.html">lxml</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_ns_attributes">test_etree_sax_ns_attributes()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_pi_root">test_etree_sax_pi_root()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_error">test_resolve_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_bytes_dtd">test_resolve_bytes_dtd()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree.QName-class.html#text">text</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree.QName-class.html">QName</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_pi">test_etree_sax_pi()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_redefine_ns">test_etree_sax_redefine_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_file_dtd">test_resolve_file_dtd()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_empty">test_resolve_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree._Element-class.html#text">text</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree._Element-class.html" onclick="show_private();">_Element</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_pi_root">test_etree_sax_pi_root()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_simple">test_etree_sax_simple()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_filelike_dtd">test_resolve_filelike_dtd()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_error">test_resolve_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree._Entity-class.html#text">text</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree._Entity-class.html" onclick="show_private();">_Entity</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_redefine_ns">test_etree_sax_redefine_ns()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_filename_dtd">test_resolve_filename_dtd()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html#test_events">test_events()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html" onclick="show_private();">_XMLPullParserTest</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_file_dtd">test_resolve_file_dtd()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.objectify.ObjectifiedElement-class.html#text">text</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.objectify.ObjectifiedElement-class.html">ObjectifiedElement</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_etree_sax_simple">test_etree_sax_simple()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_filename_dtd_relative">test_resolve_filename_dtd_relative()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html#test_events_sequence">test_events_sequence()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html" onclick="show_private();">_XMLPullParserTest</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_filelike_dtd">test_resolve_filelike_dtd()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="xml.etree.ElementTree.Element-class.html#text">text</a><br />
 <span class="index-where">(in&nbsp;<a href="xml.etree.ElementTree.Element-class.html">Element</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html#test_events">test_events()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html" onclick="show_private();">_XMLPullParserTest</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_string_dtd">test_resolve_string_dtd()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_evil_class_lookup">test_evil_class_lookup()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_filename_dtd">test_resolve_filename_dtd()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.doctestcompare.LXMLOutputChecker-class.html#text_compare">text_compare()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.doctestcompare.LXMLOutputChecker-class.html">LXMLOutputChecker</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html#test_events_sequence">test_events_sequence()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html" onclick="show_private();">_XMLPullParserTest</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_root">test_root()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_math">test_exslt_math()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html">ETreeEXSLTTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_filename_dtd_relative">test_resolve_filename_dtd_relative()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.HtmlMixin-class.html#text_content">text_content()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.HtmlMixin-class.html">HtmlMixin</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html#test_evil_class_lookup">test_evil_class_lookup()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">ClassLookupTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax-module.html">test_sax</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_regexp_match">test_exslt_regexp_match()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html">ETreeEXSLTTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_resolve_string_dtd">test_resolve_string_dtd()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.builder-module.html#TEXTAREA">TEXTAREA</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.builder-module.html">lxml.html.builder</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_math">test_exslt_math()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_regexp_match1">test_exslt_regexp_match1()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html">ETreeEXSLTTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_sax_to_pulldom">test_sax_to_pulldom()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_root">test_root()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.TextareaElement-class.html">TextareaElement</a></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_regexp_match">test_exslt_regexp_match()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_regexp_match2">test_exslt_regexp_match2()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html">ETreeEXSLTTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_schema_types">test_schema_types()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax-module.html">test_sax</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.builder-module.html#TFOOT">TFOOT</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.builder-module.html">lxml.html.builder</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_regexp_match1">test_exslt_regexp_match1()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_regexp_match_groups">test_exslt_regexp_match_groups()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html">ETreeEXSLTTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_schema_types_prefixed">test_schema_types_prefixed()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html#test_sax_to_pulldom">test_sax_to_pulldom()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">ETreeSaxTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.builder-module.html#TH">TH</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.builder-module.html">lxml.html.builder</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_regexp_match2">test_exslt_regexp_match2()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_regexp_replace">test_exslt_regexp_replace()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html">ETreeEXSLTTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_schematron-module.html">test_schematron</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_schema_types">test_schema_types()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.builder-module.html#THEAD">THEAD</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.builder-module.html">lxml.html.builder</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_regexp_match_groups">test_exslt_regexp_match_groups()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_regexp_test">test_exslt_regexp_test()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html">ETreeEXSLTTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron">test_schematron()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_schema_types_prefixed">test_schema_types_prefixed()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_builder-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_builder-module.html">lxml.tests.test_builder</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_regexp_replace">test_exslt_regexp_replace()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_str">test_exslt_str()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html">ETreeEXSLTTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html#test_schematron">test_schematron()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html">ETreeSchematronTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_schematron-module.html">test_schematron</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_classlookup-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_classlookup-module.html">lxml.tests.test_classlookup</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_regexp_test">test_exslt_regexp_test()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_str_attribute_replace">test_exslt_str_attribute_replace()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html">ETreeEXSLTTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_abstract">test_schematron_abstract()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron">test_schematron()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_dtd-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_dtd-module.html">lxml.tests.test_dtd</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_str">test_exslt_str()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html">ETreeEXSLTTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_assertValid">test_schematron_assertValid()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_extend">test_extend()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html#test_schematron">test_schematron()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html">ETreeSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_elementtree-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree-module.html">lxml.tests.test_elementtree</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html#test_exslt_str_attribute_replace">test_exslt_str_attribute_replace()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html">ETreeEXSLTTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_call">test_schematron_call()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element">test_extension_element()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_abstract">test_schematron_abstract()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_errors-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_errors-module.html">lxml.tests.test_errors</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_extend">test_extend()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_customization">test_schematron_customization()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_apply_templates">test_extension_element_apply_templates()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_assertValid">test_schematron_assertValid()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_etree-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree-module.html">lxml.tests.test_etree</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element">test_extension_element()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_apply_templates_elements_only">test_extension_element_apply_templates_elements_only()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_elementtree_error">test_schematron_elementtree_error()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_call">test_schematron_call()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_htmlparser-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser-module.html">lxml.tests.test_htmlparser</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_apply_templates">test_extension_element_apply_templates()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_apply_templates_remove_blank_text">test_extension_element_apply_templates_remove_blank_text()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html#test_schematron_elementtree_error">test_schematron_elementtree_error()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html">ETreeSchematronTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_customization">test_schematron_customization()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_http_io-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_http_io-module.html">lxml.tests.test_http_io</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_apply_templates_elements_only">test_extension_element_apply_templates_elements_only()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_apply_templates_target_node">test_extension_element_apply_templates_target_node()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_empty_pattern">test_schematron_empty_pattern()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_elementtree_error">test_schematron_elementtree_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile-module.html">lxml.tests.test_incremental_xmlfile</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_apply_templates_remove_blank_text">test_extension_element_apply_templates_remove_blank_text()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_apply_templates_target_node_doc">test_extension_element_apply_templates_target_node_doc()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_error_log">test_schematron_error_log()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html#test_schematron_elementtree_error">test_schematron_elementtree_error()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html">ETreeSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_io-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_io-module.html">lxml.tests.test_io</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_apply_templates_target_node">test_extension_element_apply_templates_target_node()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_comment_pi_context">test_extension_element_comment_pi_context()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_from_element">test_schematron_from_element()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_empty_pattern">test_schematron_empty_pattern()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron-module.html">lxml.tests.test_isoschematron</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_apply_templates_target_node_doc">test_extension_element_apply_templates_target_node_doc()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_content">test_extension_element_content()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_from_file">test_schematron_from_file()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_error_log">test_schematron_error_log()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_nsclasses-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_nsclasses-module.html">lxml.tests.test_nsclasses</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_comment_pi_context">test_extension_element_comment_pi_context()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_doc_context">test_extension_element_doc_context()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_from_tree">test_schematron_from_tree()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_from_element">test_schematron_from_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify-module.html">lxml.tests.test_objectify</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_content">test_extension_element_content()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_process_children">test_extension_element_process_children()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_invalid_args">test_schematron_invalid_args()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_from_file">test_schematron_from_file()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_pyclasslookup-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_pyclasslookup-module.html">lxml.tests.test_pyclasslookup</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_doc_context">test_extension_element_doc_context()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_process_children_to_append_only">test_extension_element_process_children_to_append_only()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html#test_schematron_invalid_schema">test_schematron_invalid_schema()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html">ETreeSchematronTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_from_tree">test_schematron_from_tree()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_relaxng-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_relaxng-module.html">lxml.tests.test_relaxng</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_process_children">test_extension_element_process_children()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_process_children_to_read_only_raise">test_extension_element_process_children_to_read_only_raise()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_invalid_schema_empty">test_schematron_invalid_schema_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_invalid_args">test_schematron_invalid_args()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_sax-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_sax-module.html">lxml.tests.test_sax</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_process_children_to_append_only">test_extension_element_process_children_to_append_only()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_process_children_with_subextension_element">test_extension_element_process_children_with_subextension_element()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html#test_schematron_invalid_schema_empty">test_schematron_invalid_schema_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html#test_schematron_invalid_schema">test_schematron_invalid_schema()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html">ETreeSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_schematron-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_schematron-module.html">lxml.tests.test_schematron</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_process_children_to_read_only_raise">test_extension_element_process_children_to_read_only_raise()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_raise">test_extension_element_raise()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_invalid_schema_namespace">test_schematron_invalid_schema_namespace()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_invalid_schema_empty">test_schematron_invalid_schema_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading-module.html">lxml.tests.test_threading</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_process_children_with_subextension_element">test_extension_element_process_children_with_subextension_element()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html#test_schematron_invalid_schema_namespace">test_schematron_invalid_schema_namespace()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtFuncTestCase-class.html#test_extensions1">test_extensions1()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtFuncTestCase-class.html">ETreeXSLTExtFuncTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html#test_schematron_invalid_schema_empty">test_schematron_invalid_schema_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html">ETreeSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_unicode-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_unicode-module.html">lxml.tests.test_unicode</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html#test_extension_element_raise">test_extension_element_raise()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">ETreeXSLTExtElementTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_phases">test_schematron_phases()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtFuncTestCase-class.html#test_extensions2">test_extensions2()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtFuncTestCase-class.html">ETreeXSLTExtFuncTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_invalid_schema_namespace">test_schematron_invalid_schema_namespace()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xmlschema-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xmlschema-module.html">lxml.tests.test_xmlschema</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtFuncTestCase-class.html#test_extensions1">test_extensions1()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtFuncTestCase-class.html">ETreeXSLTExtFuncTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_phases_kwarg">test_schematron_phases_kwarg()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_failure_preceding_text">test_failure_preceding_text()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html#test_schematron_invalid_schema_namespace">test_schematron_invalid_schema_namespace()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html">ETreeSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xpathevaluator-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xpathevaluator-module.html">lxml.tests.test_xpathevaluator</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_xslt.ETreeXSLTExtFuncTestCase-class.html#test_extensions2">test_extensions2()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt.ETreeXSLTExtFuncTestCase-class.html">ETreeXSLTExtFuncTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_relaxng_embedded">test_schematron_relaxng_embedded()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_failure_trailing_Element">test_failure_trailing_Element()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_phases">test_schematron_phases()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_xslt-module.html#this_dir">this_dir</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_xslt-module.html">lxml.tests.test_xslt</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_failure_preceding_text">test_failure_preceding_text()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_failure_trailing_text">test_failure_trailing_text()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_result_report">test_schematron_result_report()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_phases_kwarg">test_schematron_phases_kwarg()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadingTestCase-class.html">ThreadingTestCase</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading-module.html">lxml.tests.test_threading</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_failure_trailing_Element">test_failure_trailing_Element()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_store_schematron">test_schematron_store_schematron()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_feed_parser_bytes">test_feed_parser_bytes()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_relaxng_embedded">test_schematron_relaxng_embedded()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_threading.ThreadPipelineTestCase-class.html">ThreadPipelineTestCase</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_threading-module.html">lxml.tests.test_threading</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_failure_trailing_text">test_failure_trailing_text()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">_XmlFileTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_store_xslt">test_schematron_store_xslt()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_feed_parser_error_broken">test_feed_parser_error_broken()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_result_report">test_schematron_result_report()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.diff.InsensitiveSequenceMatcher-class.html#threshold">threshold</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.diff.InsensitiveSequenceMatcher-class.html" onclick="show_private();">InsensitiveSequenceMatcher</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_feed_parser_bytes">test_feed_parser_bytes()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_feed_parser_error_close_empty">test_feed_parser_error_close_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_validate">test_schematron_validate()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_store_schematron">test_schematron_store_schematron()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.builder-module.html#TITLE">TITLE</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.builder-module.html">lxml.html.builder</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_feed_parser_error_broken">test_feed_parser_error_broken()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_feed_parser_error_close_incomplete">test_feed_parser_error_close_incomplete()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_xmlschema_embedded">test_schematron_xmlschema_embedded()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_store_xslt">test_schematron_store_xslt()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.diff.token-class.html">token</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.diff-module.html">lxml.html.diff</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_feed_parser_error_close_empty">test_feed_parser_error_close_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_feed_parser_error_position">test_feed_parser_error_position()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_set_string">test_set_string()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_validate">test_schematron_validate()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.diff-module.html#tokenize">tokenize()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.diff-module.html">lxml.html.diff</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_feed_parser_error_close_incomplete">test_feed_parser_error_close_incomplete()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_set_text">test_set_text()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_feed_parser_recover">test_feed_parser_recover()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html#test_schematron_xmlschema_embedded">test_schematron_xmlschema_embedded()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">ETreeISOSchematronTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.diff-module.html#tokenize_annotated">tokenize_annotated()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.diff-module.html">lxml.html.diff</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_feed_parser_error_position">test_feed_parser_error_position()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_set_text2">test_set_text2()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_feed_parser_unicode">test_feed_parser_unicode()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_set_string">test_set_string()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.defs-module.html#top_level_tags">top_level_tags</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.defs-module.html">lxml.html.defs</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_feed_parser_recover">test_feed_parser_recover()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_set_text_empty">test_set_text_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html#test_feed_while_iterating">test_feed_while_iterating()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html" onclick="show_private();">_XMLPullParserTest</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_set_text">test_set_text()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree.XSLT-class.html#tostring">tostring()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree.XSLT-class.html">XSLT</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_feed_parser_unicode">test_feed_parser_unicode()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_findall">test_findall()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_set_text_none">test_set_text_none()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_set_text2">test_set_text2()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree-module.html#tostring">tostring()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree-module.html">lxml.etree</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html#test_feed_while_iterating">test_feed_while_iterating()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._XMLPullParserTest-class.html" onclick="show_private();">_XMLPullParserTest</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setattr">test_setattr()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_findall">test_findall()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_set_text_empty">test_set_text_empty()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree-module.html#tostringlist">tostringlist()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree-module.html">lxml.etree</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_findall">test_findall()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_findall_different_nsmaps">test_findall_different_nsmaps()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_set_text_none">test_set_text_none()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setattr_nonunicode">test_setattr_nonunicode()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree-module.html#tounicode">tounicode()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree-module.html">lxml.etree</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_findall">test_findall()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setitem">test_setitem()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_findall_ns">test_findall_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setattr">test_setattr()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.builder-module.html#TR">TR</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.builder-module.html">lxml.html.builder</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_findall_different_nsmaps">test_findall_different_nsmaps()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_findall_ns">test_findall_ns()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setitem2">test_setitem2()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setattr_nonunicode">test_setattr_nonunicode()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree.ErrorDomains-class.html#TREE">TREE</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree.ErrorDomains-class.html">ErrorDomains</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_findall_ns">test_findall_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_findall_ns">test_findall_ns()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setitem">test_setitem()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_setitem_assert">test_setitem_assert()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree.ErrorTypes-class.html#TREE_INVALID_DEC">TREE_INVALID_DEC</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree.ErrorTypes-class.html">ErrorTypes</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_findall_ns">test_findall_ns()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_findall_syntax_error">test_findall_syntax_error()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setitem_indexerror">test_setitem_indexerror()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setitem2">test_setitem2()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree.ErrorTypes-class.html#TREE_INVALID_HEX">TREE_INVALID_HEX</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree.ErrorTypes-class.html">ErrorTypes</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_findall_ns">test_findall_ns()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setitem_replace">test_setitem_replace()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_fromstring">test_fromstring()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_setitem_assert">test_setitem_assert()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree.ErrorTypes-class.html#TREE_NOT_UTF8">TREE_NOT_UTF8</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree.ErrorTypes-class.html">ErrorTypes</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_findall_syntax_error">test_findall_syntax_error()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setitem_string">test_setitem_string()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_fromstringlist">test_fromstringlist()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setitem_indexerror">test_setitem_indexerror()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.tests.test_objectify-module.html#TREE_PYTYPE">TREE_PYTYPE</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify-module.html">lxml.tests.test_objectify</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_fromstring">test_fromstring()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_fromstringlist_characters">test_fromstringlist_characters()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setitem_replace">test_setitem_replace()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setitem_string_special">test_setitem_string_special()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree.ErrorTypes-class.html#TREE_UNTERMINATED_ENTITY">TREE_UNTERMINATED_ENTITY</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree.ErrorTypes-class.html">ErrorTypes</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_fromstringlist">test_fromstringlist()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setitem_tail">test_setitem_tail()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_fromstringlist_single">test_fromstringlist_single()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setitem_string">test_setitem_string()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree.TreeBuilder-class.html">TreeBuilder</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree-module.html">lxml.etree</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_fromstringlist_characters">test_fromstringlist_characters()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice">test_setslice()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator">test_getiterator()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html#test_setitem_string_special">test_setitem_string_special()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="xml.etree.ElementTree.TreeBuilder-class.html">TreeBuilder</a></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_fromstringlist_single">test_fromstringlist_single()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_empty">test_getiterator_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_all">test_setslice_all()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setitem_tail">test_setitem_tail()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.builder-module.html#TT">TT</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.builder-module.html">lxml.html.builder</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator">test_getiterator()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_filter">test_getiterator_filter()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_all_empty">test_setslice_all_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice">test_setslice()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree._LogEntry-class.html#type">type</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree._LogEntry-class.html" onclick="show_private();">_LogEntry</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_empty">test_getiterator_empty()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_filter_all">test_getiterator_filter_all()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_all">test_setslice_all()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_setslice_all_empty_reversed">test_setslice_all_empty_reversed()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.html.InputElement-class.html#type">type</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.html.InputElement-class.html">InputElement</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_filter">test_getiterator_filter()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_all_replace">test_setslice_all_replace()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_getiterator_filter_all_comment_pi">test_getiterator_filter_all_comment_pi()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_all_empty">test_setslice_all_empty()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.objectify.PyType-class.html#type_check">type_check</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.objectify.PyType-class.html">PyType</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_filter_all">test_getiterator_filter_all()</a><br />
-<span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
-<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_setslice_all_replace_reversed">test_setslice_all_replace_reversed()</a><br />
+<td width="33%" class="link-index"><a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html#test_getiterator_filter_comment">test_getiterator_filter_comment()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">_ETreeTestCaseBase</a>)</span></td>
+<td width="33%" class="link-index"><a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html#test_setslice_all_empty_reversed">test_setslice_all_empty_reversed()</a><br />
+<span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <td width="33%" class="link-index"><a href="lxml.etree._LogEntry-class.html#type_name">type_name</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.etree._LogEntry-class.html" onclick="show_private();">_LogEntry</a>)</span></td>
 </tr>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0c690e5..ad06429 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2e80369..d99ba39 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 25eff00..52840d7 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 366fe10..3d936c2 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f0d2c79..cd02729 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index eebbffc..773ca26 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:03 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f1a6afd..80661bf 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2daab4e..90208d3 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c8f3784..9cf2983 100644 (file)
@@ -235,7 +235,7 @@ with statically linked libraries.</td>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f8d90d9..022a4e6 100644 (file)
@@ -123,7 +123,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b58e8ab..fba36cb 100644 (file)
@@ -277,7 +277,7 @@ form of custom URL resolvers.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 571e717..db76c9c 100644 (file)
@@ -519,7 +519,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a74a4d7..c5578d3 100644 (file)
@@ -229,7 +229,7 @@ exceptions.BaseException --+           |
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ccfeb61..f706b70 100644 (file)
@@ -202,7 +202,7 @@ The <tt class="rst-rst-rst-docutils literal rst-rst-docutils literal rst-docutil
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c664031..889ac5d 100644 (file)
@@ -432,7 +432,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2601902..a55b5e1 100644 (file)
@@ -352,7 +352,7 @@ and/or a specific target <tt class="rst-docutils literal">namespace</tt> to the
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 973d753..a0856b3 100644 (file)
@@ -231,7 +231,7 @@ See the <a href="lxml.cssselect.CSSSelector-class.html" class="link">CSSSelector
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7dce83a..5a56f76 100644 (file)
@@ -298,7 +298,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e42f6ae..805f5ab 100644 (file)
@@ -308,7 +308,7 @@ mapping as <tt class="rst-docutils literal">namespaces</tt> keyword argument:</p
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 36a65b7..e9e715e 100644 (file)
@@ -310,7 +310,7 @@ lxml extensions + HTML support.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6e1bf6c..e3d8daa 100644 (file)
@@ -362,7 +362,7 @@ A custom CSS selector to XPath translator with lxml-specific extensions.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 65300b0..a05a7cf 100644 (file)
@@ -493,7 +493,7 @@ etree.HTMLParser(recover= False, remove_blank_text= True)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a903146..8f7f6f7 100644 (file)
@@ -1105,7 +1105,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0029482..b6cb5bb 100644 (file)
@@ -229,7 +229,7 @@ doctest.OutputChecker --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e12b656..a160430 100644 (file)
@@ -610,7 +610,7 @@ to compare <code class="link">want</code> and <code class="link">got</code>.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 188f1de..90e91bc 100644 (file)
@@ -349,7 +349,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7298897..1d70cf4 100644 (file)
@@ -1712,13 +1712,13 @@ standard Python logging package.</td>
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
         <a href="lxml.etree-module.html#__pyx_capi__" class="summary-name" onclick="show_private();">__pyx_capi__</a> = <code title="{'appendChild': &lt;capsule object &quot;void (struct LxmlElement *, struct Lx\
-mlElement *)&quot; at 0x2041f00&gt;,
+mlElement *)&quot; at 0x3016fc0&gt;,
  'appendChildToElement': &lt;capsule object &quot;int (struct LxmlElement *, s\
-truct LxmlElement *)&quot; at 0x2041f30&gt;,
+truct LxmlElement *)&quot; at 0x301b030&gt;,
  'attributeValue': &lt;capsule object &quot;PyObject *(xmlNode *, xmlAttr *)&quot; \
-at 0x2041bd0&gt;,
+at 0x3016c90&gt;,
  'attributeValueFromNsName': &lt;capsule object &quot;PyObject *(xmlNode *, co\
-nst xmlChar *, const xmlChar *)&quot; at 0x2041c00&gt;,
+nst xmlChar *, const xmlChar *)&quot; at 0x3016cc0&gt;,
 ..."><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">appendChild</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;capsule object &quot;void (struct L<code class="variable-ellipsis">...</code></code>
     </td>
   </tr>
@@ -1741,7 +1741,7 @@ nst xmlChar *, const xmlChar *)&quot; at 0x2041c00&gt;,
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a name="memory_debugger"></a><span class="summary-name">memory_debugger</span> = <code title="&lt;lxml.etree._MemDebug object at 0x2b3a54eb38c0&gt;">&lt;lxml.etree._MemDebug object at 0x2b3a54eb38c0&gt;</code>
+        <a name="memory_debugger"></a><span class="summary-name">memory_debugger</span> = <code title="&lt;lxml.etree._MemDebug object at 0x2b10fa6e38b0&gt;">&lt;lxml.etree._MemDebug object at 0x2b10fa6e38b0&gt;</code>
     </td>
   </tr>
 </table>
@@ -2395,13 +2395,13 @@ function will only set the global error log of the current thread.</p>
     <dt>Value:</dt>
       <dd><table><tr><td><pre class="variable">
 <code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">appendChild</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;capsule object &quot;void (struct LxmlElement *, struct Lx<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-mlElement *)&quot; at 0x2041f00&gt;<code class="variable-op">,</code>
+mlElement *)&quot; at 0x3016fc0&gt;<code class="variable-op">,</code>
  <code class="variable-quote">'</code><code class="variable-string">appendChildToElement</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;capsule object &quot;int (struct LxmlElement *, s<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-truct LxmlElement *)&quot; at 0x2041f30&gt;<code class="variable-op">,</code>
+truct LxmlElement *)&quot; at 0x301b030&gt;<code class="variable-op">,</code>
  <code class="variable-quote">'</code><code class="variable-string">attributeValue</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;capsule object &quot;PyObject *(xmlNode *, xmlAttr *)&quot; <span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-at 0x2041bd0&gt;<code class="variable-op">,</code>
+at 0x3016c90&gt;<code class="variable-op">,</code>
  <code class="variable-quote">'</code><code class="variable-string">attributeValueFromNsName</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;capsule object &quot;PyObject *(xmlNode *, co<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-nst xmlChar *, const xmlChar *)&quot; at 0x2041c00&gt;<code class="variable-op">,</code>
+nst xmlChar *, const xmlChar *)&quot; at 0x3016cc0&gt;<code class="variable-op">,</code>
 <code class="variable-ellipsis">...</code>
 </pre></td></tr></table>
 </dd>
@@ -2466,7 +2466,7 @@ nst xmlChar *, const xmlChar *)&quot; at 0x2041c00&gt;<code class="variable-op">
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f117ed1..2065f11 100644 (file)
@@ -233,7 +233,7 @@ Iterates over the ancestors of an element (from parent to parent).
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9121867..a7b55b6 100644 (file)
@@ -293,7 +293,7 @@ missing.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 855d0e6..102b00f 100644 (file)
@@ -211,7 +211,7 @@ Error during C14N serialisation.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a0ac8b9..a09428c 100644 (file)
@@ -236,7 +236,7 @@ a string
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e88b6be..59be04e 100644 (file)
@@ -348,7 +348,7 @@ called after object creation.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9195242..9585671 100644 (file)
@@ -272,7 +272,7 @@ lookup(self, type, doc, namespace, name)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 66061bb..cd48021 100644 (file)
@@ -411,7 +411,7 @@ catalog.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 317a552..9525d86 100644 (file)
@@ -217,7 +217,7 @@ Base class for DTD errors.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b7404cd..363084a 100644 (file)
@@ -213,7 +213,7 @@ Error while parsing a DTD.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7e7f8f6..b53c612 100644 (file)
@@ -213,7 +213,7 @@ Error while validating an XML document with a DTD.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e1f4acd..dd1265c 100644 (file)
@@ -310,7 +310,7 @@ normal truth test on this value will always tell if the
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 69c8840..aa4b97b 100644 (file)
@@ -213,7 +213,7 @@ method fails.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5a598a0..a8180a4 100644 (file)
@@ -325,7 +325,7 @@ and thus ignores comments and processing instructions.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 276153f..d8ba077 100644 (file)
@@ -293,7 +293,7 @@ you pass <tt class="rst-docutils literal">smart_strings=False</tt>.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d23c800..84bdcad 100644 (file)
@@ -361,7 +361,7 @@ hierarchies that implement a common namespace.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1428cf8..79f9667 100644 (file)
@@ -233,7 +233,7 @@ Iterates over the children of an element.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a5c4611..5b3e14d 100644 (file)
@@ -232,7 +232,7 @@ Superclass of Element class lookups.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 30dcab3..fa5f1d9 100644 (file)
@@ -306,7 +306,7 @@ accept the respective Element classes.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 23ade7b..9b1181d 100644 (file)
@@ -287,7 +287,7 @@ tree it traverses is modified during iteration.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a61e7cc..b8c2b4b 100644 (file)
@@ -319,7 +319,7 @@ Pass None for the empty namespace.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 900b10d..45cfc77 100644 (file)
@@ -279,7 +279,7 @@ tail text (e.g. if you know that it's only whitespace from pretty-printing).</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ec7fe94..a1f8936 100644 (file)
@@ -349,7 +349,7 @@ called after object creation.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b657e00..fcab862 100644 (file)
@@ -209,7 +209,7 @@ exceptions.BaseException --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b9862db..800a4b2 100644 (file)
@@ -485,7 +485,7 @@ Libxml2 error domains
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8c577a2..6b59885 100644 (file)
@@ -243,7 +243,7 @@ Libxml2 error levels
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 48aa428..a6e7cbb 100644 (file)
@@ -5406,7 +5406,7 @@ Libxml2 error types
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b02272c..7eb52b3 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 531d090..a1e106f 100644 (file)
@@ -336,7 +336,7 @@ reasons.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0d83b49..f2d0a5d 100644 (file)
@@ -326,7 +326,7 @@ source, you can pass the <tt class="rst-docutils literal">base_url</tt>.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d9d170b..cf2ab87 100644 (file)
@@ -273,7 +273,7 @@ this one.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4df76dc..2c40b39 100644 (file)
@@ -217,7 +217,7 @@ Base class of lxml registry errors.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 537214f..356cc20 100644 (file)
@@ -235,7 +235,7 @@ Base class for all syntax errors.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 61b4e6b..3b08c0a 100644 (file)
@@ -213,7 +213,7 @@ Error registering a namespace extension.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3e5b995..120352a 100644 (file)
@@ -350,7 +350,7 @@ called after object creation.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2305acc..f71f547 100644 (file)
@@ -295,7 +295,7 @@ exceptions.BaseException --+           |
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 76e6de4..739c934 100644 (file)
@@ -236,7 +236,7 @@ Element class lookup based on the XML parser.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4aa0370..08e8090 100644 (file)
@@ -211,7 +211,7 @@ Internal lxml parser error.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index efe134b..1e84a2a 100644 (file)
@@ -433,7 +433,7 @@ format.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3f308ba..d9f91d3 100644 (file)
@@ -289,7 +289,7 @@ iteration methods).</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8ae9d53..a7e7eae 100644 (file)
@@ -486,7 +486,7 @@ their text content.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8abcda0..82e2cef 100644 (file)
@@ -325,7 +325,7 @@ filename through the <tt class="rst-docutils literal">file</tt> keyword argument
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 43dd87f..416e5fa 100644 (file)
@@ -217,7 +217,7 @@ Base class for RelaxNG errors.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ff2b2e5..97c0ad0 100644 (file)
@@ -548,7 +548,7 @@ Libxml2 RelaxNG error types
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8ae9591..35e0edd 100644 (file)
@@ -213,7 +213,7 @@ Error while parsing an XML document as RelaxNG.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0200380..ddab520 100644 (file)
@@ -213,7 +213,7 @@ Error while validating an XML document with a RelaxNG schema.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 659c380..d98965b 100644 (file)
@@ -454,7 +454,7 @@ argument.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6e8335b..bf58a91 100644 (file)
@@ -366,7 +366,7 @@ errors in lxml.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1e6fa6c..76e6fe4 100644 (file)
@@ -217,7 +217,7 @@ Base class of all Schematron errors.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a4498e0..a313cb3 100644 (file)
@@ -213,7 +213,7 @@ Error while parsing an XML document as Schematron schema.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index fe71de8..1862f3d 100644 (file)
@@ -213,7 +213,7 @@ Error while validating an XML document with a Schematron schema.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5483c8f..04470df 100644 (file)
@@ -211,7 +211,7 @@ A libxml2 error that occurred during serialisation.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5a2b7ad..2763341 100644 (file)
@@ -234,7 +234,7 @@ Iterates over the siblings of an element.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5ebea5b..12f61f7 100644 (file)
@@ -382,7 +382,7 @@ element.</td>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index be8c10f..4b28f01 100644 (file)
@@ -291,7 +291,7 @@ processing.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 518e609..950a861 100644 (file)
@@ -211,7 +211,7 @@ Error during XInclude processing.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a2875b1..1de0a0d 100644 (file)
@@ -376,7 +376,7 @@ apply to the default parser.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8ae736b..c046e16 100644 (file)
@@ -324,7 +324,7 @@ source, you can pass the <tt class="rst-docutils literal">base_url</tt>.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1cfbce1..afafc05 100644 (file)
@@ -327,7 +327,7 @@ schema insert default/fixed attributes into validated documents.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6160d44..0e6f3c0 100644 (file)
@@ -217,7 +217,7 @@ Base class of all XML Schema errors
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b3d55dc..6f627d7 100644 (file)
@@ -213,7 +213,7 @@ Error while parsing an XML document as XML Schema.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ca571e2..271f59d 100644 (file)
@@ -213,7 +213,7 @@ Error while validating an XML document with an XML Schema.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 16b5142..ba92bfc 100644 (file)
@@ -233,7 +233,7 @@ Syntax error while parsing an XML document.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ee1bd9b..c7885eb 100644 (file)
@@ -361,7 +361,7 @@ returned for string results unless you pass
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8fca0ab..0c73498 100644 (file)
@@ -340,7 +340,7 @@ are currently not supported for variables.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 59299ca..f4f717a 100644 (file)
@@ -375,7 +375,7 @@ against the ElementTree as returned by getroottree().</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index fe57cc2..9bceccf 100644 (file)
@@ -217,7 +217,7 @@ Base class of all XPath errors.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index cd38987..ec4a2db 100644 (file)
@@ -219,7 +219,7 @@ Error during XPath evaluation.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 443b8b7..6d279fa 100644 (file)
@@ -215,7 +215,7 @@ Internal error looking up an XPath extension function.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f5eee3c..9d0faf0 100644 (file)
@@ -215,7 +215,7 @@ Error handling an XPath result.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f2b75a6..aaadd29 100644 (file)
@@ -241,7 +241,7 @@ exceptions.BaseException --+               |
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 992e372..e7f95ff 100644 (file)
@@ -575,7 +575,7 @@ result = transform(doc, some_strval = XSLT.strparam(
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 013a52d..17c0990 100644 (file)
@@ -428,7 +428,7 @@ XSLTAccessControl(create_dir=False, read_file=True, read_network=True,<span clas
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b655767..af99c2e 100644 (file)
@@ -213,7 +213,7 @@ Error running an XSL transformation.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b667b1e..a4a534b 100644 (file)
@@ -217,7 +217,7 @@ Base class of all XSLT errors.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index bc672ab..ce4f1b1 100644 (file)
@@ -397,7 +397,7 @@ case.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 37ac2f7..fbdd1b6 100644 (file)
@@ -213,7 +213,7 @@ Error registering an XSLT extension.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b25ae66..9981073 100644 (file)
@@ -213,7 +213,7 @@ Error parsing a stylesheet document.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7c9e264..1738b39 100644 (file)
@@ -213,7 +213,7 @@ Error serialising an XSLT result.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c2c5599..ef2a501 100644 (file)
@@ -704,7 +704,7 @@ A dict-like proxy for the <tt class="rst-rst-rst-docutils literal rst-rst-docuti
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4d0a05d..ad9d7cf 100644 (file)
@@ -346,7 +346,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e511110..17f5204 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7bce51c..2036484 100644 (file)
@@ -227,7 +227,7 @@ document is cleaned up.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f677d02..8fb6632 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 11358d1..cac2949 100644 (file)
@@ -1600,7 +1600,7 @@ parents.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 65943ff..9150a3a 100644 (file)
@@ -276,7 +276,7 @@ Dead but public. :)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index abd1d07..24bb1dd 100644 (file)
@@ -278,7 +278,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2a9b7fe..6139f61 100644 (file)
@@ -267,7 +267,7 @@ basestring --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 902994d..c4f1f5f 100644 (file)
@@ -231,7 +231,7 @@ Dead but public. :)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c546499..c9334b6 100644 (file)
@@ -998,7 +998,7 @@ class directly.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 34d2884..d73f57c 100644 (file)
@@ -333,7 +333,7 @@ basestring --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8fc422d..4e575e8 100644 (file)
@@ -355,7 +355,7 @@ the value None, if there was no text.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f6a24f8..55e8706 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b78141e..76fcf9f 100644 (file)
@@ -377,7 +377,7 @@ different from what the <tt class="rst-docutils literal">error_log</tt> property
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7be8622..0f36893 100644 (file)
@@ -482,7 +482,7 @@ that were created or modified 'by hand' are not supported.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b38a1f5..70abef1 100644 (file)
@@ -570,7 +570,7 @@ entries.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8201ed1..47611e3 100644 (file)
@@ -347,7 +347,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7b8947a..b0276bc 100644 (file)
@@ -407,7 +407,7 @@ It is not guaranteed to work for all possible text content.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 936f04d..0f3f257 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 36806c3..85d8979 100644 (file)
@@ -229,7 +229,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8ab3a02..6576d1f 100644 (file)
@@ -262,7 +262,7 @@ exceptions.BaseException --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 77c105c..05737fa 100644 (file)
@@ -346,7 +346,7 @@ Base class for XML validators.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 50b906f..e19dac9 100644 (file)
@@ -322,7 +322,7 @@ are currently not supported for variables.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1ee94eb..40e204c 100644 (file)
@@ -389,7 +389,7 @@ the processing instruction.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d7dffb7..1ca416f 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 717649e..3471c5d 100644 (file)
@@ -424,7 +424,7 @@ attribute default values are requested.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 013dfbf..63a34dd 100644 (file)
@@ -323,7 +323,7 @@ was parsing XML data with <tt class="rst-docutils literal">iterparse()</tt>.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4e5f156..708530c 100644 (file)
@@ -319,7 +319,7 @@ with xmlfile(&quot;somefile.xml&quot;, encoding='utf-8') as xf:
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 11e8887..bab070b 100644 (file)
@@ -1325,7 +1325,7 @@ _MethodFunc('make_links_absolute', copy= True)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ecb1cb1..4f63a58 100644 (file)
@@ -3643,7 +3643,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 61df053..dea2055 100644 (file)
@@ -413,7 +413,7 @@ uncheck individual checkboxes according to their value.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 864ad6a..3b3f6ff 100644 (file)
@@ -346,7 +346,7 @@ checkboxes with the same name.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 164e987..e10a39c 100644 (file)
@@ -263,7 +263,7 @@ keyword.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 56e3875..5dc272a 100644 (file)
@@ -117,7 +117,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5db22b6..aecb526 100644 (file)
@@ -364,7 +364,7 @@ _abcoll.Container --+
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a name="_abc_negative_cache"></a><span class="summary-name">_abc_negative_cache</span> = <code title="&lt;_weakrefset.WeakSet object at 0x27d6410&gt;">&lt;_weakrefset.WeakSet object at 0x27d6410&gt;</code>
+        <a name="_abc_negative_cache"></a><span class="summary-name">_abc_negative_cache</span> = <code title="&lt;_weakrefset.WeakSet object at 0x37e8150&gt;">&lt;_weakrefset.WeakSet object at 0x37e8150&gt;</code>
     </td>
   </tr>
 <tr class="private">
@@ -378,7 +378,7 @@ _abcoll.Container --+
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a name="_abc_registry"></a><span class="summary-name">_abc_registry</span> = <code title="&lt;_weakrefset.WeakSet object at 0x27d6290&gt;">&lt;_weakrefset.WeakSet object at 0x27d6290&gt;</code>
+        <a name="_abc_registry"></a><span class="summary-name">_abc_registry</span> = <code title="&lt;_weakrefset.WeakSet object at 0x37e2f90&gt;">&lt;_weakrefset.WeakSet object at 0x37e2f90&gt;</code>
     </td>
   </tr>
   <tr>
@@ -682,7 +682,7 @@ _abcoll.Container --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 87f7b63..c9b4bfb 100644 (file)
@@ -550,7 +550,7 @@ string, and defaults to <tt class="rst-rst-docutils literal rst-docutils literal
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 00c4c81..af9d5dc 100644 (file)
@@ -254,7 +254,7 @@ objects.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index db90c82..48826e1 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 630907d..250d0e7 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c02091b..d486256 100644 (file)
@@ -364,7 +364,7 @@ Element classes.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 424797e..f56901e 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 43bdff5..6912827 100644 (file)
@@ -800,7 +800,7 @@ element to get the document's head.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d65eb90..316025f 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f9099ec..17e0574 100644 (file)
@@ -593,7 +593,7 @@ attribute.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d704ead..960af86 100644 (file)
@@ -431,7 +431,7 @@ nput' or local-name(.) = 'textarea')]
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index af61a04..07bd8fc 100644 (file)
@@ -329,7 +329,7 @@ Mix-in for all input elements (input, select, and textarea)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 86f39b2..fb4d955 100644 (file)
@@ -364,7 +364,7 @@ can't be found.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index eb39b0a..469567f 100644 (file)
@@ -389,7 +389,7 @@ to unselect the option.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0b4505b..d9d59fc 100644 (file)
@@ -412,7 +412,7 @@ unchecks any other value).
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8a920d6..9e0c1e1 100644 (file)
@@ -507,7 +507,7 @@ attribute of all the <tt class="rst-docutils literal">&lt;option&gt;</tt> elemen
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 044711f..c18f1b9 100644 (file)
@@ -373,7 +373,7 @@ get/set the value with <tt class="rst-rst-rst-rst-rst-docutils literal rst-rst-r
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1aeb616..3a62781 100644 (file)
@@ -266,7 +266,7 @@ parser like this:</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c146261..6403bf0 100644 (file)
@@ -253,7 +253,7 @@ of the resulting document.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7cec5ae..c3d915c 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index da7e122..95a9165 100644 (file)
@@ -431,7 +431,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a997347..3adbc42 100644 (file)
@@ -727,7 +727,7 @@ a<code class="re-op">-</code>z0<code class="re-op">-</code>9%&amp;\?;=~<code cla
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index cd1337a..bdbea53 100644 (file)
@@ -1251,7 +1251,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:06 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 647ee4d..c3970df 100644 (file)
@@ -759,7 +759,7 @@ more sneaky attempts.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index cb56731..6ec07c8 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1d19dd1..66afb9f 100644 (file)
@@ -240,7 +240,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0a36c29..d78dd69 100644 (file)
@@ -193,7 +193,7 @@ blocks amidst large spans of changes
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
           <td><span class="summary-sig"><a href="lxml.html.diff-module.html#html_annotate" class="summary-sig-name">html_annotate</a>(<span class="summary-sig-arg">doclist</span>,
-        <span class="summary-sig-arg">markup</span>=<span class="summary-sig-default">&lt;function default_markup at 0x2c36b18&gt;</span>)</span><br />
+        <span class="summary-sig-arg">markup</span>=<span class="summary-sig-default">&lt;function default_markup at 0x3cda1b8&gt;</span>)</span><br />
       doclist should be ordered from oldest to newest, like:</td>
           <td align="right" valign="top">
             <span class="codelink"><a href="lxml.html.diff-pysrc.html#html_annotate">source&nbsp;code</a></span>
@@ -972,7 +972,7 @@ given &lt;p&gt;Hi &lt;i&gt;there!&lt;/i&gt;&lt;/p&gt;, if you remove the &lt;i&g
   <table width="100%" cellpadding="0" cellspacing="0" border="0">
   <tr valign="top"><td>
   <h3 class="epydoc"><span class="sig"><span class="sig-name">html_annotate</span>(<span class="sig-arg">doclist</span>,
-        <span class="sig-arg">markup</span>=<span class="sig-default">&lt;function default_markup at 0x2c36b18&gt;</span>)</span>
+        <span class="sig-arg">markup</span>=<span class="sig-default">&lt;function default_markup at 0x3cda1b8&gt;</span>)</span>
   </h3>
   </td><td align="right" valign="top"
     ><span class="codelink"><a href="lxml.html.diff-pysrc.html#html_annotate">source&nbsp;code</a></span>&nbsp;
@@ -1370,7 +1370,7 @@ includes the elements tail.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index de0a5bf..9ca4f49 100644 (file)
@@ -1737,7 +1737,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1756a96..9196fb0 100644 (file)
@@ -94,7 +94,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8c17511..fa4d076 100644 (file)
@@ -94,7 +94,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d9e09a1..e4b2480 100644 (file)
@@ -235,7 +235,7 @@ triple with n==0.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2d1c675..d87d972 100644 (file)
@@ -182,7 +182,7 @@ Raised when the document no longer contains any pending deletes
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index da4c7eb..c05dfe9 100644 (file)
@@ -342,7 +342,7 @@ show the href when it changes.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a347a8d..42527a3 100644 (file)
@@ -427,7 +427,7 @@ is only represented in a document by a tag.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5e957ea..9b2179a 100644 (file)
@@ -412,7 +412,7 @@ space.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 01af907..a8a7708 100644 (file)
@@ -546,7 +546,7 @@ escendant-or-self::x:textarea
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8050fd1..489fac4 100644 (file)
@@ -778,7 +778,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4e44eda..667c71a 100644 (file)
@@ -303,7 +303,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7a4724d..f144263 100644 (file)
@@ -185,7 +185,7 @@ Raised when no form can be found
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 00cf652..36b95b7 100644 (file)
@@ -418,7 +418,7 @@ is a fragment or a document.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e2d5979..d2b3268 100644 (file)
@@ -590,7 +590,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 02f8225..b393312 100644 (file)
@@ -256,7 +256,7 @@ text</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c3062c3..53badff 100644 (file)
@@ -139,7 +139,7 @@ An html5lib XHTML Parser with lxml as tree.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f27c705..097a5a5 100644 (file)
@@ -449,7 +449,7 @@ keyword.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f48db7a..7ac4f6b 100644 (file)
@@ -309,7 +309,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:06 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index fd8dc3f..bac8726 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3769247..eb5e8fd 100644 (file)
@@ -116,7 +116,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index cd02118..533f74c 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 74bdd09..ae341b8 100644 (file)
@@ -100,7 +100,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a51d511..1e3a427 100644 (file)
@@ -533,7 +533,7 @@ chematron.rng')))
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7698810..0b204e4 100644 (file)
@@ -608,7 +608,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index be0a36d..78ce1dc 100644 (file)
@@ -685,7 +685,7 @@ been turned off).
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 26a0639..8e177cc 100644 (file)
@@ -629,7 +629,7 @@ attributes.</td>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a name="E"></a><span class="summary-name">E</span> = <code title="&lt;lxml.objectify.ElementMaker object at 0x22329b0&gt;">&lt;lxml.objectify.ElementMaker object at 0x22329b0&gt;</code>
+        <a name="E"></a><span class="summary-name">E</span> = <code title="&lt;lxml.objectify.ElementMaker object at 0x328f5f0&gt;">&lt;lxml.objectify.ElementMaker object at 0x328f5f0&gt;</code>
     </td>
   </tr>
 <tr>
@@ -1136,7 +1136,7 @@ elements.  Pass 'string', for example, to make string values the default.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ad0bf77..02bd271 100644 (file)
@@ -801,7 +801,7 @@ this if they recursively call _init() in the superclasses.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1d60dd8..fb1dcaf 100644 (file)
@@ -365,7 +365,7 @@ some text
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 46e462e..d8f514f 100644 (file)
@@ -390,7 +390,7 @@ this if they recursively call _init() in the superclasses.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2286c60..541ddde 100644 (file)
@@ -396,7 +396,7 @@ this if they recursively call _init() in the superclasses.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index fe79933..6aabad2 100644 (file)
@@ -390,7 +390,7 @@ this if they recursively call _init() in the superclasses.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 72b7bc1..ebae9a4 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 55eeeec..a04e8ef 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ee1ce2e..fd8a72f 100644 (file)
@@ -452,7 +452,7 @@ as second argument) or raises AttributeError.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2785fb5..5223edf 100644 (file)
@@ -408,7 +408,7 @@ doing.</td>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b5868ee..bddf9fc 100644 (file)
@@ -859,7 +859,7 @@ returned in document order.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index cffc59e..9ba952e 100644 (file)
@@ -276,7 +276,7 @@ empty data elements (defauls to StringElement).</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4ca2fd9..fbd274d 100644 (file)
@@ -443,7 +443,7 @@ ignored.  Raises ValueError if the dependencies cannot be fulfilled.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a039f73..818e309 100644 (file)
@@ -731,7 +731,7 @@ Instead, use the .text attribute to get a 'real' string.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 85beea9..23abdd3 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 105bad0..fd60fe1 100644 (file)
@@ -107,7 +107,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 89e582f..9568b54 100644 (file)
@@ -219,7 +219,7 @@ them against a SAX ContentHandler.</td>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 26a61c0..3323963 100644 (file)
@@ -493,7 +493,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 261c8ee..5df5f04 100644 (file)
@@ -871,7 +871,7 @@ Locator provides useful information.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a75a1af..6bbf2bd 100644 (file)
@@ -281,7 +281,7 @@ Produces SAX events for an element and children.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 53875c2..4989710 100644 (file)
@@ -211,7 +211,7 @@ General SAX error.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index bacafa6..cac0aad 100644 (file)
@@ -169,7 +169,7 @@ namespace registry mechanism</em>    </li>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9a37d53..9fc2ec3 100644 (file)
@@ -102,7 +102,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9fdabc2..bf32fad 100644 (file)
@@ -506,7 +506,7 @@ occurrences of pattern in string by the replacement repl.</td>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0e9c47d..6cfa8ee 100644 (file)
@@ -578,7 +578,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index cc91569..e9cd9fe 100644 (file)
@@ -420,7 +420,7 @@ unittest.case.TestCase --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b44aa1e..24af172 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6be26cb..676fba7 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 822ef57..d0b0e1d 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7d74c99..931a088 100644 (file)
@@ -263,7 +263,7 @@ Simple HTTP request dumper for tests in Python 2.5+.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index cf5f9e5..b93fd38 100644 (file)
@@ -195,7 +195,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0c5d03a..0e9fcdb 100644 (file)
@@ -246,7 +246,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 35eb017..b3ab1c3 100644 (file)
@@ -203,7 +203,7 @@ A web server that starts a new thread for each request.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 906c450..4868245 100644 (file)
@@ -330,7 +330,7 @@ message.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a19b166..6ca27c7 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 479679b..697a94e 100644 (file)
@@ -229,7 +229,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 05b7596..581039e 100644 (file)
@@ -400,7 +400,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 61e864d..3d8d915 100644 (file)
@@ -269,7 +269,7 @@ Tests for different Element class lookup mechanisms.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c6836fa..11718e3 100644 (file)
@@ -1241,7 +1241,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d1d57a2..d3c0821 100644 (file)
@@ -604,7 +604,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 01fbe8b..76cffbb 100644 (file)
@@ -498,7 +498,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6f93bb5..dc2f0c7 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 25da93d..89deaac 100644 (file)
@@ -192,7 +192,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c04e133..213cfdb 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b985e0b..19f3363 100644 (file)
@@ -223,7 +223,7 @@ Test cases related to DTD parsing and validation
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2b175e0..6aa30e2 100644 (file)
@@ -920,7 +920,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7cf1779..0e42259 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6f51311..49238e0 100644 (file)
@@ -293,7 +293,7 @@ for IO related test cases.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b705688..69bafe2 100644 (file)
@@ -11399,7 +11399,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 020cf5b..2ee5dff 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 26cddaa..f632bfe 100644 (file)
@@ -374,7 +374,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e58f23d..71997b7 100644 (file)
@@ -650,7 +650,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1a08def..6f84837 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b3e4007..fb14ab7 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 986f76f..853e442 100644 (file)
@@ -494,7 +494,7 @@ unittest.case.TestCase --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f5ff347..d44c6b4 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6ee4c28..e7ed8b0 100644 (file)
@@ -266,7 +266,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b2d887f..d6712df 100644 (file)
@@ -416,7 +416,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6d12b3c..b2b6a0b 100644 (file)
@@ -275,7 +275,7 @@ test_elementtree</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 32f9bdd..3f53cc0 100644 (file)
@@ -10833,7 +10833,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:06 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f41d976..00919f3 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4501e5c..69cf75f 100644 (file)
@@ -402,7 +402,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d70398a..11f8667 100644 (file)
@@ -4072,7 +4072,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 981652b..2a28505 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 05f95bc..134752a 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1674724..9b00e63 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 41e0e50..6ed3b12 100644 (file)
@@ -440,7 +440,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e60975d..4ad83c4 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4fcff98..91505f8 100644 (file)
@@ -232,7 +232,7 @@ HTML parser test cases for etree
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d635a67..2bb3737 100644 (file)
@@ -1231,230 +1231,343 @@ lxml.html.diff.token.html" class="py-name" href="#" onclick="return doclink('lin
 <a name="L347"></a><tt class="py-lineno">347</tt>  <tt class="py-line">        <tt id="link-364" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-364', 'root', 'link-304');">root</a></tt> <tt class="py-op">=</tt> <tt class="py-name">iterator</tt><tt class="py-op">.</tt><tt id="link-365" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-365', 'root', 'link-304');">root</a></tt> </tt>
 <a name="L348"></a><tt class="py-lineno">348</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertTrue</tt><tt class="py-op">(</tt><tt id="link-366" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-366', 'root', 'link-304');">root</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
 <a name="L349"></a><tt class="py-lineno">349</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-number">249</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">events</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L350"></a><tt class="py-lineno">350</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt> </tt>
-<a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line">            <tt class="py-op">[</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line">            <tt class="py-op">[</tt> <tt class="py-name">event</tt> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">event</tt><tt class="py-op">,</tt> <tt class="py-name">element</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">events</tt> <tt class="py-keyword">if</tt> <tt class="py-name">event</tt> <tt class="py-op">!=</tt> <tt class="py-string">'end'</tt> <tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L353"></a><tt class="py-lineno">353</tt>  <tt class="py-line"> </tt>
-<a name="HtmlParserTestCase.test_html_iterparse_start"></a><div id="HtmlParserTestCase.test_html_iterparse_start-def"><a name="L354"></a><tt class="py-lineno">354</tt> <a class="py-toggle" href="#" id="HtmlParserTestCase.test_html_iterparse_start-toggle" onclick="return toggle('HtmlParserTestCase.test_html_iterparse_start');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse_start">test_html_iterparse_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HtmlParserTestCase.test_html_iterparse_start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HtmlParserTestCase.test_html_iterparse_start-expanded"><a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line">        <tt id="link-367" class="py-name"><a title="lxml.etree.iterparse" class="py-name" href="#" onclick="return doclink('link-367', 'iterparse', 'link-299');">iterparse</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-368" class="py-name"><a title="lxml.etree
+<a name="L350"></a><tt class="py-lineno">350</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-367" class="py-name" targets="Variable lxml.tests.common_imports.HelperTestCase.assertFalse=lxml.tests.common_imports.HelperTestCase-class.html#assertFalse"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-367', 'assertFalse', 'link-367');">assertFalse</a></tt><tt class="py-op">(</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line">            <tt class="py-op">[</tt><tt class="py-name">event</tt> <tt class="py-keyword">for</tt> <tt class="py-op">(</tt><tt class="py-name">event</tt><tt class="py-op">,</tt> <tt class="py-name">element</tt><tt class="py-op">)</tt> <tt class="py-keyword">in</tt> <tt class="py-name">events</tt> <tt class="py-keyword">if</tt> <tt class="py-name">event</tt> <tt class="py-op">!=</tt> <tt class="py-string">'end'</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line"> </tt>
+<a name="HtmlParserTestCase.test_html_iterparse_start"></a><div id="HtmlParserTestCase.test_html_iterparse_start-def"><a name="L353"></a><tt class="py-lineno">353</tt> <a class="py-toggle" href="#" id="HtmlParserTestCase.test_html_iterparse_start-toggle" onclick="return toggle('HtmlParserTestCase.test_html_iterparse_start');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_iterparse_start">test_html_iterparse_start</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HtmlParserTestCase.test_html_iterparse_start-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HtmlParserTestCase.test_html_iterparse_start-expanded"><a name="L354"></a><tt class="py-lineno">354</tt>  <tt class="py-line">        <tt id="link-368" class="py-name"><a title="lxml.etree.iterparse" class="py-name" href="#" onclick="return doclink('link-368', 'iterparse', 'link-299');">iterparse</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-369" class="py-name"><a title="lxml.etree
 lxml.sax.ElementTreeContentHandler.etree
 lxml.tests.test_elementtree.CElementTreeTestCase.etree
 lxml.tests.test_elementtree._ETreeTestCaseBase.etree
 lxml.tests.test_elementtree._XMLPullParserTest.etree
-lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-368', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-369" class="py-name"><a title="lxml.etree.iterparse" class="py-name" href="#" onclick="return doclink('link-369', 'iterparse', 'link-299');">iterparse</a></tt> </tt>
-<a name="L356"></a><tt class="py-lineno">356</tt>  <tt class="py-line">        <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">BytesIO</tt><tt class="py-op">(</tt> </tt>
-<a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line">            <tt class="py-string">'&lt;html&gt;&lt;head&gt;&lt;title&gt;TITLE&lt;/title&gt;&lt;body&gt;&lt;p&gt;P&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;'</tt><tt class="py-op">)</tt> </tt>
-<a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line"> </tt>
-<a name="L359"></a><tt class="py-lineno">359</tt>  <tt class="py-line">        <tt class="py-name">iterator</tt> <tt class="py-op">=</tt> <tt id="link-370" class="py-name"><a title="lxml.etree.iterparse" class="py-name" href="#" onclick="return doclink('link-370', 'iterparse', 'link-299');">iterparse</a></tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">,</tt> <tt id="link-371" class="py-name"><a title="lxml.html
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-369', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-370" class="py-name"><a title="lxml.etree.iterparse" class="py-name" href="#" onclick="return doclink('link-370', 'iterparse', 'link-299');">iterparse</a></tt> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line">        <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">BytesIO</tt><tt class="py-op">(</tt> </tt>
+<a name="L356"></a><tt class="py-lineno">356</tt>  <tt class="py-line">            <tt class="py-string">'&lt;html&gt;&lt;head&gt;&lt;title&gt;TITLE&lt;/title&gt;&lt;body&gt;&lt;p&gt;P&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;'</tt><tt class="py-op">)</tt> </tt>
+<a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line"> </tt>
+<a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line">        <tt class="py-name">iterator</tt> <tt class="py-op">=</tt> <tt id="link-371" class="py-name"><a title="lxml.etree.iterparse" class="py-name" href="#" onclick="return doclink('link-371', 'iterparse', 'link-299');">iterparse</a></tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">,</tt> <tt id="link-372" class="py-name"><a title="lxml.html
 lxml.html.diff.href_token.html
 lxml.html.diff.tag_token.html
-lxml.html.diff.token.html" class="py-name" href="#" onclick="return doclink('link-371', 'html', 'link-222');">html</a></tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-name">events</tt><tt class="py-op">=</tt><tt class="py-op">(</tt><tt class="py-string">'start'</tt><tt class="py-op">,</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L360"></a><tt class="py-lineno">360</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">iterator</tt><tt class="py-op">.</tt><tt id="link-372" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-372', 'root', 'link-304');">root</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L361"></a><tt class="py-lineno">361</tt>  <tt class="py-line"> </tt>
-<a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line">        <tt class="py-name">events</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">iterator</tt><tt class="py-op">)</tt> </tt>
-<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line">        <tt id="link-373" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-373', 'root', 'link-304');">root</a></tt> <tt class="py-op">=</tt> <tt class="py-name">iterator</tt><tt class="py-op">.</tt><tt id="link-374" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-374', 'root', 'link-304');">root</a></tt> </tt>
-<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertTrue</tt><tt class="py-op">(</tt><tt id="link-375" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-375', 'root', 'link-304');">root</a></tt> <tt class="py-keyword">is</tt> <tt class="py-keyword">not</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
-<a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt> </tt>
-<a name="L366"></a><tt class="py-lineno">366</tt>  <tt class="py-line">            <tt class="py-op">[</tt><tt class="py-op">(</tt><tt class="py-string">'start'</tt><tt class="py-op">,</tt> <tt id="link-376" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-376', 'root', 'link-304');">root</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">'start'</tt><tt class="py-op">,</tt> <tt id="link-377" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-377', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">'start'</tt><tt class="py-op">,</tt> <tt id="link-378" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-378', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-string">'start'</tt><tt class="py-op">,</tt> <tt id="link-379" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-379', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">'start'</tt><tt class="py-op">,</tt> <tt id="link-380" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-380', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
-<a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line">            <tt class="py-name">events</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L369"></a><tt class="py-lineno">369</tt>  <tt class="py-line"> </tt>
-<a name="HtmlParserTestCase.test_html_parser_target_tag"></a><div id="HtmlParserTestCase.test_html_parser_target_tag-def"><a name="L370"></a><tt class="py-lineno">370</tt> <a class="py-toggle" href="#" id="HtmlParserTestCase.test_html_parser_target_tag-toggle" onclick="return toggle('HtmlParserTestCase.test_html_parser_target_tag');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_tag">test_html_parser_target_tag</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HtmlParserTestCase.test_html_parser_target_tag-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HtmlParserTestCase.test_html_parser_target_tag-expanded"><a name="L371"></a><tt class="py-lineno">371</tt>  <tt class="py-line">        <tt id="link-381" class="py-name" targets="Variable lxml.tests.common_imports.HelperTestCase.assertFalse=lxml.tests.common_imports.HelperTestCase-class.html#assertFalse"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-381', 'assertFalse', 'link-381');">assertFalse</a></tt>  <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-382" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-382', 'assertFalse', 'link-381');">assertFalse</a></tt> </tt>
-<a name="L372"></a><tt class="py-lineno">372</tt>  <tt class="py-line">        <tt class="py-name">events</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L373"></a><tt class="py-lineno">373</tt>  <tt class="py-line">        <tt class="py-keyword">class</tt> <tt class="py-def-name">Target</tt><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L374"></a><tt class="py-lineno">374</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">start</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attrib</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L375"></a><tt class="py-lineno">375</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-383" class="py-name" targets="Method lxml.etree._Element.append()=lxml.etree._Element-class.html#append"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-383', 'append', 'link-383');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt id="link-384" class="py-name"><a title="lxml.etree._Comment.tag
+lxml.html.diff.token.html" class="py-name" href="#" onclick="return doclink('link-372', 'html', 'link-222');">html</a></tt><tt class="py-op">=</tt><tt class="py-name">True</tt><tt class="py-op">,</tt> <tt class="py-name">events</tt><tt class="py-op">=</tt><tt class="py-op">(</tt><tt class="py-string">'start'</tt><tt class="py-op">,</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L359"></a><tt class="py-lineno">359</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">iterator</tt><tt class="py-op">.</tt><tt id="link-373" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-373', 'root', 'link-304');">root</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L360"></a><tt class="py-lineno">360</tt>  <tt class="py-line"> </tt>
+<a name="L361"></a><tt class="py-lineno">361</tt>  <tt class="py-line">        <tt class="py-name">events</tt> <tt class="py-op">=</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt class="py-name">iterator</tt><tt class="py-op">)</tt> </tt>
+<a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line">        <tt id="link-374" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-374', 'root', 'link-304');">root</a></tt> <tt class="py-op">=</tt> <tt class="py-name">iterator</tt><tt class="py-op">.</tt><tt id="link-375" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-375', 'root', 'link-304');">root</a></tt> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertNotEqual</tt><tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt id="link-376" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-376', 'root', 'link-304');">root</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt> </tt>
+<a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line">            <tt class="py-op">[</tt><tt class="py-op">(</tt><tt class="py-string">'start'</tt><tt class="py-op">,</tt> <tt id="link-377" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-377', 'root', 'link-304');">root</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">'start'</tt><tt class="py-op">,</tt> <tt id="link-378" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-378', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">'start'</tt><tt class="py-op">,</tt> <tt id="link-379" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-379', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L366"></a><tt class="py-lineno">366</tt>  <tt class="py-line">                <tt class="py-op">(</tt><tt class="py-string">'start'</tt><tt class="py-op">,</tt> <tt id="link-380" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-380', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">'start'</tt><tt class="py-op">,</tt> <tt id="link-381" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-381', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> </tt>
+<a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line">            <tt class="py-name">events</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line"> </tt>
+<a name="HtmlParserTestCase.test_html_feed_parser"></a><div id="HtmlParserTestCase.test_html_feed_parser-def"><a name="L369"></a><tt class="py-lineno">369</tt> <a class="py-toggle" href="#" id="HtmlParserTestCase.test_html_feed_parser-toggle" onclick="return toggle('HtmlParserTestCase.test_html_feed_parser');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_feed_parser">test_html_feed_parser</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HtmlParserTestCase.test_html_feed_parser-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HtmlParserTestCase.test_html_feed_parser-expanded"><a name="L370"></a><tt class="py-lineno">370</tt>  <tt class="py-line">        <tt id="link-382" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-382', 'parser', 'link-62');">parser</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-383" class="py-name"><a title="lxml.etree
+lxml.sax.ElementTreeContentHandler.etree
+lxml.tests.test_elementtree.CElementTreeTestCase.etree
+lxml.tests.test_elementtree._ETreeTestCaseBase.etree
+lxml.tests.test_elementtree._XMLPullParserTest.etree
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-383', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-384" class="py-name"><a title="lxml.etree.HTMLParser
+lxml.html.HTMLParser
+lxml.html.html5parser.HTMLParser" class="py-name" href="#" onclick="return doclink('link-384', 'HTMLParser', 'link-64');">HTMLParser</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L371"></a><tt class="py-lineno">371</tt>  <tt class="py-line">        <tt id="link-385" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-385', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-386" class="py-name" targets="Method lxml.etree._FeedParser.feed()=lxml.etree._FeedParser-class.html#feed"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-386', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"&lt;html&gt;&lt;body&gt;&lt;/"</tt><tt class="py-op">)</tt> </tt>
+<a name="L372"></a><tt class="py-lineno">372</tt>  <tt class="py-line">        <tt id="link-387" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-387', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-388" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-388', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"body&gt;&lt;/html&gt;"</tt><tt class="py-op">)</tt> </tt>
+<a name="L373"></a><tt class="py-lineno">373</tt>  <tt class="py-line">        <tt id="link-389" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-389', 'root', 'link-304');">root</a></tt> <tt class="py-op">=</tt> <tt id="link-390" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-390', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-391" class="py-name"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-391', 'close', 'link-243');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L374"></a><tt class="py-lineno">374</tt>  <tt class="py-line"> </tt>
+<a name="L375"></a><tt class="py-lineno">375</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-string">'html'</tt><tt class="py-op">,</tt> <tt id="link-392" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-392', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-393" class="py-name"><a title="lxml.etree._Comment.tag
+lxml.etree._Element.tag
+lxml.etree._Entity.tag
+lxml.etree._ProcessingInstruction.tag
+lxml.tests.test_xpathevaluator.tag
+xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-393', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L376"></a><tt class="py-lineno">376</tt>  <tt class="py-line">        <tt class="py-comment"># test that we find all names in the parser dict</tt> </tt>
+<a name="L377"></a><tt class="py-lineno">377</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-394" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-394', 'root', 'link-304');">root</a></tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-395" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-395', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-396" class="py-name" targets="Method lxml.etree._Element.iter()=lxml.etree._Element-class.html#iter,Method lxml.etree._ElementTree.iter()=lxml.etree._ElementTree-class.html#iter"><a title="lxml.etree._Element.iter
+lxml.etree._ElementTree.iter" class="py-name" href="#" onclick="return doclink('link-396', 'iter', 'link-396');">iter</a></tt><tt class="py-op">(</tt><tt class="py-string">'html'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L378"></a><tt class="py-lineno">378</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-397" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-397', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-398" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-398', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-399" class="py-name"><a title="lxml.etree._Element.iter
+lxml.etree._ElementTree.iter" class="py-name" href="#" onclick="return doclink('link-399', 'iter', 'link-396');">iter</a></tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L379"></a><tt class="py-lineno">379</tt>  <tt class="py-line"> </tt>
+<a name="HtmlParserTestCase.test_html_feed_parser_chunky"></a><div id="HtmlParserTestCase.test_html_feed_parser_chunky-def"><a name="L380"></a><tt class="py-lineno">380</tt> <a class="py-toggle" href="#" id="HtmlParserTestCase.test_html_feed_parser_chunky-toggle" onclick="return toggle('HtmlParserTestCase.test_html_feed_parser_chunky');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_feed_parser_chunky">test_html_feed_parser_chunky</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HtmlParserTestCase.test_html_feed_parser_chunky-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HtmlParserTestCase.test_html_feed_parser_chunky-expanded"><a name="L381"></a><tt class="py-lineno">381</tt>  <tt class="py-line">        <tt id="link-400" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-400', 'parser', 'link-62');">parser</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-401" class="py-name"><a title="lxml.etree
+lxml.sax.ElementTreeContentHandler.etree
+lxml.tests.test_elementtree.CElementTreeTestCase.etree
+lxml.tests.test_elementtree._ETreeTestCaseBase.etree
+lxml.tests.test_elementtree._XMLPullParserTest.etree
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-401', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-402" class="py-name"><a title="lxml.etree.HTMLParser
+lxml.html.HTMLParser
+lxml.html.html5parser.HTMLParser" class="py-name" href="#" onclick="return doclink('link-402', 'HTMLParser', 'link-64');">HTMLParser</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L382"></a><tt class="py-lineno">382</tt>  <tt class="py-line">        <tt id="link-403" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-403', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-404" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-404', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"&lt;htm"</tt><tt class="py-op">)</tt> </tt>
+<a name="L383"></a><tt class="py-lineno">383</tt>  <tt class="py-line">        <tt id="link-405" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-405', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-406" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-406', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"l&gt;&lt;body"</tt><tt class="py-op">)</tt> </tt>
+<a name="L384"></a><tt class="py-lineno">384</tt>  <tt class="py-line">        <tt id="link-407" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-407', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-408" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-408', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"&gt;&lt;"</tt><tt class="py-op">)</tt> </tt>
+<a name="L385"></a><tt class="py-lineno">385</tt>  <tt class="py-line">        <tt id="link-409" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-409', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-410" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-410', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"p&gt;&lt;"</tt><tt class="py-op">)</tt> </tt>
+<a name="L386"></a><tt class="py-lineno">386</tt>  <tt class="py-line">        <tt id="link-411" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-411', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-412" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-412', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"strong"</tt><tt class="py-op">)</tt> </tt>
+<a name="L387"></a><tt class="py-lineno">387</tt>  <tt class="py-line">        <tt id="link-413" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-413', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-414" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-414', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"&gt;some "</tt><tt class="py-op">)</tt> </tt>
+<a name="L388"></a><tt class="py-lineno">388</tt>  <tt class="py-line">        <tt id="link-415" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-415', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-416" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-416', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"text&lt;/strong&gt;&lt;/p&gt;&lt;"</tt><tt class="py-op">)</tt> </tt>
+<a name="L389"></a><tt class="py-lineno">389</tt>  <tt class="py-line">        <tt id="link-417" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-417', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-418" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-418', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"/body&gt;&lt;/html&gt;"</tt><tt class="py-op">)</tt> </tt>
+<a name="L390"></a><tt class="py-lineno">390</tt>  <tt class="py-line">        <tt id="link-419" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-419', 'root', 'link-304');">root</a></tt> <tt class="py-op">=</tt> <tt id="link-420" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-420', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-421" class="py-name"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-421', 'close', 'link-243');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L391"></a><tt class="py-lineno">391</tt>  <tt class="py-line"> </tt>
+<a name="L392"></a><tt class="py-lineno">392</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-string">'html'</tt><tt class="py-op">,</tt> <tt id="link-422" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-422', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-423" class="py-name"><a title="lxml.etree._Comment.tag
 lxml.etree._Element.tag
 lxml.etree._Entity.tag
 lxml.etree._ProcessingInstruction.tag
 lxml.tests.test_xpathevaluator.tag
-xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-384', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L376"></a><tt class="py-lineno">376</tt>  <tt class="py-line">                <tt id="link-385" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-385', 'assertFalse', 'link-381');">assertFalse</a></tt><tt class="py-op">(</tt><tt id="link-386" class="py-name" targets="Variable lxml.etree._Element.attrib=lxml.etree._Element-class.html#attrib,Variable lxml.etree._ProcessingInstruction.attrib=lxml.etree._ProcessingInstruction-class.html#attrib,Variable xml.etree.ElementTree.Element.attrib=xml.etree.ElementTree.Element-class.html#attrib"><a title="lxml.etree._Element.attrib
+xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-423', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L393"></a><tt class="py-lineno">393</tt>  <tt class="py-line">        <tt class="py-comment"># test that we find all names in the parser dict</tt> </tt>
+<a name="L394"></a><tt class="py-lineno">394</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-424" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-424', 'root', 'link-304');">root</a></tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-425" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-425', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-426" class="py-name"><a title="lxml.etree._Element.iter
+lxml.etree._ElementTree.iter" class="py-name" href="#" onclick="return doclink('link-426', 'iter', 'link-396');">iter</a></tt><tt class="py-op">(</tt><tt class="py-string">'html'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L395"></a><tt class="py-lineno">395</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-427" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-427', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-428" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-428', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-429" class="py-name"><a title="lxml.etree._Element.iter
+lxml.etree._ElementTree.iter" class="py-name" href="#" onclick="return doclink('link-429', 'iter', 'link-396');">iter</a></tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L396"></a><tt class="py-lineno">396</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-430" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-430', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-431" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-431', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-432" class="py-name"><a title="lxml.etree._Element.iter
+lxml.etree._ElementTree.iter" class="py-name" href="#" onclick="return doclink('link-432', 'iter', 'link-396');">iter</a></tt><tt class="py-op">(</tt><tt class="py-string">'p'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L397"></a><tt class="py-lineno">397</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-433" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-433', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-434" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-434', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-435" class="py-name"><a title="lxml.etree._Element.iter
+lxml.etree._ElementTree.iter" class="py-name" href="#" onclick="return doclink('link-435', 'iter', 'link-396');">iter</a></tt><tt class="py-op">(</tt><tt class="py-string">'strong'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L398"></a><tt class="py-lineno">398</tt>  <tt class="py-line"> </tt>
+<a name="HtmlParserTestCase.test_html_feed_parser_more_tags"></a><div id="HtmlParserTestCase.test_html_feed_parser_more_tags-def"><a name="L399"></a><tt class="py-lineno">399</tt> <a class="py-toggle" href="#" id="HtmlParserTestCase.test_html_feed_parser_more_tags-toggle" onclick="return toggle('HtmlParserTestCase.test_html_feed_parser_more_tags');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_feed_parser_more_tags">test_html_feed_parser_more_tags</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HtmlParserTestCase.test_html_feed_parser_more_tags-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HtmlParserTestCase.test_html_feed_parser_more_tags-expanded"><a name="L400"></a><tt class="py-lineno">400</tt>  <tt class="py-line">        <tt id="link-436" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-436', 'parser', 'link-62');">parser</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-437" class="py-name"><a title="lxml.etree
+lxml.sax.ElementTreeContentHandler.etree
+lxml.tests.test_elementtree.CElementTreeTestCase.etree
+lxml.tests.test_elementtree._ETreeTestCaseBase.etree
+lxml.tests.test_elementtree._XMLPullParserTest.etree
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-437', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-438" class="py-name"><a title="lxml.etree.HTMLParser
+lxml.html.HTMLParser
+lxml.html.html5parser.HTMLParser" class="py-name" href="#" onclick="return doclink('link-438', 'HTMLParser', 'link-64');">HTMLParser</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L401"></a><tt class="py-lineno">401</tt>  <tt class="py-line">        <tt id="link-439" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-439', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-440" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-440', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">'&lt;html&gt;&lt;head&gt;'</tt><tt class="py-op">)</tt> </tt>
+<a name="L402"></a><tt class="py-lineno">402</tt>  <tt class="py-line">        <tt id="link-441" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-441', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-442" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-442', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">'&lt;title&gt;TITLE&lt;/title&gt;&lt;body&gt;&lt;p&gt;P&lt;/p&gt;&lt;/body&gt;&lt;'</tt><tt class="py-op">)</tt> </tt>
+<a name="L403"></a><tt class="py-lineno">403</tt>  <tt class="py-line">        <tt id="link-443" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-443', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-444" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-444', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"/html&gt;"</tt><tt class="py-op">)</tt> </tt>
+<a name="L404"></a><tt class="py-lineno">404</tt>  <tt class="py-line">        <tt id="link-445" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-445', 'root', 'link-304');">root</a></tt> <tt class="py-op">=</tt> <tt id="link-446" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-446', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-447" class="py-name"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-447', 'close', 'link-243');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L405"></a><tt class="py-lineno">405</tt>  <tt class="py-line"> </tt>
+<a name="L406"></a><tt class="py-lineno">406</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-string">'html'</tt><tt class="py-op">,</tt> <tt id="link-448" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-448', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-449" class="py-name"><a title="lxml.etree._Comment.tag
+lxml.etree._Element.tag
+lxml.etree._Entity.tag
+lxml.etree._ProcessingInstruction.tag
+lxml.tests.test_xpathevaluator.tag
+xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-449', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L407"></a><tt class="py-lineno">407</tt>  <tt class="py-line">        <tt class="py-comment"># test that we find all names in the parser dict</tt> </tt>
+<a name="L408"></a><tt class="py-lineno">408</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-450" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-450', 'root', 'link-304');">root</a></tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-451" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-451', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-452" class="py-name"><a title="lxml.etree._Element.iter
+lxml.etree._ElementTree.iter" class="py-name" href="#" onclick="return doclink('link-452', 'iter', 'link-396');">iter</a></tt><tt class="py-op">(</tt><tt class="py-string">'html'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L409"></a><tt class="py-lineno">409</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-453" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-453', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-454" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-454', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-455" class="py-name"><a title="lxml.etree._Element.iter
+lxml.etree._ElementTree.iter" class="py-name" href="#" onclick="return doclink('link-455', 'iter', 'link-396');">iter</a></tt><tt class="py-op">(</tt><tt class="py-string">'head'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L410"></a><tt class="py-lineno">410</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-456" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-456', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-457" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-457', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-458" class="py-name"><a title="lxml.etree._Element.iter
+lxml.etree._ElementTree.iter" class="py-name" href="#" onclick="return doclink('link-458', 'iter', 'link-396');">iter</a></tt><tt class="py-op">(</tt><tt class="py-string">'title'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L411"></a><tt class="py-lineno">411</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-459" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-459', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-460" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-460', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-461" class="py-name"><a title="lxml.etree._Element.iter
+lxml.etree._ElementTree.iter" class="py-name" href="#" onclick="return doclink('link-461', 'iter', 'link-396');">iter</a></tt><tt class="py-op">(</tt><tt class="py-string">'body'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L412"></a><tt class="py-lineno">412</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt id="link-462" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-462', 'root', 'link-304');">root</a></tt><tt class="py-op">[</tt><tt class="py-number">1</tt><tt class="py-op">]</tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">list</tt><tt class="py-op">(</tt><tt id="link-463" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-463', 'root', 'link-304');">root</a></tt><tt class="py-op">.</tt><tt id="link-464" class="py-name"><a title="lxml.etree._Element.iter
+lxml.etree._ElementTree.iter" class="py-name" href="#" onclick="return doclink('link-464', 'iter', 'link-396');">iter</a></tt><tt class="py-op">(</tt><tt class="py-string">'p'</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L413"></a><tt class="py-lineno">413</tt>  <tt class="py-line"> </tt>
+<a name="HtmlParserTestCase.test_html_parser_target_tag"></a><div id="HtmlParserTestCase.test_html_parser_target_tag-def"><a name="L414"></a><tt class="py-lineno">414</tt> <a class="py-toggle" href="#" id="HtmlParserTestCase.test_html_parser_target_tag-toggle" onclick="return toggle('HtmlParserTestCase.test_html_parser_target_tag');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_tag">test_html_parser_target_tag</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HtmlParserTestCase.test_html_parser_target_tag-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HtmlParserTestCase.test_html_parser_target_tag-expanded"><a name="L415"></a><tt class="py-lineno">415</tt>  <tt class="py-line">        <tt id="link-465" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-465', 'assertFalse', 'link-367');">assertFalse</a></tt>  <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-466" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-466', 'assertFalse', 'link-367');">assertFalse</a></tt> </tt>
+<a name="L416"></a><tt class="py-lineno">416</tt>  <tt class="py-line">        <tt class="py-name">events</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L417"></a><tt class="py-lineno">417</tt>  <tt class="py-line">        <tt class="py-keyword">class</tt> <tt class="py-def-name">Target</tt><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L418"></a><tt class="py-lineno">418</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">start</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attrib</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L419"></a><tt class="py-lineno">419</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-467" class="py-name" targets="Method lxml.etree._Element.append()=lxml.etree._Element-class.html#append"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-467', 'append', 'link-467');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt id="link-468" class="py-name"><a title="lxml.etree._Comment.tag
+lxml.etree._Element.tag
+lxml.etree._Entity.tag
+lxml.etree._ProcessingInstruction.tag
+lxml.tests.test_xpathevaluator.tag
+xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-468', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L420"></a><tt class="py-lineno">420</tt>  <tt class="py-line">                <tt id="link-469" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-469', 'assertFalse', 'link-367');">assertFalse</a></tt><tt class="py-op">(</tt><tt id="link-470" class="py-name" targets="Variable lxml.etree._Element.attrib=lxml.etree._Element-class.html#attrib,Variable lxml.etree._ProcessingInstruction.attrib=lxml.etree._ProcessingInstruction-class.html#attrib,Variable xml.etree.ElementTree.Element.attrib=xml.etree.ElementTree.Element-class.html#attrib"><a title="lxml.etree._Element.attrib
 lxml.etree._ProcessingInstruction.attrib
-xml.etree.ElementTree.Element.attrib" class="py-name" href="#" onclick="return doclink('link-386', 'attrib', 'link-386');">attrib</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L377"></a><tt class="py-lineno">377</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">end</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L378"></a><tt class="py-lineno">378</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-387" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-387', 'append', 'link-383');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt id="link-388" class="py-name"><a title="lxml.etree._Comment.tag
+xml.etree.ElementTree.Element.attrib" class="py-name" href="#" onclick="return doclink('link-470', 'attrib', 'link-470');">attrib</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L421"></a><tt class="py-lineno">421</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">end</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L422"></a><tt class="py-lineno">422</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-471" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-471', 'append', 'link-467');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt id="link-472" class="py-name"><a title="lxml.etree._Comment.tag
 lxml.etree._Element.tag
 lxml.etree._Entity.tag
 lxml.etree._ProcessingInstruction.tag
 lxml.tests.test_xpathevaluator.tag
-xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-388', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L379"></a><tt class="py-lineno">379</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">close</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L380"></a><tt class="py-lineno">380</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-string">"DONE"</tt> </tt>
-</div></div><a name="L381"></a><tt class="py-lineno">381</tt>  <tt class="py-line"> </tt>
-<a name="L382"></a><tt class="py-lineno">382</tt>  <tt class="py-line">        <tt id="link-389" class="py-name"><a title="lxml.etree._ElementTree.parser
-lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-389', 'parser', 'link-62');">parser</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-390" class="py-name"><a title="lxml.etree
+xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-472', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L423"></a><tt class="py-lineno">423</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">close</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L424"></a><tt class="py-lineno">424</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-string">"DONE"</tt> </tt>
+</div></div><a name="L425"></a><tt class="py-lineno">425</tt>  <tt class="py-line"> </tt>
+<a name="L426"></a><tt class="py-lineno">426</tt>  <tt class="py-line">        <tt id="link-473" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-473', 'parser', 'link-62');">parser</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-474" class="py-name"><a title="lxml.etree
 lxml.sax.ElementTreeContentHandler.etree
 lxml.tests.test_elementtree.CElementTreeTestCase.etree
 lxml.tests.test_elementtree._ETreeTestCaseBase.etree
 lxml.tests.test_elementtree._XMLPullParserTest.etree
-lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-390', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-391" class="py-name"><a title="lxml.etree.HTMLParser
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-474', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-475" class="py-name"><a title="lxml.etree.HTMLParser
 lxml.html.HTMLParser
-lxml.html.html5parser.HTMLParser" class="py-name" href="#" onclick="return doclink('link-391', 'HTMLParser', 'link-64');">HTMLParser</a></tt><tt class="py-op">(</tt><tt id="link-392" class="py-name" targets="Variable lxml.etree._ProcessingInstruction.target=lxml.etree._ProcessingInstruction-class.html#target"><a title="lxml.etree._ProcessingInstruction.target" class="py-name" href="#" onclick="return doclink('link-392', 'target', 'link-392');">target</a></tt><tt class="py-op">=</tt><tt class="py-name">Target</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L383"></a><tt class="py-lineno">383</tt>  <tt class="py-line"> </tt>
-<a name="L384"></a><tt class="py-lineno">384</tt>  <tt class="py-line">        <tt id="link-393" class="py-name"><a title="lxml.etree._ElementTree.parser
-lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-393', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-394" class="py-name" targets="Method lxml.etree._FeedParser.feed()=lxml.etree._FeedParser-class.html#feed"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-394', 'feed', 'link-394');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;"</tt><tt class="py-op">)</tt> </tt>
-<a name="L385"></a><tt class="py-lineno">385</tt>  <tt class="py-line">        <tt class="py-name">done</tt> <tt class="py-op">=</tt> <tt id="link-395" class="py-name"><a title="lxml.etree._ElementTree.parser
-lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-395', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-396" class="py-name"><a title="lxml.etree.TreeBuilder.close
-lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-396', 'close', 'link-243');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L386"></a><tt class="py-lineno">386</tt>  <tt class="py-line"> </tt>
-<a name="L387"></a><tt class="py-lineno">387</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-string">"DONE"</tt><tt class="py-op">,</tt> <tt class="py-name">done</tt><tt class="py-op">)</tt> </tt>
-<a name="L388"></a><tt class="py-lineno">388</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt> </tt>
-<a name="L389"></a><tt class="py-lineno">389</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L390"></a><tt class="py-lineno">390</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">events</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L391"></a><tt class="py-lineno">391</tt>  <tt class="py-line"> </tt>
-<a name="HtmlParserTestCase.test_html_parser_target_doctype_empty"></a><div id="HtmlParserTestCase.test_html_parser_target_doctype_empty-def"><a name="L392"></a><tt class="py-lineno">392</tt> <a class="py-toggle" href="#" id="HtmlParserTestCase.test_html_parser_target_doctype_empty-toggle" onclick="return toggle('HtmlParserTestCase.test_html_parser_target_doctype_empty');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_doctype_empty">test_html_parser_target_doctype_empty</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HtmlParserTestCase.test_html_parser_target_doctype_empty-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HtmlParserTestCase.test_html_parser_target_doctype_empty-expanded"><a name="L393"></a><tt class="py-lineno">393</tt>  <tt class="py-line">        <tt id="link-397" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-397', 'assertFalse', 'link-381');">assertFalse</a></tt>  <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-398" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-398', 'assertFalse', 'link-381');">assertFalse</a></tt> </tt>
-<a name="L394"></a><tt class="py-lineno">394</tt>  <tt class="py-line">        <tt class="py-name">events</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L395"></a><tt class="py-lineno">395</tt>  <tt class="py-line">        <tt class="py-keyword">class</tt> <tt class="py-def-name">Target</tt><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L396"></a><tt class="py-lineno">396</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">start</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attrib</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L397"></a><tt class="py-lineno">397</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-399" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-399', 'append', 'link-383');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt id="link-400" class="py-name"><a title="lxml.etree._Comment.tag
+lxml.html.html5parser.HTMLParser" class="py-name" href="#" onclick="return doclink('link-475', 'HTMLParser', 'link-64');">HTMLParser</a></tt><tt class="py-op">(</tt><tt id="link-476" class="py-name" targets="Variable lxml.etree._ProcessingInstruction.target=lxml.etree._ProcessingInstruction-class.html#target"><a title="lxml.etree._ProcessingInstruction.target" class="py-name" href="#" onclick="return doclink('link-476', 'target', 'link-476');">target</a></tt><tt class="py-op">=</tt><tt class="py-name">Target</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L427"></a><tt class="py-lineno">427</tt>  <tt class="py-line"> </tt>
+<a name="L428"></a><tt class="py-lineno">428</tt>  <tt class="py-line">        <tt id="link-477" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-477', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-478" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-478', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;"</tt><tt class="py-op">)</tt> </tt>
+<a name="L429"></a><tt class="py-lineno">429</tt>  <tt class="py-line">        <tt class="py-name">done</tt> <tt class="py-op">=</tt> <tt id="link-479" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-479', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-480" class="py-name"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-480', 'close', 'link-243');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L430"></a><tt class="py-lineno">430</tt>  <tt class="py-line"> </tt>
+<a name="L431"></a><tt class="py-lineno">431</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-string">"DONE"</tt><tt class="py-op">,</tt> <tt class="py-name">done</tt><tt class="py-op">)</tt> </tt>
+<a name="L432"></a><tt class="py-lineno">432</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt> </tt>
+<a name="L433"></a><tt class="py-lineno">433</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L434"></a><tt class="py-lineno">434</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">events</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L435"></a><tt class="py-lineno">435</tt>  <tt class="py-line"> </tt>
+<a name="HtmlParserTestCase.test_html_parser_target_doctype_empty"></a><div id="HtmlParserTestCase.test_html_parser_target_doctype_empty-def"><a name="L436"></a><tt class="py-lineno">436</tt> <a class="py-toggle" href="#" id="HtmlParserTestCase.test_html_parser_target_doctype_empty-toggle" onclick="return toggle('HtmlParserTestCase.test_html_parser_target_doctype_empty');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_doctype_empty">test_html_parser_target_doctype_empty</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HtmlParserTestCase.test_html_parser_target_doctype_empty-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HtmlParserTestCase.test_html_parser_target_doctype_empty-expanded"><a name="L437"></a><tt class="py-lineno">437</tt>  <tt class="py-line">        <tt id="link-481" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-481', 'assertFalse', 'link-367');">assertFalse</a></tt>  <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-482" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-482', 'assertFalse', 'link-367');">assertFalse</a></tt> </tt>
+<a name="L438"></a><tt class="py-lineno">438</tt>  <tt class="py-line">        <tt class="py-name">events</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L439"></a><tt class="py-lineno">439</tt>  <tt class="py-line">        <tt class="py-keyword">class</tt> <tt class="py-def-name">Target</tt><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L440"></a><tt class="py-lineno">440</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">start</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attrib</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L441"></a><tt class="py-lineno">441</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-483" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-483', 'append', 'link-467');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt id="link-484" class="py-name"><a title="lxml.etree._Comment.tag
 lxml.etree._Element.tag
 lxml.etree._Entity.tag
 lxml.etree._ProcessingInstruction.tag
 lxml.tests.test_xpathevaluator.tag
-xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-400', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L398"></a><tt class="py-lineno">398</tt>  <tt class="py-line">                <tt id="link-401" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-401', 'assertFalse', 'link-381');">assertFalse</a></tt><tt class="py-op">(</tt><tt id="link-402" class="py-name"><a title="lxml.etree._Element.attrib
+xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-484', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L442"></a><tt class="py-lineno">442</tt>  <tt class="py-line">                <tt id="link-485" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-485', 'assertFalse', 'link-367');">assertFalse</a></tt><tt class="py-op">(</tt><tt id="link-486" class="py-name"><a title="lxml.etree._Element.attrib
 lxml.etree._ProcessingInstruction.attrib
-xml.etree.ElementTree.Element.attrib" class="py-name" href="#" onclick="return doclink('link-402', 'attrib', 'link-386');">attrib</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L399"></a><tt class="py-lineno">399</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">end</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L400"></a><tt class="py-lineno">400</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-403" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-403', 'append', 'link-383');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt id="link-404" class="py-name"><a title="lxml.etree._Comment.tag
+xml.etree.ElementTree.Element.attrib" class="py-name" href="#" onclick="return doclink('link-486', 'attrib', 'link-470');">attrib</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L443"></a><tt class="py-lineno">443</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">end</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L444"></a><tt class="py-lineno">444</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-487" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-487', 'append', 'link-467');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt id="link-488" class="py-name"><a title="lxml.etree._Comment.tag
 lxml.etree._Element.tag
 lxml.etree._Entity.tag
 lxml.etree._ProcessingInstruction.tag
 lxml.tests.test_xpathevaluator.tag
-xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-404', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L401"></a><tt class="py-lineno">401</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">doctype</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L402"></a><tt class="py-lineno">402</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-405" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-405', 'append', 'link-383');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"doctype"</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L403"></a><tt class="py-lineno">403</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">close</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L404"></a><tt class="py-lineno">404</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-string">"DONE"</tt> </tt>
-</div></div><a name="L405"></a><tt class="py-lineno">405</tt>  <tt class="py-line"> </tt>
-<a name="L406"></a><tt class="py-lineno">406</tt>  <tt class="py-line">        <tt id="link-406" class="py-name"><a title="lxml.etree._ElementTree.parser
-lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-406', 'parser', 'link-62');">parser</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-407" class="py-name"><a title="lxml.etree
+xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-488', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L445"></a><tt class="py-lineno">445</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">doctype</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L446"></a><tt class="py-lineno">446</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-489" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-489', 'append', 'link-467');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"doctype"</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L447"></a><tt class="py-lineno">447</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">close</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L448"></a><tt class="py-lineno">448</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-string">"DONE"</tt> </tt>
+</div></div><a name="L449"></a><tt class="py-lineno">449</tt>  <tt class="py-line"> </tt>
+<a name="L450"></a><tt class="py-lineno">450</tt>  <tt class="py-line">        <tt id="link-490" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-490', 'parser', 'link-62');">parser</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-491" class="py-name"><a title="lxml.etree
 lxml.sax.ElementTreeContentHandler.etree
 lxml.tests.test_elementtree.CElementTreeTestCase.etree
 lxml.tests.test_elementtree._ETreeTestCaseBase.etree
 lxml.tests.test_elementtree._XMLPullParserTest.etree
-lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-407', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-408" class="py-name"><a title="lxml.etree.HTMLParser
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-491', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-492" class="py-name"><a title="lxml.etree.HTMLParser
 lxml.html.HTMLParser
-lxml.html.html5parser.HTMLParser" class="py-name" href="#" onclick="return doclink('link-408', 'HTMLParser', 'link-64');">HTMLParser</a></tt><tt class="py-op">(</tt><tt id="link-409" class="py-name"><a title="lxml.etree._ProcessingInstruction.target" class="py-name" href="#" onclick="return doclink('link-409', 'target', 'link-392');">target</a></tt><tt class="py-op">=</tt><tt class="py-name">Target</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L407"></a><tt class="py-lineno">407</tt>  <tt class="py-line">        <tt id="link-410" class="py-name"><a title="lxml.etree._ElementTree.parser
-lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-410', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-411" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-411', 'feed', 'link-394');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"&lt;!DOCTYPE&gt;&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;"</tt><tt class="py-op">)</tt> </tt>
-<a name="L408"></a><tt class="py-lineno">408</tt>  <tt class="py-line">        <tt class="py-name">done</tt> <tt class="py-op">=</tt> <tt id="link-412" class="py-name"><a title="lxml.etree._ElementTree.parser
-lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-412', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-413" class="py-name"><a title="lxml.etree.TreeBuilder.close
-lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-413', 'close', 'link-243');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L409"></a><tt class="py-lineno">409</tt>  <tt class="py-line"> </tt>
-<a name="L410"></a><tt class="py-lineno">410</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-string">"DONE"</tt><tt class="py-op">,</tt> <tt class="py-name">done</tt><tt class="py-op">)</tt> </tt>
-<a name="L411"></a><tt class="py-lineno">411</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt> </tt>
-<a name="L412"></a><tt class="py-lineno">412</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"doctype"</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L413"></a><tt class="py-lineno">413</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L414"></a><tt class="py-lineno">414</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">events</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L415"></a><tt class="py-lineno">415</tt>  <tt class="py-line"> </tt>
-<a name="HtmlParserTestCase.test_html_parser_target_doctype_html"></a><div id="HtmlParserTestCase.test_html_parser_target_doctype_html-def"><a name="L416"></a><tt class="py-lineno">416</tt> <a class="py-toggle" href="#" id="HtmlParserTestCase.test_html_parser_target_doctype_html-toggle" onclick="return toggle('HtmlParserTestCase.test_html_parser_target_doctype_html');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_doctype_html">test_html_parser_target_doctype_html</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HtmlParserTestCase.test_html_parser_target_doctype_html-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HtmlParserTestCase.test_html_parser_target_doctype_html-expanded"><a name="L417"></a><tt class="py-lineno">417</tt>  <tt class="py-line">        <tt id="link-414" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-414', 'assertFalse', 'link-381');">assertFalse</a></tt>  <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-415" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-415', 'assertFalse', 'link-381');">assertFalse</a></tt> </tt>
-<a name="L418"></a><tt class="py-lineno">418</tt>  <tt class="py-line">        <tt class="py-name">events</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L419"></a><tt class="py-lineno">419</tt>  <tt class="py-line">        <tt class="py-keyword">class</tt> <tt class="py-def-name">Target</tt><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L420"></a><tt class="py-lineno">420</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">start</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attrib</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L421"></a><tt class="py-lineno">421</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-416" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-416', 'append', 'link-383');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt id="link-417" class="py-name"><a title="lxml.etree._Comment.tag
+lxml.html.html5parser.HTMLParser" class="py-name" href="#" onclick="return doclink('link-492', 'HTMLParser', 'link-64');">HTMLParser</a></tt><tt class="py-op">(</tt><tt id="link-493" class="py-name"><a title="lxml.etree._ProcessingInstruction.target" class="py-name" href="#" onclick="return doclink('link-493', 'target', 'link-476');">target</a></tt><tt class="py-op">=</tt><tt class="py-name">Target</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L451"></a><tt class="py-lineno">451</tt>  <tt class="py-line">        <tt id="link-494" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-494', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-495" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-495', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"&lt;!DOCTYPE&gt;&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;"</tt><tt class="py-op">)</tt> </tt>
+<a name="L452"></a><tt class="py-lineno">452</tt>  <tt class="py-line">        <tt class="py-name">done</tt> <tt class="py-op">=</tt> <tt id="link-496" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-496', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-497" class="py-name"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-497', 'close', 'link-243');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L453"></a><tt class="py-lineno">453</tt>  <tt class="py-line"> </tt>
+<a name="L454"></a><tt class="py-lineno">454</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-string">"DONE"</tt><tt class="py-op">,</tt> <tt class="py-name">done</tt><tt class="py-op">)</tt> </tt>
+<a name="L455"></a><tt class="py-lineno">455</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt> </tt>
+<a name="L456"></a><tt class="py-lineno">456</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"doctype"</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L457"></a><tt class="py-lineno">457</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L458"></a><tt class="py-lineno">458</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">events</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L459"></a><tt class="py-lineno">459</tt>  <tt class="py-line"> </tt>
+<a name="HtmlParserTestCase.test_html_parser_target_doctype_html"></a><div id="HtmlParserTestCase.test_html_parser_target_doctype_html-def"><a name="L460"></a><tt class="py-lineno">460</tt> <a class="py-toggle" href="#" id="HtmlParserTestCase.test_html_parser_target_doctype_html-toggle" onclick="return toggle('HtmlParserTestCase.test_html_parser_target_doctype_html');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_doctype_html">test_html_parser_target_doctype_html</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HtmlParserTestCase.test_html_parser_target_doctype_html-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HtmlParserTestCase.test_html_parser_target_doctype_html-expanded"><a name="L461"></a><tt class="py-lineno">461</tt>  <tt class="py-line">        <tt id="link-498" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-498', 'assertFalse', 'link-367');">assertFalse</a></tt>  <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-499" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-499', 'assertFalse', 'link-367');">assertFalse</a></tt> </tt>
+<a name="L462"></a><tt class="py-lineno">462</tt>  <tt class="py-line">        <tt class="py-name">events</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L463"></a><tt class="py-lineno">463</tt>  <tt class="py-line">        <tt class="py-keyword">class</tt> <tt class="py-def-name">Target</tt><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L464"></a><tt class="py-lineno">464</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">start</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attrib</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L465"></a><tt class="py-lineno">465</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-500" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-500', 'append', 'link-467');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt id="link-501" class="py-name"><a title="lxml.etree._Comment.tag
 lxml.etree._Element.tag
 lxml.etree._Entity.tag
 lxml.etree._ProcessingInstruction.tag
 lxml.tests.test_xpathevaluator.tag
-xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-417', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L422"></a><tt class="py-lineno">422</tt>  <tt class="py-line">                <tt id="link-418" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-418', 'assertFalse', 'link-381');">assertFalse</a></tt><tt class="py-op">(</tt><tt id="link-419" class="py-name"><a title="lxml.etree._Element.attrib
+xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-501', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L466"></a><tt class="py-lineno">466</tt>  <tt class="py-line">                <tt id="link-502" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-502', 'assertFalse', 'link-367');">assertFalse</a></tt><tt class="py-op">(</tt><tt id="link-503" class="py-name"><a title="lxml.etree._Element.attrib
 lxml.etree._ProcessingInstruction.attrib
-xml.etree.ElementTree.Element.attrib" class="py-name" href="#" onclick="return doclink('link-419', 'attrib', 'link-386');">attrib</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L423"></a><tt class="py-lineno">423</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">end</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L424"></a><tt class="py-lineno">424</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-420" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-420', 'append', 'link-383');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt id="link-421" class="py-name"><a title="lxml.etree._Comment.tag
+xml.etree.ElementTree.Element.attrib" class="py-name" href="#" onclick="return doclink('link-503', 'attrib', 'link-470');">attrib</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L467"></a><tt class="py-lineno">467</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">end</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L468"></a><tt class="py-lineno">468</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-504" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-504', 'append', 'link-467');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt id="link-505" class="py-name"><a title="lxml.etree._Comment.tag
 lxml.etree._Element.tag
 lxml.etree._Entity.tag
 lxml.etree._ProcessingInstruction.tag
 lxml.tests.test_xpathevaluator.tag
-xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-421', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L425"></a><tt class="py-lineno">425</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">doctype</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L426"></a><tt class="py-lineno">426</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-422" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-422', 'append', 'link-383');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"doctype"</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L427"></a><tt class="py-lineno">427</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">close</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L428"></a><tt class="py-lineno">428</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-string">"DONE"</tt> </tt>
-</div></div><a name="L429"></a><tt class="py-lineno">429</tt>  <tt class="py-line"> </tt>
-<a name="L430"></a><tt class="py-lineno">430</tt>  <tt class="py-line">        <tt id="link-423" class="py-name"><a title="lxml.etree._ElementTree.parser
-lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-423', 'parser', 'link-62');">parser</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-424" class="py-name"><a title="lxml.etree
+xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-505', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L469"></a><tt class="py-lineno">469</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">doctype</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L470"></a><tt class="py-lineno">470</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-506" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-506', 'append', 'link-467');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"doctype"</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L471"></a><tt class="py-lineno">471</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">close</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L472"></a><tt class="py-lineno">472</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-string">"DONE"</tt> </tt>
+</div></div><a name="L473"></a><tt class="py-lineno">473</tt>  <tt class="py-line"> </tt>
+<a name="L474"></a><tt class="py-lineno">474</tt>  <tt class="py-line">        <tt id="link-507" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-507', 'parser', 'link-62');">parser</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-508" class="py-name"><a title="lxml.etree
 lxml.sax.ElementTreeContentHandler.etree
 lxml.tests.test_elementtree.CElementTreeTestCase.etree
 lxml.tests.test_elementtree._ETreeTestCaseBase.etree
 lxml.tests.test_elementtree._XMLPullParserTest.etree
-lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-424', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-425" class="py-name"><a title="lxml.etree.HTMLParser
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-508', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-509" class="py-name"><a title="lxml.etree.HTMLParser
 lxml.html.HTMLParser
-lxml.html.html5parser.HTMLParser" class="py-name" href="#" onclick="return doclink('link-425', 'HTMLParser', 'link-64');">HTMLParser</a></tt><tt class="py-op">(</tt><tt id="link-426" class="py-name"><a title="lxml.etree._ProcessingInstruction.target" class="py-name" href="#" onclick="return doclink('link-426', 'target', 'link-392');">target</a></tt><tt class="py-op">=</tt><tt class="py-name">Target</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L431"></a><tt class="py-lineno">431</tt>  <tt class="py-line">        <tt id="link-427" class="py-name"><a title="lxml.etree._ElementTree.parser
-lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-427', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-428" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-428', 'feed', 'link-394');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;"</tt><tt class="py-op">)</tt> </tt>
-<a name="L432"></a><tt class="py-lineno">432</tt>  <tt class="py-line">        <tt class="py-name">done</tt> <tt class="py-op">=</tt> <tt id="link-429" class="py-name"><a title="lxml.etree._ElementTree.parser
-lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-429', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-430" class="py-name"><a title="lxml.etree.TreeBuilder.close
-lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-430', 'close', 'link-243');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L433"></a><tt class="py-lineno">433</tt>  <tt class="py-line"> </tt>
-<a name="L434"></a><tt class="py-lineno">434</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-string">"DONE"</tt><tt class="py-op">,</tt> <tt class="py-name">done</tt><tt class="py-op">)</tt> </tt>
-<a name="L435"></a><tt class="py-lineno">435</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt> </tt>
-<a name="L436"></a><tt class="py-lineno">436</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"doctype"</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"html"</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L437"></a><tt class="py-lineno">437</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L438"></a><tt class="py-lineno">438</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">events</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L439"></a><tt class="py-lineno">439</tt>  <tt class="py-line"> </tt>
-<a name="HtmlParserTestCase.test_html_parser_target_doctype_html_full"></a><div id="HtmlParserTestCase.test_html_parser_target_doctype_html_full-def"><a name="L440"></a><tt class="py-lineno">440</tt> <a class="py-toggle" href="#" id="HtmlParserTestCase.test_html_parser_target_doctype_html_full-toggle" onclick="return toggle('HtmlParserTestCase.test_html_parser_target_doctype_html_full');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_doctype_html_full">test_html_parser_target_doctype_html_full</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="HtmlParserTestCase.test_html_parser_target_doctype_html_full-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HtmlParserTestCase.test_html_parser_target_doctype_html_full-expanded"><a name="L441"></a><tt class="py-lineno">441</tt>  <tt class="py-line">        <tt id="link-431" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-431', 'assertFalse', 'link-381');">assertFalse</a></tt>  <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-432" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-432', 'assertFalse', 'link-381');">assertFalse</a></tt> </tt>
-<a name="L442"></a><tt class="py-lineno">442</tt>  <tt class="py-line">        <tt class="py-name">events</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
-<a name="L443"></a><tt class="py-lineno">443</tt>  <tt class="py-line">        <tt class="py-keyword">class</tt> <tt class="py-def-name">Target</tt><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L444"></a><tt class="py-lineno">444</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">start</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attrib</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L445"></a><tt class="py-lineno">445</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-433" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-433', 'append', 'link-383');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt id="link-434" class="py-name"><a title="lxml.etree._Comment.tag
+lxml.html.html5parser.HTMLParser" class="py-name" href="#" onclick="return doclink('link-509', 'HTMLParser', 'link-64');">HTMLParser</a></tt><tt class="py-op">(</tt><tt id="link-510" class="py-name"><a title="lxml.etree._ProcessingInstruction.target" class="py-name" href="#" onclick="return doclink('link-510', 'target', 'link-476');">target</a></tt><tt class="py-op">=</tt><tt class="py-name">Target</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L475"></a><tt class="py-lineno">475</tt>  <tt class="py-line">        <tt id="link-511" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-511', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-512" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-512', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">"&lt;!DOCTYPE html&gt;&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;"</tt><tt class="py-op">)</tt> </tt>
+<a name="L476"></a><tt class="py-lineno">476</tt>  <tt class="py-line">        <tt class="py-name">done</tt> <tt class="py-op">=</tt> <tt id="link-513" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-513', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-514" class="py-name"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-514', 'close', 'link-243');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L477"></a><tt class="py-lineno">477</tt>  <tt class="py-line"> </tt>
+<a name="L478"></a><tt class="py-lineno">478</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-string">"DONE"</tt><tt class="py-op">,</tt> <tt class="py-name">done</tt><tt class="py-op">)</tt> </tt>
+<a name="L479"></a><tt class="py-lineno">479</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt> </tt>
+<a name="L480"></a><tt class="py-lineno">480</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"doctype"</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"html"</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L481"></a><tt class="py-lineno">481</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L482"></a><tt class="py-lineno">482</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">events</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L483"></a><tt class="py-lineno">483</tt>  <tt class="py-line"> </tt>
+<a name="HtmlParserTestCase.test_html_parser_target_doctype_html_full"></a><div id="HtmlParserTestCase.test_html_parser_target_doctype_html_full-def"><a name="L484"></a><tt class="py-lineno">484</tt> <a class="py-toggle" href="#" id="HtmlParserTestCase.test_html_parser_target_doctype_html_full-toggle" onclick="return toggle('HtmlParserTestCase.test_html_parser_target_doctype_html_full');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html#test_html_parser_target_doctype_html_full">test_html_parser_target_doctype_html_full</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="HtmlParserTestCase.test_html_parser_target_doctype_html_full-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="HtmlParserTestCase.test_html_parser_target_doctype_html_full-expanded"><a name="L485"></a><tt class="py-lineno">485</tt>  <tt class="py-line">        <tt id="link-515" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-515', 'assertFalse', 'link-367');">assertFalse</a></tt>  <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-516" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-516', 'assertFalse', 'link-367');">assertFalse</a></tt> </tt>
+<a name="L486"></a><tt class="py-lineno">486</tt>  <tt class="py-line">        <tt class="py-name">events</tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-op">]</tt> </tt>
+<a name="L487"></a><tt class="py-lineno">487</tt>  <tt class="py-line">        <tt class="py-keyword">class</tt> <tt class="py-def-name">Target</tt><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L488"></a><tt class="py-lineno">488</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">start</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">,</tt> <tt class="py-param">attrib</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L489"></a><tt class="py-lineno">489</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-517" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-517', 'append', 'link-467');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt id="link-518" class="py-name"><a title="lxml.etree._Comment.tag
 lxml.etree._Element.tag
 lxml.etree._Entity.tag
 lxml.etree._ProcessingInstruction.tag
 lxml.tests.test_xpathevaluator.tag
-xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-434', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L446"></a><tt class="py-lineno">446</tt>  <tt class="py-line">                <tt id="link-435" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-435', 'assertFalse', 'link-381');">assertFalse</a></tt><tt class="py-op">(</tt><tt id="link-436" class="py-name"><a title="lxml.etree._Element.attrib
+xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-518', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L490"></a><tt class="py-lineno">490</tt>  <tt class="py-line">                <tt id="link-519" class="py-name"><a title="lxml.tests.common_imports.HelperTestCase.assertFalse" class="py-name" href="#" onclick="return doclink('link-519', 'assertFalse', 'link-367');">assertFalse</a></tt><tt class="py-op">(</tt><tt id="link-520" class="py-name"><a title="lxml.etree._Element.attrib
 lxml.etree._ProcessingInstruction.attrib
-xml.etree.ElementTree.Element.attrib" class="py-name" href="#" onclick="return doclink('link-436', 'attrib', 'link-386');">attrib</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L447"></a><tt class="py-lineno">447</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">end</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L448"></a><tt class="py-lineno">448</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-437" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-437', 'append', 'link-383');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt id="link-438" class="py-name"><a title="lxml.etree._Comment.tag
+xml.etree.ElementTree.Element.attrib" class="py-name" href="#" onclick="return doclink('link-520', 'attrib', 'link-470');">attrib</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L491"></a><tt class="py-lineno">491</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">end</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">tag</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L492"></a><tt class="py-lineno">492</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-521" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-521', 'append', 'link-467');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt id="link-522" class="py-name"><a title="lxml.etree._Comment.tag
 lxml.etree._Element.tag
 lxml.etree._Entity.tag
 lxml.etree._ProcessingInstruction.tag
 lxml.tests.test_xpathevaluator.tag
-xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-438', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L449"></a><tt class="py-lineno">449</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">doctype</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L450"></a><tt class="py-lineno">450</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-439" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-439', 'append', 'link-383');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"doctype"</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L451"></a><tt class="py-lineno">451</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">close</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-<a name="L452"></a><tt class="py-lineno">452</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-string">"DONE"</tt> </tt>
-</div></div><a name="L453"></a><tt class="py-lineno">453</tt>  <tt class="py-line"> </tt>
-<a name="L454"></a><tt class="py-lineno">454</tt>  <tt class="py-line">        <tt id="link-440" class="py-name"><a title="lxml.etree._ElementTree.parser
-lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-440', 'parser', 'link-62');">parser</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-441" class="py-name"><a title="lxml.etree
+xml.etree.ElementTree.Element.tag" class="py-name" href="#" onclick="return doclink('link-522', 'tag', 'link-90');">tag</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L493"></a><tt class="py-lineno">493</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">doctype</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-op">*</tt><tt class="py-param">args</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L494"></a><tt class="py-lineno">494</tt>  <tt class="py-line">                <tt class="py-name">events</tt><tt class="py-op">.</tt><tt id="link-523" class="py-name"><a title="lxml.etree._Element.append" class="py-name" href="#" onclick="return doclink('link-523', 'append', 'link-467');">append</a></tt><tt class="py-op">(</tt><tt class="py-op">(</tt><tt class="py-string">"doctype"</tt><tt class="py-op">,</tt> <tt class="py-name">args</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L495"></a><tt class="py-lineno">495</tt>  <tt class="py-line">            <tt class="py-keyword">def</tt> <tt class="py-def-name">close</tt><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+<a name="L496"></a><tt class="py-lineno">496</tt>  <tt class="py-line">                <tt class="py-keyword">return</tt> <tt class="py-string">"DONE"</tt> </tt>
+</div></div><a name="L497"></a><tt class="py-lineno">497</tt>  <tt class="py-line"> </tt>
+<a name="L498"></a><tt class="py-lineno">498</tt>  <tt class="py-line">        <tt id="link-524" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-524', 'parser', 'link-62');">parser</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-525" class="py-name"><a title="lxml.etree
 lxml.sax.ElementTreeContentHandler.etree
 lxml.tests.test_elementtree.CElementTreeTestCase.etree
 lxml.tests.test_elementtree._ETreeTestCaseBase.etree
 lxml.tests.test_elementtree._XMLPullParserTest.etree
-lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-441', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-442" class="py-name"><a title="lxml.etree.HTMLParser
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-525', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-526" class="py-name"><a title="lxml.etree.HTMLParser
 lxml.html.HTMLParser
-lxml.html.html5parser.HTMLParser" class="py-name" href="#" onclick="return doclink('link-442', 'HTMLParser', 'link-64');">HTMLParser</a></tt><tt class="py-op">(</tt><tt id="link-443" class="py-name"><a title="lxml.etree._ProcessingInstruction.target" class="py-name" href="#" onclick="return doclink('link-443', 'target', 'link-392');">target</a></tt><tt class="py-op">=</tt><tt class="py-name">Target</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
-<a name="L455"></a><tt class="py-lineno">455</tt>  <tt class="py-line">        <tt id="link-444" class="py-name"><a title="lxml.etree._ElementTree.parser
-lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-444', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-445" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-445', 'feed', 'link-394');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">'&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "sys.dtd"&gt;'</tt> </tt>
-<a name="L456"></a><tt class="py-lineno">456</tt>  <tt class="py-line">                    <tt class="py-string">'&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;'</tt><tt class="py-op">)</tt> </tt>
-<a name="L457"></a><tt class="py-lineno">457</tt>  <tt class="py-line">        <tt class="py-name">done</tt> <tt class="py-op">=</tt> <tt id="link-446" class="py-name"><a title="lxml.etree._ElementTree.parser
-lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-446', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-447" class="py-name"><a title="lxml.etree.TreeBuilder.close
-lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-447', 'close', 'link-243');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L458"></a><tt class="py-lineno">458</tt>  <tt class="py-line"> </tt>
-<a name="L459"></a><tt class="py-lineno">459</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-string">"DONE"</tt><tt class="py-op">,</tt> <tt class="py-name">done</tt><tt class="py-op">)</tt> </tt>
-<a name="L460"></a><tt class="py-lineno">460</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt> </tt>
-<a name="L461"></a><tt class="py-lineno">461</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"doctype"</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"html"</tt><tt class="py-op">,</tt> <tt class="py-string">"-//W3C//DTD HTML 4.01//EN"</tt><tt class="py-op">,</tt> <tt class="py-string">"sys.dtd"</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L462"></a><tt class="py-lineno">462</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L463"></a><tt class="py-lineno">463</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">events</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L464"></a><tt class="py-lineno">464</tt>  <tt class="py-line"> </tt>
-<a name="L465"></a><tt class="py-lineno">465</tt>  <tt class="py-line"> </tt>
-<a name="test_suite"></a><div id="test_suite-def"><a name="L466"></a><tt class="py-lineno">466</tt> <a class="py-toggle" href="#" id="test_suite-toggle" onclick="return toggle('test_suite');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser-module.html#test_suite">test_suite</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="test_suite-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="test_suite-expanded"><a name="L467"></a><tt class="py-lineno">467</tt>  <tt class="py-line">    <tt class="py-name">suite</tt> <tt class="py-op">=</tt> <tt class="py-name">unittest</tt><tt class="py-op">.</tt><tt class="py-name">TestSuite</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L468"></a><tt class="py-lineno">468</tt>  <tt class="py-line">    <tt class="py-name">suite</tt><tt class="py-op">.</tt><tt class="py-name">addTests</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">unittest</tt><tt class="py-op">.</tt><tt class="py-name">makeSuite</tt><tt class="py-op">(</tt><tt id="link-448" class="py-name"><a title="lxml.tests.test_htmlparser.HtmlParserTestCase" class="py-name" href="#" onclick="return doclink('link-448', 'HtmlParserTestCase', 'link-29');">HtmlParserTestCase</a></tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L469"></a><tt class="py-lineno">469</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">suite</tt> </tt>
-</div><a name="L470"></a><tt class="py-lineno">470</tt>  <tt class="py-line"> </tt>
-<a name="L471"></a><tt class="py-lineno">471</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
-<a name="L472"></a><tt class="py-lineno">472</tt>  <tt class="py-line">    <tt class="py-keyword">print</tt><tt class="py-op">(</tt><tt class="py-string">'to test use test.py %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">__file__</tt><tt class="py-op">)</tt> </tt>
-<a name="L473"></a><tt class="py-lineno">473</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+lxml.html.html5parser.HTMLParser" class="py-name" href="#" onclick="return doclink('link-526', 'HTMLParser', 'link-64');">HTMLParser</a></tt><tt class="py-op">(</tt><tt id="link-527" class="py-name"><a title="lxml.etree._ProcessingInstruction.target" class="py-name" href="#" onclick="return doclink('link-527', 'target', 'link-476');">target</a></tt><tt class="py-op">=</tt><tt class="py-name">Target</tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L499"></a><tt class="py-lineno">499</tt>  <tt class="py-line">        <tt id="link-528" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-528', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-529" class="py-name"><a title="lxml.etree._FeedParser.feed" class="py-name" href="#" onclick="return doclink('link-529', 'feed', 'link-386');">feed</a></tt><tt class="py-op">(</tt><tt class="py-string">'&lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "sys.dtd"&gt;'</tt> </tt>
+<a name="L500"></a><tt class="py-lineno">500</tt>  <tt class="py-line">                    <tt class="py-string">'&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;'</tt><tt class="py-op">)</tt> </tt>
+<a name="L501"></a><tt class="py-lineno">501</tt>  <tt class="py-line">        <tt class="py-name">done</tt> <tt class="py-op">=</tt> <tt id="link-530" class="py-name"><a title="lxml.etree._ElementTree.parser
+lxml.tests.test_pyclasslookup.PyClassLookupTestCase.parser" class="py-name" href="#" onclick="return doclink('link-530', 'parser', 'link-62');">parser</a></tt><tt class="py-op">.</tt><tt id="link-531" class="py-name"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-531', 'close', 'link-243');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L502"></a><tt class="py-lineno">502</tt>  <tt class="py-line"> </tt>
+<a name="L503"></a><tt class="py-lineno">503</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-string">"DONE"</tt><tt class="py-op">,</tt> <tt class="py-name">done</tt><tt class="py-op">)</tt> </tt>
+<a name="L504"></a><tt class="py-lineno">504</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-op">[</tt> </tt>
+<a name="L505"></a><tt class="py-lineno">505</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"doctype"</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"html"</tt><tt class="py-op">,</tt> <tt class="py-string">"-//W3C//DTD HTML 4.01//EN"</tt><tt class="py-op">,</tt> <tt class="py-string">"sys.dtd"</tt><tt class="py-op">)</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L506"></a><tt class="py-lineno">506</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"start"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L507"></a><tt class="py-lineno">507</tt>  <tt class="py-line">            <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"body"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-op">(</tt><tt class="py-string">"end"</tt><tt class="py-op">,</tt> <tt class="py-string">"html"</tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">,</tt> <tt class="py-name">events</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L508"></a><tt class="py-lineno">508</tt>  <tt class="py-line"> </tt>
+<a name="L509"></a><tt class="py-lineno">509</tt>  <tt class="py-line"> </tt>
+<a name="test_suite"></a><div id="test_suite-def"><a name="L510"></a><tt class="py-lineno">510</tt> <a class="py-toggle" href="#" id="test_suite-toggle" onclick="return toggle('test_suite');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_htmlparser-module.html#test_suite">test_suite</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="test_suite-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="test_suite-expanded"><a name="L511"></a><tt class="py-lineno">511</tt>  <tt class="py-line">    <tt class="py-name">suite</tt> <tt class="py-op">=</tt> <tt class="py-name">unittest</tt><tt class="py-op">.</tt><tt class="py-name">TestSuite</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L512"></a><tt class="py-lineno">512</tt>  <tt class="py-line">    <tt class="py-name">suite</tt><tt class="py-op">.</tt><tt class="py-name">addTests</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">unittest</tt><tt class="py-op">.</tt><tt class="py-name">makeSuite</tt><tt class="py-op">(</tt><tt id="link-532" class="py-name"><a title="lxml.tests.test_htmlparser.HtmlParserTestCase" class="py-name" href="#" onclick="return doclink('link-532', 'HtmlParserTestCase', 'link-29');">HtmlParserTestCase</a></tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L513"></a><tt class="py-lineno">513</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">suite</tt> </tt>
+</div><a name="L514"></a><tt class="py-lineno">514</tt>  <tt class="py-line"> </tt>
+<a name="L515"></a><tt class="py-lineno">515</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
+<a name="L516"></a><tt class="py-lineno">516</tt>  <tt class="py-line">    <tt class="py-keyword">print</tt><tt class="py-op">(</tt><tt class="py-string">'to test use test.py %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">__file__</tt><tt class="py-op">)</tt> </tt>
+<a name="L517"></a><tt class="py-lineno">517</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -1492,7 +1605,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 313c1b2..d6191da 100644 (file)
@@ -605,6 +605,54 @@ HTML parser test cases
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="test_html_feed_parser"></a><span class="summary-sig-name">test_html_feed_parser</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="lxml.tests.test_htmlparser-pysrc.html#HtmlParserTestCase.test_html_feed_parser">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="test_html_feed_parser_chunky"></a><span class="summary-sig-name">test_html_feed_parser_chunky</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="lxml.tests.test_htmlparser-pysrc.html#HtmlParserTestCase.test_html_feed_parser_chunky">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="test_html_feed_parser_more_tags"></a><span class="summary-sig-name">test_html_feed_parser_more_tags</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="lxml.tests.test_htmlparser-pysrc.html#HtmlParserTestCase.test_html_feed_parser_more_tags">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a name="test_html_parser_target_tag"></a><span class="summary-sig-name">test_html_parser_target_tag</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             <span class="codelink"><a href="lxml.tests.test_htmlparser-pysrc.html#HtmlParserTestCase.test_html_parser_target_tag">source&nbsp;code</a></span>
@@ -1068,7 +1116,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index cac74aa..b1435f0 100644 (file)
@@ -223,7 +223,7 @@ Web IO test cases that need Python 2.5+ (wsgiref)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 89faf7a..85b7e7f 100644 (file)
@@ -461,7 +461,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 23d4f09..2a43751 100644 (file)
@@ -468,7 +468,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d314bc3..4486ed7 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1c7242b..de3cec4 100644 (file)
@@ -613,7 +613,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f9f3c95..feee70e 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 00aa2f1..7af2db7 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2c2ec03..8ef673c 100644 (file)
@@ -225,7 +225,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c848394..9fa9358 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 339c953..80bc561 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index fa67241..a18fde2 100644 (file)
@@ -238,7 +238,7 @@ IO test cases that apply to both etree and ElementTree
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index df7ebc1..bd8bdb7 100644 (file)
@@ -790,139 +790,238 @@ lxml.objectify.parse
 lxml.tests.common_imports.HelperTestCase.parse" class="py-name" href="#" onclick="return doclink('link-228', 'parse', 'link-120');">parse</a></tt><tt class="py-op">,</tt> <tt class="py-name">os</tt><tt class="py-op">.</tt><tt id="link-229" class="py-name"><a title="lxml.etree.XPath.path" class="py-name" href="#" onclick="return doclink('link-229', 'path', 'link-0');">path</a></tt><tt class="py-op">.</tt><tt class="py-name">join</tt><tt class="py-op">(</tt><tt class="py-name">dn</tt><tt class="py-op">,</tt> <tt id="link-230" class="py-name"><a title="lxml.etree._LogEntry.filename" class="py-name" href="#" onclick="return doclink('link-230', 'filename', 'link-96');">filename</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
 <a name="L268"></a><tt class="py-lineno">268</tt>  <tt class="py-line">        <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
 <a name="L269"></a><tt class="py-lineno">269</tt>  <tt class="py-line">            <tt class="py-name">os</tt><tt class="py-op">.</tt><tt class="py-name">rmdir</tt><tt class="py-op">(</tt><tt class="py-name">dn</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line"> </tt>
-<a name="L271"></a><tt class="py-lineno">271</tt>  <tt class="py-line">     </tt>
-<a name="ETreeIOTestCase"></a><div id="ETreeIOTestCase-def"><a name="L272"></a><tt class="py-lineno">272</tt> <a class="py-toggle" href="#" id="ETreeIOTestCase-toggle" onclick="return toggle('ETreeIOTestCase');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="lxml.tests.test_io.ETreeIOTestCase-class.html">ETreeIOTestCase</a><tt class="py-op">(</tt><tt class="py-base-class">_IOTestCaseBase</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ETreeIOTestCase-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="ETreeIOTestCase-expanded"><a name="L273"></a><tt class="py-lineno">273</tt>  <tt class="py-line">    <tt id="link-231" class="py-name"><a title="lxml.etree
+</div><a name="L270"></a><tt class="py-lineno">270</tt>  <tt class="py-line"> </tt>
+<a name="_IOTestCaseBase.test_parse_utf8_bom"></a><div id="_IOTestCaseBase.test_parse_utf8_bom-def"><a name="L271"></a><tt class="py-lineno">271</tt> <a class="py-toggle" href="#" id="_IOTestCaseBase.test_parse_utf8_bom-toggle" onclick="return toggle('_IOTestCaseBase.test_parse_utf8_bom');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_io._IOTestCaseBase-class.html#test_parse_utf8_bom">test_parse_utf8_bom</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_IOTestCaseBase.test_parse_utf8_bom-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_IOTestCaseBase.test_parse_utf8_bom-expanded"><a name="L272"></a><tt class="py-lineno">272</tt>  <tt class="py-line">        <tt class="py-name">utext</tt> <tt class="py-op">=</tt> <tt id="link-231" class="py-name"><a title="lxml.tests.common_imports._str" class="py-name" href="#" onclick="return doclink('link-231', '_str', 'link-12');">_str</a></tt><tt class="py-op">(</tt><tt class="py-string">'S&#248;k p&#229; nettet'</tt><tt class="py-op">)</tt> </tt>
+<a name="L273"></a><tt class="py-lineno">273</tt>  <tt class="py-line">        <tt id="link-232" class="py-name" targets="Variable lxml.tests.test_unicode.uxml=lxml.tests.test_unicode-module.html#uxml"><a title="lxml.tests.test_unicode.uxml" class="py-name" href="#" onclick="return doclink('link-232', 'uxml', 'link-232');">uxml</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;p&gt;%s&lt;/p&gt;'</tt> <tt class="py-op">%</tt> <tt class="py-name">utext</tt> </tt>
+<a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line">        <tt class="py-name">bom</tt> <tt class="py-op">=</tt> <tt id="link-233" class="py-name"><a title="lxml.tests.common_imports._bytes" class="py-name" href="#" onclick="return doclink('link-233', '_bytes', 'link-13');">_bytes</a></tt><tt class="py-op">(</tt><tt class="py-string">'\\xEF\\xBB\\xBF'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt> </tt>
+<a name="L275"></a><tt class="py-lineno">275</tt>  <tt class="py-line">            <tt class="py-string">"unicode_escape"</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">"latin1"</tt><tt class="py-op">)</tt> </tt>
+<a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">bom</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L277"></a><tt class="py-lineno">277</tt>  <tt class="py-line">        <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">tempfile</tt><tt class="py-op">.</tt><tt class="py-name">NamedTemporaryFile</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L279"></a><tt class="py-lineno">279</tt>  <tt class="py-line">            <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-234" class="py-name"><a title="lxml.etree._ElementTree.write" class="py-name" href="#" onclick="return doclink('link-234', 'write', 'link-51');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">bom</tt><tt class="py-op">)</tt> </tt>
+<a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line">            <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-235" class="py-name"><a title="lxml.etree._ElementTree.write" class="py-name" href="#" onclick="return doclink('link-235', 'write', 'link-51');">write</a></tt><tt class="py-op">(</tt><tt id="link-236" class="py-name"><a title="lxml.tests.test_unicode.uxml" class="py-name" href="#" onclick="return doclink('link-236', 'uxml', 'link-232');">uxml</a></tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">"utf-8"</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L281"></a><tt class="py-lineno">281</tt>  <tt class="py-line">            <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">flush</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L282"></a><tt class="py-lineno">282</tt>  <tt class="py-line">            <tt class="py-name">tree</tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-237" class="py-name"><a title="lxml.etree
 lxml.sax.ElementTreeContentHandler.etree
 lxml.tests.test_elementtree.CElementTreeTestCase.etree
 lxml.tests.test_elementtree._ETreeTestCaseBase.etree
 lxml.tests.test_elementtree._XMLPullParserTest.etree
-lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-231', 'etree', 'link-9');">etree</a></tt> <tt class="py-op">=</tt> <tt id="link-232" class="py-name"><a title="lxml.etree
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-237', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-238" class="py-name"><a title="lxml.etree._ElementTree.parse
+lxml.etree.parse
+lxml.html.ElementSoup.parse
+lxml.html.html5parser.parse
+lxml.html.soupparser.parse
+lxml.objectify.parse
+lxml.tests.common_imports.HelperTestCase.parse" class="py-name" href="#" onclick="return doclink('link-238', 'parse', 'link-120');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-239" class="py-name"><a title="lxml.etree.DTD.name
+lxml.etree._Entity.name
+lxml.html.InputMixin.name
+lxml.objectify.PyType.name" class="py-name" href="#" onclick="return doclink('link-239', 'name', 'link-32');">name</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L283"></a><tt class="py-lineno">283</tt>  <tt class="py-line">        <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
+<a name="L284"></a><tt class="py-lineno">284</tt>  <tt class="py-line">            <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-240" class="py-name"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-240', 'close', 'link-53');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L285"></a><tt class="py-lineno">285</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-name">utext</tt><tt class="py-op">,</tt> <tt class="py-name">tree</tt><tt class="py-op">.</tt><tt id="link-241" class="py-name"><a title="lxml.etree._ElementTree.getroot" class="py-name" href="#" onclick="return doclink('link-241', 'getroot', 'link-124');">getroot</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-242" class="py-name"><a title="lxml.etree.QName.text
+lxml.etree._Element.text
+lxml.etree._Entity.text
+lxml.objectify.ObjectifiedElement.text
+xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-242', 'text', 'link-46');">text</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L286"></a><tt class="py-lineno">286</tt>  <tt class="py-line"> </tt>
+<a name="_IOTestCaseBase.test_iterparse_utf8_bom"></a><div id="_IOTestCaseBase.test_iterparse_utf8_bom-def"><a name="L287"></a><tt class="py-lineno">287</tt> <a class="py-toggle" href="#" id="_IOTestCaseBase.test_iterparse_utf8_bom-toggle" onclick="return toggle('_IOTestCaseBase.test_iterparse_utf8_bom');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf8_bom">test_iterparse_utf8_bom</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_IOTestCaseBase.test_iterparse_utf8_bom-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_IOTestCaseBase.test_iterparse_utf8_bom-expanded"><a name="L288"></a><tt class="py-lineno">288</tt>  <tt class="py-line">        <tt class="py-name">utext</tt> <tt class="py-op">=</tt> <tt id="link-243" class="py-name"><a title="lxml.tests.common_imports._str" class="py-name" href="#" onclick="return doclink('link-243', '_str', 'link-12');">_str</a></tt><tt class="py-op">(</tt><tt class="py-string">'S&#248;k p&#229; nettet'</tt><tt class="py-op">)</tt> </tt>
+<a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line">        <tt id="link-244" class="py-name"><a title="lxml.tests.test_unicode.uxml" class="py-name" href="#" onclick="return doclink('link-244', 'uxml', 'link-232');">uxml</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;p&gt;%s&lt;/p&gt;'</tt> <tt class="py-op">%</tt> <tt class="py-name">utext</tt> </tt>
+<a name="L290"></a><tt class="py-lineno">290</tt>  <tt class="py-line">        <tt class="py-name">bom</tt> <tt class="py-op">=</tt> <tt id="link-245" class="py-name"><a title="lxml.tests.common_imports._bytes" class="py-name" href="#" onclick="return doclink('link-245', '_bytes', 'link-13');">_bytes</a></tt><tt class="py-op">(</tt><tt class="py-string">'\\xEF\\xBB\\xBF'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt> </tt>
+<a name="L291"></a><tt class="py-lineno">291</tt>  <tt class="py-line">            <tt class="py-string">"unicode_escape"</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">"latin1"</tt><tt class="py-op">)</tt> </tt>
+<a name="L292"></a><tt class="py-lineno">292</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-number">3</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">bom</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L293"></a><tt class="py-lineno">293</tt>  <tt class="py-line">        <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">tempfile</tt><tt class="py-op">.</tt><tt class="py-name">NamedTemporaryFile</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line">            <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-246" class="py-name"><a title="lxml.etree._ElementTree.write" class="py-name" href="#" onclick="return doclink('link-246', 'write', 'link-51');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">bom</tt><tt class="py-op">)</tt> </tt>
+<a name="L296"></a><tt class="py-lineno">296</tt>  <tt class="py-line">            <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-247" class="py-name"><a title="lxml.etree._ElementTree.write" class="py-name" href="#" onclick="return doclink('link-247', 'write', 'link-51');">write</a></tt><tt class="py-op">(</tt><tt id="link-248" class="py-name"><a title="lxml.tests.test_unicode.uxml" class="py-name" href="#" onclick="return doclink('link-248', 'uxml', 'link-232');">uxml</a></tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">"utf-8"</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line">            <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">flush</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L298"></a><tt class="py-lineno">298</tt>  <tt class="py-line">            <tt id="link-249" class="py-name" targets="Method lxml.etree.DTD.elements()=lxml.etree.DTD-class.html#elements"><a title="lxml.etree.DTD.elements" class="py-name" href="#" onclick="return doclink('link-249', 'elements', 'link-249');">elements</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">el</tt> <tt class="py-keyword">for</tt> <tt class="py-name">_</tt><tt class="py-op">,</tt> <tt class="py-name">el</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-250" class="py-name"><a title="lxml.etree
+lxml.sax.ElementTreeContentHandler.etree
+lxml.tests.test_elementtree.CElementTreeTestCase.etree
+lxml.tests.test_elementtree._ETreeTestCaseBase.etree
+lxml.tests.test_elementtree._XMLPullParserTest.etree
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-250', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-251" class="py-name" targets="Class lxml.etree.iterparse=lxml.etree.iterparse-class.html"><a title="lxml.etree.iterparse" class="py-name" href="#" onclick="return doclink('link-251', 'iterparse', 'link-251');">iterparse</a></tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-252" class="py-name"><a title="lxml.etree.DTD.name
+lxml.etree._Entity.name
+lxml.html.InputMixin.name
+lxml.objectify.PyType.name" class="py-name" href="#" onclick="return doclink('link-252', 'name', 'link-32');">name</a></tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
+<a name="L299"></a><tt class="py-lineno">299</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt id="link-253" class="py-name"><a title="lxml.etree.DTD.elements" class="py-name" href="#" onclick="return doclink('link-253', 'elements', 'link-249');">elements</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L300"></a><tt class="py-lineno">300</tt>  <tt class="py-line">            <tt id="link-254" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-254', 'root', 'link-22');">root</a></tt> <tt class="py-op">=</tt> <tt id="link-255" class="py-name"><a title="lxml.etree.DTD.elements" class="py-name" href="#" onclick="return doclink('link-255', 'elements', 'link-249');">elements</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L301"></a><tt class="py-lineno">301</tt>  <tt class="py-line">        <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
+<a name="L302"></a><tt class="py-lineno">302</tt>  <tt class="py-line">            <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-256" class="py-name"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-256', 'close', 'link-53');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L303"></a><tt class="py-lineno">303</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-name">utext</tt><tt class="py-op">,</tt> <tt id="link-257" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-257', 'root', 'link-22');">root</a></tt><tt class="py-op">.</tt><tt id="link-258" class="py-name"><a title="lxml.etree.QName.text
+lxml.etree._Element.text
+lxml.etree._Entity.text
+lxml.objectify.ObjectifiedElement.text
+xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-258', 'text', 'link-46');">text</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L304"></a><tt class="py-lineno">304</tt>  <tt class="py-line"> </tt>
+<a name="_IOTestCaseBase.test_iterparse_utf16_bom"></a><div id="_IOTestCaseBase.test_iterparse_utf16_bom-def"><a name="L305"></a><tt class="py-lineno">305</tt> <a class="py-toggle" href="#" id="_IOTestCaseBase.test_iterparse_utf16_bom-toggle" onclick="return toggle('_IOTestCaseBase.test_iterparse_utf16_bom');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf16_bom">test_iterparse_utf16_bom</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_IOTestCaseBase.test_iterparse_utf16_bom-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_IOTestCaseBase.test_iterparse_utf16_bom-expanded"><a name="L306"></a><tt class="py-lineno">306</tt>  <tt class="py-line">        <tt class="py-name">utext</tt> <tt class="py-op">=</tt> <tt id="link-259" class="py-name"><a title="lxml.tests.common_imports._str" class="py-name" href="#" onclick="return doclink('link-259', '_str', 'link-12');">_str</a></tt><tt class="py-op">(</tt><tt class="py-string">'S&#248;k p&#229; nettet'</tt><tt class="py-op">)</tt> </tt>
+<a name="L307"></a><tt class="py-lineno">307</tt>  <tt class="py-line">        <tt id="link-260" class="py-name"><a title="lxml.tests.test_unicode.uxml" class="py-name" href="#" onclick="return doclink('link-260', 'uxml', 'link-232');">uxml</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'&lt;?xml version="1.0" encoding="UTF-16"?&gt;&lt;p&gt;%s&lt;/p&gt;'</tt> <tt class="py-op">%</tt> <tt class="py-name">utext</tt> </tt>
+<a name="L308"></a><tt class="py-lineno">308</tt>  <tt class="py-line">        <tt class="py-name">boms</tt> <tt class="py-op">=</tt> <tt id="link-261" class="py-name"><a title="lxml.tests.common_imports._bytes" class="py-name" href="#" onclick="return doclink('link-261', '_bytes', 'link-13');">_bytes</a></tt><tt class="py-op">(</tt><tt class="py-string">'\\xFE\\xFF \\xFF\\xFE'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt> </tt>
+<a name="L309"></a><tt class="py-lineno">309</tt>  <tt class="py-line">            <tt class="py-string">"unicode_escape"</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">"latin1"</tt><tt class="py-op">)</tt> </tt>
+<a name="L310"></a><tt class="py-lineno">310</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-number">5</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt class="py-name">boms</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L311"></a><tt class="py-lineno">311</tt>  <tt class="py-line">        <tt id="link-262" class="py-name" targets="Variable lxml.tests.test_threading.ThreadPipelineTestCase.xml=lxml.tests.test_threading.ThreadPipelineTestCase-class.html#xml"><a title="lxml.tests.test_threading.ThreadPipelineTestCase.xml" class="py-name" href="#" onclick="return doclink('link-262', 'xml', 'link-262');">xml</a></tt> <tt class="py-op">=</tt> <tt id="link-263" class="py-name"><a title="lxml.tests.test_unicode.uxml" class="py-name" href="#" onclick="return doclink('link-263', 'uxml', 'link-232');">uxml</a></tt><tt class="py-op">.</tt><tt class="py-name">encode</tt><tt class="py-op">(</tt><tt class="py-string">"utf-16"</tt><tt class="py-op">)</tt> </tt>
+<a name="L312"></a><tt class="py-lineno">312</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertTrue</tt><tt class="py-op">(</tt><tt id="link-264" class="py-name"><a title="lxml.tests.test_threading.ThreadPipelineTestCase.xml" class="py-name" href="#" onclick="return doclink('link-264', 'xml', 'link-262');">xml</a></tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt> <tt class="py-keyword">in</tt> <tt class="py-name">boms</tt><tt class="py-op">,</tt> <tt class="py-name">repr</tt><tt class="py-op">(</tt><tt id="link-265" class="py-name"><a title="lxml.tests.test_threading.ThreadPipelineTestCase.xml" class="py-name" href="#" onclick="return doclink('link-265', 'xml', 'link-262');">xml</a></tt><tt class="py-op">[</tt><tt class="py-op">:</tt><tt class="py-number">2</tt><tt class="py-op">]</tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L313"></a><tt class="py-lineno">313</tt>  <tt class="py-line"> </tt>
+<a name="L314"></a><tt class="py-lineno">314</tt>  <tt class="py-line">        <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">tempfile</tt><tt class="py-op">.</tt><tt class="py-name">NamedTemporaryFile</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L315"></a><tt class="py-lineno">315</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L316"></a><tt class="py-lineno">316</tt>  <tt class="py-line">            <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-266" class="py-name"><a title="lxml.etree._ElementTree.write" class="py-name" href="#" onclick="return doclink('link-266', 'write', 'link-51');">write</a></tt><tt class="py-op">(</tt><tt id="link-267" class="py-name"><a title="lxml.tests.test_threading.ThreadPipelineTestCase.xml" class="py-name" href="#" onclick="return doclink('link-267', 'xml', 'link-262');">xml</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L317"></a><tt class="py-lineno">317</tt>  <tt class="py-line">            <tt class="py-name">f</tt><tt class="py-op">.</tt><tt class="py-name">flush</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L318"></a><tt class="py-lineno">318</tt>  <tt class="py-line">            <tt id="link-268" class="py-name"><a title="lxml.etree.DTD.elements" class="py-name" href="#" onclick="return doclink('link-268', 'elements', 'link-249');">elements</a></tt> <tt class="py-op">=</tt> <tt class="py-op">[</tt><tt class="py-name">el</tt> <tt class="py-keyword">for</tt> <tt class="py-name">_</tt><tt class="py-op">,</tt> <tt class="py-name">el</tt> <tt class="py-keyword">in</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-269" class="py-name"><a title="lxml.etree
 lxml.sax.ElementTreeContentHandler.etree
 lxml.tests.test_elementtree.CElementTreeTestCase.etree
 lxml.tests.test_elementtree._ETreeTestCaseBase.etree
 lxml.tests.test_elementtree._XMLPullParserTest.etree
-lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-232', 'etree', 'link-9');">etree</a></tt> </tt>
-<a name="L274"></a><tt class="py-lineno">274</tt>  <tt class="py-line"> </tt>
-<a name="ETreeIOTestCase.test_write_compressed_text"></a><div id="ETreeIOTestCase.test_write_compressed_text-def"><a name="L275"></a><tt class="py-lineno">275</tt> <a class="py-toggle" href="#" id="ETreeIOTestCase.test_write_compressed_text-toggle" onclick="return toggle('ETreeIOTestCase.test_write_compressed_text');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_io.ETreeIOTestCase-class.html#test_write_compressed_text">test_write_compressed_text</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ETreeIOTestCase.test_write_compressed_text-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="ETreeIOTestCase.test_write_compressed_text-expanded"><a name="L276"></a><tt class="py-lineno">276</tt>  <tt class="py-line">        <tt id="link-233" class="py-name"><a title="lxml.etree.Element
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-269', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-270" class="py-name"><a title="lxml.etree.iterparse" class="py-name" href="#" onclick="return doclink('link-270', 'iterparse', 'link-251');">iterparse</a></tt><tt class="py-op">(</tt><tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-271" class="py-name"><a title="lxml.etree.DTD.name
+lxml.etree._Entity.name
+lxml.html.InputMixin.name
+lxml.objectify.PyType.name" class="py-name" href="#" onclick="return doclink('link-271', 'name', 'link-32');">name</a></tt><tt class="py-op">)</tt><tt class="py-op">]</tt> </tt>
+<a name="L319"></a><tt class="py-lineno">319</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-number">1</tt><tt class="py-op">,</tt> <tt class="py-name">len</tt><tt class="py-op">(</tt><tt id="link-272" class="py-name"><a title="lxml.etree.DTD.elements" class="py-name" href="#" onclick="return doclink('link-272', 'elements', 'link-249');">elements</a></tt><tt class="py-op">)</tt><tt class="py-op">)</tt> </tt>
+<a name="L320"></a><tt class="py-lineno">320</tt>  <tt class="py-line">            <tt id="link-273" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-273', 'root', 'link-22');">root</a></tt> <tt class="py-op">=</tt> <tt id="link-274" class="py-name"><a title="lxml.etree.DTD.elements" class="py-name" href="#" onclick="return doclink('link-274', 'elements', 'link-249');">elements</a></tt><tt class="py-op">[</tt><tt class="py-number">0</tt><tt class="py-op">]</tt> </tt>
+<a name="L321"></a><tt class="py-lineno">321</tt>  <tt class="py-line">        <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
+<a name="L322"></a><tt class="py-lineno">322</tt>  <tt class="py-line">            <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-275" class="py-name"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-275', 'close', 'link-53');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L323"></a><tt class="py-lineno">323</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt class="py-name">utext</tt><tt class="py-op">,</tt> <tt id="link-276" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-276', 'root', 'link-22');">root</a></tt><tt class="py-op">.</tt><tt id="link-277" class="py-name"><a title="lxml.etree.QName.text
+lxml.etree._Element.text
+lxml.etree._Entity.text
+lxml.objectify.ObjectifiedElement.text
+xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-277', 'text', 'link-46');">text</a></tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L324"></a><tt class="py-lineno">324</tt>  <tt class="py-line"> </tt>
+<a name="L325"></a><tt class="py-lineno">325</tt>  <tt class="py-line"> </tt>
+<a name="ETreeIOTestCase"></a><div id="ETreeIOTestCase-def"><a name="L326"></a><tt class="py-lineno">326</tt> <a class="py-toggle" href="#" id="ETreeIOTestCase-toggle" onclick="return toggle('ETreeIOTestCase');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="lxml.tests.test_io.ETreeIOTestCase-class.html">ETreeIOTestCase</a><tt class="py-op">(</tt><tt class="py-base-class">_IOTestCaseBase</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ETreeIOTestCase-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="ETreeIOTestCase-expanded"><a name="L327"></a><tt class="py-lineno">327</tt>  <tt class="py-line">    <tt id="link-278" class="py-name"><a title="lxml.etree
+lxml.sax.ElementTreeContentHandler.etree
+lxml.tests.test_elementtree.CElementTreeTestCase.etree
+lxml.tests.test_elementtree._ETreeTestCaseBase.etree
+lxml.tests.test_elementtree._XMLPullParserTest.etree
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-278', 'etree', 'link-9');">etree</a></tt> <tt class="py-op">=</tt> <tt id="link-279" class="py-name"><a title="lxml.etree
+lxml.sax.ElementTreeContentHandler.etree
+lxml.tests.test_elementtree.CElementTreeTestCase.etree
+lxml.tests.test_elementtree._ETreeTestCaseBase.etree
+lxml.tests.test_elementtree._XMLPullParserTest.etree
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-279', 'etree', 'link-9');">etree</a></tt> </tt>
+<a name="L328"></a><tt class="py-lineno">328</tt>  <tt class="py-line"> </tt>
+<a name="ETreeIOTestCase.test_write_compressed_text"></a><div id="ETreeIOTestCase.test_write_compressed_text-def"><a name="L329"></a><tt class="py-lineno">329</tt> <a class="py-toggle" href="#" id="ETreeIOTestCase.test_write_compressed_text-toggle" onclick="return toggle('ETreeIOTestCase.test_write_compressed_text');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_io.ETreeIOTestCase-class.html#test_write_compressed_text">test_write_compressed_text</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ETreeIOTestCase.test_write_compressed_text-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="ETreeIOTestCase.test_write_compressed_text-expanded"><a name="L330"></a><tt class="py-lineno">330</tt>  <tt class="py-line">        <tt id="link-280" class="py-name"><a title="lxml.etree.Element
 lxml.objectify.Element
 lxml.tests.test_pyclasslookup.PyClassLookupTestCase.Element
-xml.etree.ElementTree.Element" class="py-name" href="#" onclick="return doclink('link-233', 'Element', 'link-24');">Element</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-234" class="py-name"><a title="lxml.etree
+xml.etree.ElementTree.Element" class="py-name" href="#" onclick="return doclink('link-280', 'Element', 'link-24');">Element</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-281" class="py-name"><a title="lxml.etree
 lxml.sax.ElementTreeContentHandler.etree
 lxml.tests.test_elementtree.CElementTreeTestCase.etree
 lxml.tests.test_elementtree._ETreeTestCaseBase.etree
 lxml.tests.test_elementtree._XMLPullParserTest.etree
-lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-234', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-235" class="py-name"><a title="lxml.etree.Element
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-281', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-282" class="py-name"><a title="lxml.etree.Element
 lxml.objectify.Element
 lxml.tests.test_pyclasslookup.PyClassLookupTestCase.Element
-xml.etree.ElementTree.Element" class="py-name" href="#" onclick="return doclink('link-235', 'Element', 'link-24');">Element</a></tt> </tt>
-<a name="L277"></a><tt class="py-lineno">277</tt>  <tt class="py-line">        <tt id="link-236" class="py-name" targets="Function lxml.etree.SubElement()=lxml.etree-module.html#SubElement"><a title="lxml.etree.SubElement" class="py-name" href="#" onclick="return doclink('link-236', 'SubElement', 'link-236');">SubElement</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-237" class="py-name"><a title="lxml.etree
+xml.etree.ElementTree.Element" class="py-name" href="#" onclick="return doclink('link-282', 'Element', 'link-24');">Element</a></tt> </tt>
+<a name="L331"></a><tt class="py-lineno">331</tt>  <tt class="py-line">        <tt id="link-283" class="py-name" targets="Function lxml.etree.SubElement()=lxml.etree-module.html#SubElement"><a title="lxml.etree.SubElement" class="py-name" href="#" onclick="return doclink('link-283', 'SubElement', 'link-283');">SubElement</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-284" class="py-name"><a title="lxml.etree
 lxml.sax.ElementTreeContentHandler.etree
 lxml.tests.test_elementtree.CElementTreeTestCase.etree
 lxml.tests.test_elementtree._ETreeTestCaseBase.etree
 lxml.tests.test_elementtree._XMLPullParserTest.etree
-lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-237', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-238" class="py-name"><a title="lxml.etree.SubElement" class="py-name" href="#" onclick="return doclink('link-238', 'SubElement', 'link-236');">SubElement</a></tt> </tt>
-<a name="L278"></a><tt class="py-lineno">278</tt>  <tt class="py-line">        <tt id="link-239" class="py-name"><a title="lxml.etree.ElementTree
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-284', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-285" class="py-name"><a title="lxml.etree.SubElement" class="py-name" href="#" onclick="return doclink('link-285', 'SubElement', 'link-283');">SubElement</a></tt> </tt>
+<a name="L332"></a><tt class="py-lineno">332</tt>  <tt class="py-line">        <tt id="link-286" class="py-name"><a title="lxml.etree.ElementTree
 xml.etree.ElementTree
-xml.etree.ElementTree.ElementTree" class="py-name" href="#" onclick="return doclink('link-239', 'ElementTree', 'link-10');">ElementTree</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-240" class="py-name"><a title="lxml.etree
+xml.etree.ElementTree.ElementTree" class="py-name" href="#" onclick="return doclink('link-286', 'ElementTree', 'link-10');">ElementTree</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-287" class="py-name"><a title="lxml.etree
 lxml.sax.ElementTreeContentHandler.etree
 lxml.tests.test_elementtree.CElementTreeTestCase.etree
 lxml.tests.test_elementtree._ETreeTestCaseBase.etree
 lxml.tests.test_elementtree._XMLPullParserTest.etree
-lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-240', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-241" class="py-name"><a title="lxml.etree.ElementTree
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-287', 'etree', 'link-9');">etree</a></tt><tt class="py-op">.</tt><tt id="link-288" class="py-name"><a title="lxml.etree.ElementTree
 xml.etree.ElementTree
-xml.etree.ElementTree.ElementTree" class="py-name" href="#" onclick="return doclink('link-241', 'ElementTree', 'link-10');">ElementTree</a></tt> </tt>
-<a name="L279"></a><tt class="py-lineno">279</tt>  <tt class="py-line">        <tt id="link-242" class="py-name"><a title="lxml.etree.QName.text
+xml.etree.ElementTree.ElementTree" class="py-name" href="#" onclick="return doclink('link-288', 'ElementTree', 'link-10');">ElementTree</a></tt> </tt>
+<a name="L333"></a><tt class="py-lineno">333</tt>  <tt class="py-line">        <tt id="link-289" class="py-name"><a title="lxml.etree.QName.text
 lxml.etree._Element.text
 lxml.etree._Entity.text
 lxml.objectify.ObjectifiedElement.text
-xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-242', 'text', 'link-46');">text</a></tt> <tt class="py-op">=</tt> <tt id="link-243" class="py-name"><a title="lxml.tests.common_imports._str" class="py-name" href="#" onclick="return doclink('link-243', '_str', 'link-12');">_str</a></tt><tt class="py-op">(</tt><tt class="py-string">"qwrtio&#252;&#246;&#228;"</tt><tt class="py-op">)</tt> </tt>
-<a name="L280"></a><tt class="py-lineno">280</tt>  <tt class="py-line"> </tt>
-<a name="L281"></a><tt class="py-lineno">281</tt>  <tt class="py-line">        <tt id="link-244" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-244', 'root', 'link-22');">root</a></tt> <tt class="py-op">=</tt> <tt id="link-245" class="py-name"><a title="lxml.etree.Element
+xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-289', 'text', 'link-46');">text</a></tt> <tt class="py-op">=</tt> <tt id="link-290" class="py-name"><a title="lxml.tests.common_imports._str" class="py-name" href="#" onclick="return doclink('link-290', '_str', 'link-12');">_str</a></tt><tt class="py-op">(</tt><tt class="py-string">"qwrtio&#252;&#246;&#228;"</tt><tt class="py-op">)</tt> </tt>
+<a name="L334"></a><tt class="py-lineno">334</tt>  <tt class="py-line"> </tt>
+<a name="L335"></a><tt class="py-lineno">335</tt>  <tt class="py-line">        <tt id="link-291" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-291', 'root', 'link-22');">root</a></tt> <tt class="py-op">=</tt> <tt id="link-292" class="py-name"><a title="lxml.etree.Element
 lxml.objectify.Element
 lxml.tests.test_pyclasslookup.PyClassLookupTestCase.Element
-xml.etree.ElementTree.Element" class="py-name" href="#" onclick="return doclink('link-245', 'Element', 'link-24');">Element</a></tt><tt class="py-op">(</tt><tt class="py-string">'root'</tt><tt class="py-op">)</tt> </tt>
-<a name="L282"></a><tt class="py-lineno">282</tt>  <tt class="py-line">        <tt id="link-246" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-246', 'root', 'link-22');">root</a></tt><tt class="py-op">.</tt><tt id="link-247" class="py-name"><a title="lxml.etree.QName.text
+xml.etree.ElementTree.Element" class="py-name" href="#" onclick="return doclink('link-292', 'Element', 'link-24');">Element</a></tt><tt class="py-op">(</tt><tt class="py-string">'root'</tt><tt class="py-op">)</tt> </tt>
+<a name="L336"></a><tt class="py-lineno">336</tt>  <tt class="py-line">        <tt id="link-293" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-293', 'root', 'link-22');">root</a></tt><tt class="py-op">.</tt><tt id="link-294" class="py-name"><a title="lxml.etree.QName.text
 lxml.etree._Element.text
 lxml.etree._Entity.text
 lxml.objectify.ObjectifiedElement.text
-xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-247', 'text', 'link-46');">text</a></tt> <tt class="py-op">=</tt> <tt id="link-248" class="py-name"><a title="lxml.etree.QName.text
+xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-294', 'text', 'link-46');">text</a></tt> <tt class="py-op">=</tt> <tt id="link-295" class="py-name"><a title="lxml.etree.QName.text
 lxml.etree._Element.text
 lxml.etree._Entity.text
 lxml.objectify.ObjectifiedElement.text
-xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-248', 'text', 'link-46');">text</a></tt> </tt>
-<a name="L283"></a><tt class="py-lineno">283</tt>  <tt class="py-line">        <tt class="py-name">child</tt> <tt class="py-op">=</tt> <tt id="link-249" class="py-name"><a title="lxml.etree.SubElement" class="py-name" href="#" onclick="return doclink('link-249', 'SubElement', 'link-236');">SubElement</a></tt><tt class="py-op">(</tt><tt id="link-250" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-250', 'root', 'link-22');">root</a></tt><tt class="py-op">,</tt> <tt class="py-string">'sub'</tt><tt class="py-op">)</tt> </tt>
-<a name="L284"></a><tt class="py-lineno">284</tt>  <tt class="py-line">        <tt class="py-name">child</tt><tt class="py-op">.</tt><tt id="link-251" class="py-name"><a title="lxml.etree.QName.text
+xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-295', 'text', 'link-46');">text</a></tt> </tt>
+<a name="L337"></a><tt class="py-lineno">337</tt>  <tt class="py-line">        <tt class="py-name">child</tt> <tt class="py-op">=</tt> <tt id="link-296" class="py-name"><a title="lxml.etree.SubElement" class="py-name" href="#" onclick="return doclink('link-296', 'SubElement', 'link-283');">SubElement</a></tt><tt class="py-op">(</tt><tt id="link-297" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-297', 'root', 'link-22');">root</a></tt><tt class="py-op">,</tt> <tt class="py-string">'sub'</tt><tt class="py-op">)</tt> </tt>
+<a name="L338"></a><tt class="py-lineno">338</tt>  <tt class="py-line">        <tt class="py-name">child</tt><tt class="py-op">.</tt><tt id="link-298" class="py-name"><a title="lxml.etree.QName.text
 lxml.etree._Element.text
 lxml.etree._Entity.text
 lxml.objectify.ObjectifiedElement.text
-xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-251', 'text', 'link-46');">text</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'TEXT'</tt> </tt>
-<a name="L285"></a><tt class="py-lineno">285</tt>  <tt class="py-line">        <tt class="py-name">child</tt><tt class="py-op">.</tt><tt id="link-252" class="py-name" targets="Variable lxml.etree._Element.tail=lxml.etree._Element-class.html#tail,Variable xml.etree.ElementTree.Element.tail=xml.etree.ElementTree.Element-class.html#tail"><a title="lxml.etree._Element.tail
-xml.etree.ElementTree.Element.tail" class="py-name" href="#" onclick="return doclink('link-252', 'tail', 'link-252');">tail</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'TAIL'</tt> </tt>
-<a name="L286"></a><tt class="py-lineno">286</tt>  <tt class="py-line">        <tt id="link-253" class="py-name"><a title="lxml.etree.SubElement" class="py-name" href="#" onclick="return doclink('link-253', 'SubElement', 'link-236');">SubElement</a></tt><tt class="py-op">(</tt><tt id="link-254" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-254', 'root', 'link-22');">root</a></tt><tt class="py-op">,</tt> <tt class="py-string">'sub'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-255" class="py-name"><a title="lxml.etree.QName.text
+xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-298', 'text', 'link-46');">text</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'TEXT'</tt> </tt>
+<a name="L339"></a><tt class="py-lineno">339</tt>  <tt class="py-line">        <tt class="py-name">child</tt><tt class="py-op">.</tt><tt id="link-299" class="py-name" targets="Variable lxml.etree._Element.tail=lxml.etree._Element-class.html#tail,Variable xml.etree.ElementTree.Element.tail=xml.etree.ElementTree.Element-class.html#tail"><a title="lxml.etree._Element.tail
+xml.etree.ElementTree.Element.tail" class="py-name" href="#" onclick="return doclink('link-299', 'tail', 'link-299');">tail</a></tt> <tt class="py-op">=</tt> <tt class="py-string">'TAIL'</tt> </tt>
+<a name="L340"></a><tt class="py-lineno">340</tt>  <tt class="py-line">        <tt id="link-300" class="py-name"><a title="lxml.etree.SubElement" class="py-name" href="#" onclick="return doclink('link-300', 'SubElement', 'link-283');">SubElement</a></tt><tt class="py-op">(</tt><tt id="link-301" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-301', 'root', 'link-22');">root</a></tt><tt class="py-op">,</tt> <tt class="py-string">'sub'</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt id="link-302" class="py-name"><a title="lxml.etree.QName.text
 lxml.etree._Element.text
 lxml.etree._Entity.text
 lxml.objectify.ObjectifiedElement.text
-xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-255', 'text', 'link-46');">text</a></tt> <tt class="py-op">=</tt> <tt id="link-256" class="py-name"><a title="lxml.etree.QName.text
+xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-302', 'text', 'link-46');">text</a></tt> <tt class="py-op">=</tt> <tt id="link-303" class="py-name"><a title="lxml.etree.QName.text
 lxml.etree._Element.text
 lxml.etree._Entity.text
 lxml.objectify.ObjectifiedElement.text
-xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-256', 'text', 'link-46');">text</a></tt> </tt>
-<a name="L287"></a><tt class="py-lineno">287</tt>  <tt class="py-line"> </tt>
-<a name="L288"></a><tt class="py-lineno">288</tt>  <tt class="py-line">        <tt class="py-name">tree</tt> <tt class="py-op">=</tt> <tt id="link-257" class="py-name"><a title="lxml.etree.ElementTree
+xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-303', 'text', 'link-46');">text</a></tt> </tt>
+<a name="L341"></a><tt class="py-lineno">341</tt>  <tt class="py-line"> </tt>
+<a name="L342"></a><tt class="py-lineno">342</tt>  <tt class="py-line">        <tt class="py-name">tree</tt> <tt class="py-op">=</tt> <tt id="link-304" class="py-name"><a title="lxml.etree.ElementTree
 xml.etree.ElementTree
-xml.etree.ElementTree.ElementTree" class="py-name" href="#" onclick="return doclink('link-257', 'ElementTree', 'link-10');">ElementTree</a></tt><tt class="py-op">(</tt><tt id="link-258" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-258', 'root', 'link-22');">root</a></tt><tt class="py-op">)</tt> </tt>
-<a name="L289"></a><tt class="py-lineno">289</tt>  <tt class="py-line">        <tt class="py-name">out</tt> <tt class="py-op">=</tt> <tt class="py-name">BytesIO</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L290"></a><tt class="py-lineno">290</tt>  <tt class="py-line">        <tt class="py-name">tree</tt><tt class="py-op">.</tt><tt id="link-259" class="py-name"><a title="lxml.etree._ElementTree.write" class="py-name" href="#" onclick="return doclink('link-259', 'write', 'link-51');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">out</tt><tt class="py-op">,</tt> <tt id="link-260" class="py-name" targets="Variable lxml.html.FormElement.method=lxml.html.FormElement-class.html#method"><a title="lxml.html.FormElement.method" class="py-name" href="#" onclick="return doclink('link-260', 'method', 'link-260');">method</a></tt><tt class="py-op">=</tt><tt class="py-string">'text'</tt><tt class="py-op">,</tt> <tt id="link-261" class="py-name"><a title="lxml.etree.DocInfo.encoding" class="py-name" href="#" onclick="return doclink('link-261', 'encoding', 'link-52');">encoding</a></tt><tt class="py-op">=</tt><tt class="py-string">'utf8'</tt><tt class="py-op">,</tt> <tt class="py-name">compression</tt><tt class="py-op">=</tt><tt class="py-number">9</tt><tt class="py-op">)</tt> </tt>
-<a name="L291"></a><tt class="py-lineno">291</tt>  <tt class="py-line">        <tt class="py-name">out</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
-<a name="L292"></a><tt class="py-lineno">292</tt>  <tt class="py-line"> </tt>
-<a name="L293"></a><tt class="py-lineno">293</tt>  <tt class="py-line">        <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">gzip</tt><tt class="py-op">.</tt><tt class="py-name">GzipFile</tt><tt class="py-op">(</tt><tt class="py-name">fileobj</tt><tt class="py-op">=</tt><tt class="py-name">out</tt><tt class="py-op">)</tt> </tt>
-<a name="L294"></a><tt class="py-lineno">294</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
-<a name="L295"></a><tt class="py-lineno">295</tt>  <tt class="py-line">            <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-262" class="py-name"><a title="lxml.tests.common_imports.LargeFileLike.read
-lxml.tests.common_imports.SillyFileLike.read" class="py-name" href="#" onclick="return doclink('link-262', 'read', 'link-62');">read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'utf8'</tt><tt class="py-op">)</tt> </tt>
-<a name="L296"></a><tt class="py-lineno">296</tt>  <tt class="py-line">        <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
-<a name="L297"></a><tt class="py-lineno">297</tt>  <tt class="py-line">            <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-263" class="py-name"><a title="lxml.etree.TreeBuilder.close
-lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-263', 'close', 'link-53');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L298"></a><tt class="py-lineno">298</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt id="link-264" class="py-name"><a title="lxml.etree.QName.text
+xml.etree.ElementTree.ElementTree" class="py-name" href="#" onclick="return doclink('link-304', 'ElementTree', 'link-10');">ElementTree</a></tt><tt class="py-op">(</tt><tt id="link-305" class="py-name"><a title="lxml.etree.iterparse.root" class="py-name" href="#" onclick="return doclink('link-305', 'root', 'link-22');">root</a></tt><tt class="py-op">)</tt> </tt>
+<a name="L343"></a><tt class="py-lineno">343</tt>  <tt class="py-line">        <tt class="py-name">out</tt> <tt class="py-op">=</tt> <tt class="py-name">BytesIO</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L344"></a><tt class="py-lineno">344</tt>  <tt class="py-line">        <tt class="py-name">tree</tt><tt class="py-op">.</tt><tt id="link-306" class="py-name"><a title="lxml.etree._ElementTree.write" class="py-name" href="#" onclick="return doclink('link-306', 'write', 'link-51');">write</a></tt><tt class="py-op">(</tt><tt class="py-name">out</tt><tt class="py-op">,</tt> <tt id="link-307" class="py-name" targets="Variable lxml.html.FormElement.method=lxml.html.FormElement-class.html#method"><a title="lxml.html.FormElement.method" class="py-name" href="#" onclick="return doclink('link-307', 'method', 'link-307');">method</a></tt><tt class="py-op">=</tt><tt class="py-string">'text'</tt><tt class="py-op">,</tt> <tt id="link-308" class="py-name"><a title="lxml.etree.DocInfo.encoding" class="py-name" href="#" onclick="return doclink('link-308', 'encoding', 'link-52');">encoding</a></tt><tt class="py-op">=</tt><tt class="py-string">'utf8'</tt><tt class="py-op">,</tt> <tt class="py-name">compression</tt><tt class="py-op">=</tt><tt class="py-number">9</tt><tt class="py-op">)</tt> </tt>
+<a name="L345"></a><tt class="py-lineno">345</tt>  <tt class="py-line">        <tt class="py-name">out</tt><tt class="py-op">.</tt><tt class="py-name">seek</tt><tt class="py-op">(</tt><tt class="py-number">0</tt><tt class="py-op">)</tt> </tt>
+<a name="L346"></a><tt class="py-lineno">346</tt>  <tt class="py-line"> </tt>
+<a name="L347"></a><tt class="py-lineno">347</tt>  <tt class="py-line">        <tt class="py-name">f</tt> <tt class="py-op">=</tt> <tt class="py-name">gzip</tt><tt class="py-op">.</tt><tt class="py-name">GzipFile</tt><tt class="py-op">(</tt><tt class="py-name">fileobj</tt><tt class="py-op">=</tt><tt class="py-name">out</tt><tt class="py-op">)</tt> </tt>
+<a name="L348"></a><tt class="py-lineno">348</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L349"></a><tt class="py-lineno">349</tt>  <tt class="py-line">            <tt class="py-name">result</tt> <tt class="py-op">=</tt> <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-309" class="py-name"><a title="lxml.tests.common_imports.LargeFileLike.read
+lxml.tests.common_imports.SillyFileLike.read" class="py-name" href="#" onclick="return doclink('link-309', 'read', 'link-62');">read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">.</tt><tt class="py-name">decode</tt><tt class="py-op">(</tt><tt class="py-string">'utf8'</tt><tt class="py-op">)</tt> </tt>
+<a name="L350"></a><tt class="py-lineno">350</tt>  <tt class="py-line">        <tt class="py-keyword">finally</tt><tt class="py-op">:</tt> </tt>
+<a name="L351"></a><tt class="py-lineno">351</tt>  <tt class="py-line">            <tt class="py-name">f</tt><tt class="py-op">.</tt><tt id="link-310" class="py-name"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-310', 'close', 'link-53');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L352"></a><tt class="py-lineno">352</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">assertEqual</tt><tt class="py-op">(</tt><tt id="link-311" class="py-name"><a title="lxml.etree.QName.text
 lxml.etree._Element.text
 lxml.etree._Entity.text
 lxml.objectify.ObjectifiedElement.text
-xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-264', 'text', 'link-46');">text</a></tt><tt class="py-op">+</tt><tt class="py-string">'TEXTTAIL'</tt><tt class="py-op">+</tt><tt id="link-265" class="py-name"><a title="lxml.etree.QName.text
+xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-311', 'text', 'link-46');">text</a></tt><tt class="py-op">+</tt><tt class="py-string">'TEXTTAIL'</tt><tt class="py-op">+</tt><tt id="link-312" class="py-name"><a title="lxml.etree.QName.text
 lxml.etree._Element.text
 lxml.etree._Entity.text
 lxml.objectify.ObjectifiedElement.text
-xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-265', 'text', 'link-46');">text</a></tt><tt class="py-op">,</tt> <tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L299"></a><tt class="py-lineno">299</tt>  <tt class="py-line"> </tt>
-<a name="L300"></a><tt class="py-lineno">300</tt>  <tt class="py-line"> </tt>
-<a name="L301"></a><tt class="py-lineno">301</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt id="link-266" class="py-name"><a title="lxml.etree.ElementTree
+xml.etree.ElementTree.Element.text" class="py-name" href="#" onclick="return doclink('link-312', 'text', 'link-46');">text</a></tt><tt class="py-op">,</tt> <tt class="py-name">result</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L353"></a><tt class="py-lineno">353</tt>  <tt class="py-line"> </tt>
+<a name="L354"></a><tt class="py-lineno">354</tt>  <tt class="py-line"> </tt>
+<a name="L355"></a><tt class="py-lineno">355</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt id="link-313" class="py-name"><a title="lxml.etree.ElementTree
 xml.etree.ElementTree
-xml.etree.ElementTree.ElementTree" class="py-name" href="#" onclick="return doclink('link-266', 'ElementTree', 'link-10');">ElementTree</a></tt><tt class="py-op">:</tt> </tt>
-<a name="ElementTreeIOTestCase"></a><div id="ElementTreeIOTestCase-def"><a name="L302"></a><tt class="py-lineno">302</tt> <a class="py-toggle" href="#" id="ElementTreeIOTestCase-toggle" onclick="return toggle('ElementTreeIOTestCase');">-</a><tt class="py-line">    <tt class="py-keyword">class</tt> <a class="py-def-name" href="lxml.tests.test_io.ElementTreeIOTestCase-class.html">ElementTreeIOTestCase</a><tt class="py-op">(</tt><tt class="py-base-class">_IOTestCaseBase</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="ElementTreeIOTestCase-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="ElementTreeIOTestCase-expanded"><a name="L303"></a><tt class="py-lineno">303</tt>  <tt class="py-line">        <tt id="link-267" class="py-name"><a title="lxml.etree
+xml.etree.ElementTree.ElementTree" class="py-name" href="#" onclick="return doclink('link-313', 'ElementTree', 'link-10');">ElementTree</a></tt><tt class="py-op">:</tt> </tt>
+<a name="ElementTreeIOTestCase"></a><div id="ElementTreeIOTestCase-def"><a name="L356"></a><tt class="py-lineno">356</tt> <a class="py-toggle" href="#" id="ElementTreeIOTestCase-toggle" onclick="return toggle('ElementTreeIOTestCase');">-</a><tt class="py-line">    <tt class="py-keyword">class</tt> <a class="py-def-name" href="lxml.tests.test_io.ElementTreeIOTestCase-class.html">ElementTreeIOTestCase</a><tt class="py-op">(</tt><tt class="py-base-class">_IOTestCaseBase</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="ElementTreeIOTestCase-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="ElementTreeIOTestCase-expanded"><a name="L357"></a><tt class="py-lineno">357</tt>  <tt class="py-line">        <tt id="link-314" class="py-name"><a title="lxml.etree
 lxml.sax.ElementTreeContentHandler.etree
 lxml.tests.test_elementtree.CElementTreeTestCase.etree
 lxml.tests.test_elementtree._ETreeTestCaseBase.etree
 lxml.tests.test_elementtree._XMLPullParserTest.etree
-lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-267', 'etree', 'link-9');">etree</a></tt> <tt class="py-op">=</tt> <tt id="link-268" class="py-name"><a title="lxml.etree.ElementTree
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-314', 'etree', 'link-9');">etree</a></tt> <tt class="py-op">=</tt> <tt id="link-315" class="py-name"><a title="lxml.etree.ElementTree
 xml.etree.ElementTree
-xml.etree.ElementTree.ElementTree" class="py-name" href="#" onclick="return doclink('link-268', 'ElementTree', 'link-10');">ElementTree</a></tt> </tt>
-</div><a name="L304"></a><tt class="py-lineno">304</tt>  <tt class="py-line"> </tt>
-<a name="L305"></a><tt class="py-lineno">305</tt>  <tt class="py-line"> </tt>
-<a name="test_suite"></a><div id="test_suite-def"><a name="L306"></a><tt class="py-lineno">306</tt> <a class="py-toggle" href="#" id="test_suite-toggle" onclick="return toggle('test_suite');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_io-module.html#test_suite">test_suite</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="test_suite-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="test_suite-expanded"><a name="L307"></a><tt class="py-lineno">307</tt>  <tt class="py-line">    <tt class="py-name">suite</tt> <tt class="py-op">=</tt> <tt class="py-name">unittest</tt><tt class="py-op">.</tt><tt class="py-name">TestSuite</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-<a name="L308"></a><tt class="py-lineno">308</tt>  <tt class="py-line">    <tt class="py-name">suite</tt><tt class="py-op">.</tt><tt class="py-name">addTests</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">unittest</tt><tt class="py-op">.</tt><tt class="py-name">makeSuite</tt><tt class="py-op">(</tt><tt id="link-269" class="py-name" targets="Class lxml.tests.test_io.ETreeIOTestCase=lxml.tests.test_io.ETreeIOTestCase-class.html"><a title="lxml.tests.test_io.ETreeIOTestCase" class="py-name" href="#" onclick="return doclink('link-269', 'ETreeIOTestCase', 'link-269');">ETreeIOTestCase</a></tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L309"></a><tt class="py-lineno">309</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-270" class="py-name"><a title="lxml.etree.ElementTree
+xml.etree.ElementTree.ElementTree" class="py-name" href="#" onclick="return doclink('link-315', 'ElementTree', 'link-10');">ElementTree</a></tt> </tt>
+</div><a name="L358"></a><tt class="py-lineno">358</tt>  <tt class="py-line"> </tt>
+<a name="L359"></a><tt class="py-lineno">359</tt>  <tt class="py-line"> </tt>
+<a name="test_suite"></a><div id="test_suite-def"><a name="L360"></a><tt class="py-lineno">360</tt> <a class="py-toggle" href="#" id="test_suite-toggle" onclick="return toggle('test_suite');">-</a><tt class="py-line"><tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_io-module.html#test_suite">test_suite</a><tt class="py-op">(</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="test_suite-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="test_suite-expanded"><a name="L361"></a><tt class="py-lineno">361</tt>  <tt class="py-line">    <tt class="py-name">suite</tt> <tt class="py-op">=</tt> <tt class="py-name">unittest</tt><tt class="py-op">.</tt><tt class="py-name">TestSuite</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L362"></a><tt class="py-lineno">362</tt>  <tt class="py-line">    <tt class="py-name">suite</tt><tt class="py-op">.</tt><tt class="py-name">addTests</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">unittest</tt><tt class="py-op">.</tt><tt class="py-name">makeSuite</tt><tt class="py-op">(</tt><tt id="link-316" class="py-name" targets="Class lxml.tests.test_io.ETreeIOTestCase=lxml.tests.test_io.ETreeIOTestCase-class.html"><a title="lxml.tests.test_io.ETreeIOTestCase" class="py-name" href="#" onclick="return doclink('link-316', 'ETreeIOTestCase', 'link-316');">ETreeIOTestCase</a></tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L363"></a><tt class="py-lineno">363</tt>  <tt class="py-line">    <tt class="py-keyword">if</tt> <tt id="link-317" class="py-name"><a title="lxml.etree.ElementTree
 xml.etree.ElementTree
-xml.etree.ElementTree.ElementTree" class="py-name" href="#" onclick="return doclink('link-270', 'ElementTree', 'link-10');">ElementTree</a></tt><tt class="py-op">:</tt> </tt>
-<a name="L310"></a><tt class="py-lineno">310</tt>  <tt class="py-line">        <tt class="py-name">suite</tt><tt class="py-op">.</tt><tt class="py-name">addTests</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">unittest</tt><tt class="py-op">.</tt><tt class="py-name">makeSuite</tt><tt class="py-op">(</tt><tt id="link-271" class="py-name" targets="Class lxml.tests.test_io.ElementTreeIOTestCase=lxml.tests.test_io.ElementTreeIOTestCase-class.html"><a title="lxml.tests.test_io.ElementTreeIOTestCase" class="py-name" href="#" onclick="return doclink('link-271', 'ElementTreeIOTestCase', 'link-271');">ElementTreeIOTestCase</a></tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L311"></a><tt class="py-lineno">311</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">suite</tt> </tt>
-</div><a name="L312"></a><tt class="py-lineno">312</tt>  <tt class="py-line"> </tt>
-<a name="L313"></a><tt class="py-lineno">313</tt>  <tt class="py-line"> </tt>
-<a name="L314"></a><tt class="py-lineno">314</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
-<a name="L315"></a><tt class="py-lineno">315</tt>  <tt class="py-line">    <tt class="py-keyword">print</tt><tt class="py-op">(</tt><tt class="py-string">'to test use test.py %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">__file__</tt><tt class="py-op">)</tt> </tt>
-<a name="L316"></a><tt class="py-lineno">316</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+xml.etree.ElementTree.ElementTree" class="py-name" href="#" onclick="return doclink('link-317', 'ElementTree', 'link-10');">ElementTree</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L364"></a><tt class="py-lineno">364</tt>  <tt class="py-line">        <tt class="py-name">suite</tt><tt class="py-op">.</tt><tt class="py-name">addTests</tt><tt class="py-op">(</tt><tt class="py-op">[</tt><tt class="py-name">unittest</tt><tt class="py-op">.</tt><tt class="py-name">makeSuite</tt><tt class="py-op">(</tt><tt id="link-318" class="py-name" targets="Class lxml.tests.test_io.ElementTreeIOTestCase=lxml.tests.test_io.ElementTreeIOTestCase-class.html"><a title="lxml.tests.test_io.ElementTreeIOTestCase" class="py-name" href="#" onclick="return doclink('link-318', 'ElementTreeIOTestCase', 'link-318');">ElementTreeIOTestCase</a></tt><tt class="py-op">)</tt><tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L365"></a><tt class="py-lineno">365</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">suite</tt> </tt>
+</div><a name="L366"></a><tt class="py-lineno">366</tt>  <tt class="py-line"> </tt>
+<a name="L367"></a><tt class="py-lineno">367</tt>  <tt class="py-line"> </tt>
+<a name="L368"></a><tt class="py-lineno">368</tt>  <tt class="py-line"><tt class="py-keyword">if</tt> <tt class="py-name">__name__</tt> <tt class="py-op">==</tt> <tt class="py-string">'__main__'</tt><tt class="py-op">:</tt> </tt>
+<a name="L369"></a><tt class="py-lineno">369</tt>  <tt class="py-line">    <tt class="py-keyword">print</tt><tt class="py-op">(</tt><tt class="py-string">'to test use test.py %s'</tt> <tt class="py-op">%</tt> <tt class="py-name">__file__</tt><tt class="py-op">)</tt> </tt>
+<a name="L370"></a><tt class="py-lineno">370</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -960,7 +1059,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 636678e..5c8ea87 100644 (file)
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_fileobject">test_class_parse_fileobject</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_unamed_fileobject">test_class_parse_unamed_fileobject</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_etree_parse_io_error">test_etree_parse_io_error</a></code>,
+      <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf16_bom">test_iterparse_utf16_bom</a></code>,
+      <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf8_bom">test_iterparse_utf8_bom</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_error">test_module_parse_fileobject_error</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_late_error">test_module_parse_fileobject_late_error</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_type_error">test_module_parse_fileobject_type_error</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_gzipobject">test_module_parse_gzipobject</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_large_fileobject">test_module_parse_large_fileobject</a></code>,
+      <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_parse_utf8_bom">test_parse_utf8_bom</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_tree_io">test_tree_io</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_tree_io_latin1">test_tree_io_latin1</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_write_filename">test_write_filename</a></code>,
@@ -404,7 +407,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 526c022..55528f7 100644 (file)
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_fileobject">test_class_parse_fileobject</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_class_parse_unamed_fileobject">test_class_parse_unamed_fileobject</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_etree_parse_io_error">test_etree_parse_io_error</a></code>,
+      <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf16_bom">test_iterparse_utf16_bom</a></code>,
+      <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_iterparse_utf8_bom">test_iterparse_utf8_bom</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_error">test_module_parse_fileobject_error</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_late_error">test_module_parse_fileobject_late_error</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_fileobject_type_error">test_module_parse_fileobject_type_error</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_gzipobject">test_module_parse_gzipobject</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_module_parse_large_fileobject">test_module_parse_large_fileobject</a></code>,
+      <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_parse_utf8_bom">test_parse_utf8_bom</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_tree_io">test_tree_io</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_tree_io_latin1">test_tree_io_latin1</a></code>,
       <code><a href="lxml.tests.test_io._IOTestCaseBase-class.html#test_write_filename">test_write_filename</a></code>,
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 44d3272..e3aee98 100644 (file)
       
     </td>
   </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="test_parse_utf8_bom"></a><span class="summary-sig-name">test_parse_utf8_bom</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="lxml.tests.test_io-pysrc.html#_IOTestCaseBase.test_parse_utf8_bom">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="test_iterparse_utf8_bom"></a><span class="summary-sig-name">test_iterparse_utf8_bom</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="lxml.tests.test_io-pysrc.html#_IOTestCaseBase.test_iterparse_utf8_bom">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type">&nbsp;</span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="test_iterparse_utf16_bom"></a><span class="summary-sig-name">test_iterparse_utf16_bom</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="lxml.tests.test_io-pysrc.html#_IOTestCaseBase.test_iterparse_utf16_bom">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
   <tr>
     <td colspan="2" class="summary">
     <p class="indent-wrapped-lines"><b>Inherited from <code><a href="lxml.tests.common_imports.HelperTestCase-class.html">common_imports.HelperTestCase</a></code></b>:
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4ddddb1..8a0bf40 100644 (file)
@@ -223,7 +223,7 @@ Test cases related to ISO-Schematron parsing and validation
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index feb5653..09d963d 100644 (file)
@@ -1612,7 +1612,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 955f618..a2c496c 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 98ab027..244196c 100644 (file)
@@ -224,7 +224,7 @@ namespace registry mechanism
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9f01fe9..3bf9304 100644 (file)
@@ -588,7 +588,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3f579be..ea6e0d7 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 38e7163..9099685 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 94d1b49..52a6106 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3269c39..972a379 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3855eed..7a3c113 100644 (file)
@@ -203,15 +203,15 @@ Tests specific to the lxml.objectify API
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a href="lxml.tests.test_objectify-module.html#objectclass2xsitype" class="summary-name">objectclass2xsitype</a> = <code title="{&lt;type 'lxml.objectify.FloatElement'&gt;: ('float', 'double'),
- &lt;type 'lxml.objectify.IntElement'&gt;: ('int',
+        <a href="lxml.tests.test_objectify-module.html#objectclass2xsitype" class="summary-name">objectclass2xsitype</a> = <code title="{&lt;type 'lxml.objectify.IntElement'&gt;: ('int',
                                       'short',
                                       'byte',
                                       'unsignedShort',
                                       'unsignedByte',
                                       'integer',
                                       'nonPositiveInteger',
-..."><code class="variable-group">{</code>&lt;type 'lxml.objectify.FloatElement'&gt;<code class="variable-op">: </code><code class="variable-group">(</code><code class="variable-ellipsis">...</code></code>
+                                      'negativeInteger',
+..."><code class="variable-group">{</code>&lt;type 'lxml.objectify.IntElement'&gt;<code class="variable-op">: </code><code class="variable-group">(</code><code class="variable-quote">'</code><code class="variable-string">i</code><code class="variable-ellipsis">...</code></code>
     </td>
   </tr>
 <tr>
@@ -233,10 +233,10 @@ Tests specific to the lxml.objectify API
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a href="lxml.tests.test_objectify-module.html#objectclass2pytype" class="summary-name">objectclass2pytype</a> = <code title="{&lt;type 'lxml.objectify.FloatElement'&gt;: 'float',
- &lt;type 'lxml.objectify.IntElement'&gt;: 'int',
- &lt;type 'lxml.objectify.BoolElement'&gt;: 'bool',
- &lt;type 'lxml.objectify.StringElement'&gt;: 'str'}"><code class="variable-group">{</code>&lt;type 'lxml.objectify.FloatElement'&gt;<code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">f</code><code class="variable-ellipsis">...</code></code>
+        <a href="lxml.tests.test_objectify-module.html#objectclass2pytype" class="summary-name">objectclass2pytype</a> = <code title="{&lt;type 'lxml.objectify.IntElement'&gt;: 'int',
+ &lt;type 'lxml.objectify.FloatElement'&gt;: 'float',
+ &lt;type 'lxml.objectify.StringElement'&gt;: 'str',
+ &lt;type 'lxml.objectify.BoolElement'&gt;: 'bool'}"><code class="variable-group">{</code>&lt;type 'lxml.objectify.IntElement'&gt;<code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">int</code><code class="variable-ellipsis">...</code></code>
     </td>
   </tr>
 <tr>
@@ -275,7 +275,7 @@ Tests specific to the lxml.objectify API
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a name="v"></a><span class="summary-name">v</span> = <code title="'NMTOKEN'"><code class="variable-quote">'</code><code class="variable-string">NMTOKEN</code><code class="variable-quote">'</code></code>
+        <a name="v"></a><span class="summary-name">v</span> = <code title="'double'"><code class="variable-quote">'</code><code class="variable-string">double</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 </table>
@@ -401,14 +401,14 @@ Tests specific to the lxml.objectify API
   <dl class="fields">
     <dt>Value:</dt>
       <dd><table><tr><td><pre class="variable">
-<code class="variable-group">{</code>&lt;type 'lxml.objectify.FloatElement'&gt;<code class="variable-op">: </code><code class="variable-group">(</code><code class="variable-quote">'</code><code class="variable-string">float</code><code class="variable-quote">'</code><code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">double</code><code class="variable-quote">'</code><code class="variable-group">)</code><code class="variable-op">,</code>
- &lt;type 'lxml.objectify.IntElement'&gt;<code class="variable-op">: </code><code class="variable-group">(</code><code class="variable-quote">'</code><code class="variable-string">int</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+<code class="variable-group">{</code>&lt;type 'lxml.objectify.IntElement'&gt;<code class="variable-op">: </code><code class="variable-group">(</code><code class="variable-quote">'</code><code class="variable-string">int</code><code class="variable-quote">'</code><code class="variable-op">,</code>
                                       <code class="variable-quote">'</code><code class="variable-string">short</code><code class="variable-quote">'</code><code class="variable-op">,</code>
                                       <code class="variable-quote">'</code><code class="variable-string">byte</code><code class="variable-quote">'</code><code class="variable-op">,</code>
                                       <code class="variable-quote">'</code><code class="variable-string">unsignedShort</code><code class="variable-quote">'</code><code class="variable-op">,</code>
                                       <code class="variable-quote">'</code><code class="variable-string">unsignedByte</code><code class="variable-quote">'</code><code class="variable-op">,</code>
                                       <code class="variable-quote">'</code><code class="variable-string">integer</code><code class="variable-quote">'</code><code class="variable-op">,</code>
                                       <code class="variable-quote">'</code><code class="variable-string">nonPositiveInteger</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+                                      <code class="variable-quote">'</code><code class="variable-string">negativeInteger</code><code class="variable-quote">'</code><code class="variable-op">,</code>
 <code class="variable-ellipsis">...</code>
 </pre></td></tr></table>
 </dd>
@@ -453,10 +453,10 @@ Tests specific to the lxml.objectify API
   <dl class="fields">
     <dt>Value:</dt>
       <dd><table><tr><td><pre class="variable">
-<code class="variable-group">{</code>&lt;type 'lxml.objectify.FloatElement'&gt;<code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">float</code><code class="variable-quote">'</code><code class="variable-op">,</code>
- &lt;type 'lxml.objectify.IntElement'&gt;<code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">int</code><code class="variable-quote">'</code><code class="variable-op">,</code>
- &lt;type 'lxml.objectify.BoolElement'&gt;<code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">bool</code><code class="variable-quote">'</code><code class="variable-op">,</code>
- &lt;type 'lxml.objectify.StringElement'&gt;<code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">str</code><code class="variable-quote">'</code><code class="variable-group">}</code>
+<code class="variable-group">{</code>&lt;type 'lxml.objectify.IntElement'&gt;<code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">int</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ &lt;type 'lxml.objectify.FloatElement'&gt;<code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">float</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ &lt;type 'lxml.objectify.StringElement'&gt;<code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">str</code><code class="variable-quote">'</code><code class="variable-op">,</code>
+ &lt;type 'lxml.objectify.BoolElement'&gt;<code class="variable-op">: </code><code class="variable-quote">'</code><code class="variable-string">bool</code><code class="variable-quote">'</code><code class="variable-group">}</code>
 </pre></td></tr></table>
 </dd>
   </dl>
@@ -541,7 +541,7 @@ Tests specific to the lxml.objectify API
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3999cec..3a5d776 100644 (file)
@@ -5643,7 +5643,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:06 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index df1b2cc..8466718 100644 (file)
@@ -3557,7 +3557,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7c56863..584a5e1 100644 (file)
@@ -265,7 +265,7 @@ Tests specific to the Python based class lookup.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ab27d57..ef4f461 100644 (file)
@@ -868,7 +868,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ccfa0b3..6187c06 100644 (file)
@@ -858,7 +858,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 94aa6b8..1ad99a5 100644 (file)
@@ -223,7 +223,7 @@ Test cases related to RelaxNG parsing and validation
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7535f4a..33473be 100644 (file)
@@ -542,7 +542,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a4b492a..8eee399 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 37b5583..24ead1f 100644 (file)
@@ -223,7 +223,7 @@ Test cases related to SAX I/O
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f0f2400..4630b09 100644 (file)
@@ -653,7 +653,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f59d268..c8595f3 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index da0b00a..56993a2 100644 (file)
@@ -223,7 +223,7 @@ Test cases related to Schematron parsing and validation
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0765660..d46f83b 100644 (file)
@@ -334,7 +334,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:06 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 33b4a2e..97eb4a1 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8317179..13fd900 100644 (file)
@@ -232,7 +232,7 @@ Tests for thread usage in lxml.etree.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4368e9c..c68051f 100644 (file)
@@ -1110,7 +1110,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7ae3c80..00bb6f1 100644 (file)
@@ -511,7 +511,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index cd76e7a..c0cac28 100644 (file)
@@ -292,7 +292,7 @@ the document to support relative Paths when looking up external entities
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9c00e1d..63b3363 100644 (file)
@@ -292,7 +292,7 @@ the document to support relative Paths when looking up external entities
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 975c44e..15f71e0 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 192ef93..e842f52 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6efd0ed..c908fc6 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f0d1717..c03574a 100644 (file)
@@ -321,7 +321,7 @@ from the args and kwargs arguments, respectively.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7a3ec0d..fcabe0d 100644 (file)
@@ -531,7 +531,7 @@ for XML.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c71833d..4e0bd9e 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index dbc0ac1..b6c3dc8 100644 (file)
@@ -453,7 +453,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:08 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1295dc8..ae9771b 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index dfa6ef9..e8ae94c 100644 (file)
@@ -230,7 +230,7 @@ Test cases related to XML Schema parsing and validation
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2f6222a..f138548 100644 (file)
@@ -1174,7 +1174,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 500055a..5b05506 100644 (file)
@@ -529,7 +529,7 @@ BytesIO(&quot;&quot;&quot;\
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c3db157..d701262 100644 (file)
@@ -284,7 +284,7 @@ opaque context object.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7240d59..f04bd0c 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e3c9bfc..4a4f57a 100644 (file)
@@ -424,7 +424,7 @@ tTest, (None, 'floatTest'): floatTest, (None, 'booleanTest'): booleanT\
 est, (None, 'setTest'): setTest, (None, 'setTest2'): setTest2, (None, \
 'argsTest1'): argsTest1, (None, 'argsTest2'): argsTest2, (None, 'resul\
 tTypesTest'): resultTypesTest, (None, 'resultTypesTest2'): resultTypes\
-Test2,}"><code class="variable-group">{</code><code class="variable-group">(</code>None<code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">argsTest1</code><code class="variable-quote">'</code><code class="variable-group">)</code><code class="variable-op">: </code>&lt;function argsTest1 at 0x3d4<code class="variable-ellipsis">...</code></code>
+Test2,}"><code class="variable-group">{</code><code class="variable-group">(</code>None<code class="variable-op">, </code><code class="variable-quote">'</code><code class="variable-string">argsTest1</code><code class="variable-quote">'</code><code class="variable-group">)</code><code class="variable-op">: </code>&lt;function argsTest1 at 0x4d2<code class="variable-ellipsis">...</code></code>
     </td>
   </tr>
 <tr>
@@ -552,7 +552,7 @@ Test2,}
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index faa907f..b9c7896 100644 (file)
@@ -1982,7 +1982,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 92a3648..d311a60 100644 (file)
@@ -358,7 +358,7 @@ Tests for the ETXPath class
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2c4eea6..b164243 100644 (file)
@@ -406,7 +406,7 @@ Tests for the XPath class
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f1ff932..a4f8d43 100644 (file)
@@ -408,7 +408,7 @@ Tests for the EXSLT support in XPath (requires libxslt 1.1.25+)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 30dfd7d..4849fdc 100644 (file)
@@ -1030,7 +1030,7 @@ XPath tests etree
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e12b52b..e2d3dff 100644 (file)
@@ -279,7 +279,7 @@ Test cases related to XSLT processing
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5933de5..8fd4835 100644 (file)
@@ -4158,7 +4158,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8aeeaa8..097a8ca 100644 (file)
@@ -502,7 +502,7 @@ EXSLT tests
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8944b2b..254422e 100644 (file)
@@ -566,7 +566,7 @@ Tests for extension elements in XSLT.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 948e84d..333b9b9 100644 (file)
@@ -374,7 +374,7 @@ Tests for XPath extension functions in XSLT.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 60e540e..be9fae9 100644 (file)
@@ -1142,7 +1142,7 @@ XSLT tests etree
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 02da2c4..da7312e 100644 (file)
@@ -420,7 +420,7 @@ s': {}}&gt;
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 75c4543..4f17ad2 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1276c5d..0b31077 100644 (file)
@@ -112,7 +112,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 48e5ed2..7064980 100644 (file)
@@ -363,7 +363,7 @@ contains some hooks for decoding encoded and multipart messages.
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f3983c3..f078f80 100644 (file)
@@ -155,7 +155,7 @@ namespace registry mechanism</em>    </li>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:24 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 352b451..6187112 100644 (file)
@@ -1628,7 +1628,7 @@ arguments start and end are interpreted as in slice notation.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8d1684b..9aa4be3 100644 (file)
@@ -657,9 +657,9 @@ hash(x)
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type">&nbsp;</span>
     </td><td class="summary">
-        <a href="xml.etree.ElementTree-module.html#_serialize" class="summary-name" onclick="show_private();">_serialize</a> = <code title="{'html': &lt;function _serialize_html at 0x2e6caa0&gt;,
- 'text': &lt;function _serialize_text at 0x2e6cb18&gt;,
- 'xml': &lt;function _serialize_xml at 0x2e6ca28&gt;}"><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">html</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;function _serialize_html at 0x2e6caa0&gt;<code class="variable-op">,</code><code class="variable-ellipsis">...</code></code>
+        <a href="xml.etree.ElementTree-module.html#_serialize" class="summary-name" onclick="show_private();">_serialize</a> = <code title="{'html': &lt;function _serialize_html at 0x41fa140&gt;,
+ 'text': &lt;function _serialize_text at 0x41fa1b8&gt;,
+ 'xml': &lt;function _serialize_xml at 0x41fa0c8&gt;}"><code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">html</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;function _serialize_html at 0x41fa140&gt;<code class="variable-op">,</code><code class="variable-ellipsis">...</code></code>
     </td>
   </tr>
 </table>
@@ -743,9 +743,9 @@ hash(x)
   <dl class="fields">
     <dt>Value:</dt>
       <dd><table><tr><td><pre class="variable">
-<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">html</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;function _serialize_html at 0x2e6caa0&gt;<code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">text</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;function _serialize_text at 0x2e6cb18&gt;<code class="variable-op">,</code>
- <code class="variable-quote">'</code><code class="variable-string">xml</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;function _serialize_xml at 0x2e6ca28&gt;<code class="variable-group">}</code>
+<code class="variable-group">{</code><code class="variable-quote">'</code><code class="variable-string">html</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;function _serialize_html at 0x41fa140&gt;<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">text</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;function _serialize_text at 0x41fa1b8&gt;<code class="variable-op">,</code>
+ <code class="variable-quote">'</code><code class="variable-string">xml</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;function _serialize_xml at 0x41fa0c8&gt;<code class="variable-group">}</code>
 </pre></td></tr></table>
 </dd>
   </dl>
@@ -783,7 +783,7 @@ hash(x)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:04 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e4cac09..5d393c0 100644 (file)
@@ -2997,7 +2997,7 @@ expandto(location.href);
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:07 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a7d0997..50eb1d5 100644 (file)
@@ -729,7 +729,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index fd27f72..631412e 100644 (file)
@@ -423,7 +423,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5c7679b..e84ff40 100644 (file)
@@ -192,7 +192,7 @@ exceptions.BaseException --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2df9721..4c536be 100644 (file)
@@ -324,7 +324,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 696d487..92b1d83 100644 (file)
@@ -309,7 +309,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f363de8..296c451 100644 (file)
@@ -475,7 +475,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4d43e4f..e8fbfd8 100644 (file)
@@ -263,7 +263,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0dec52f..dbb10e4 100644 (file)
@@ -241,7 +241,7 @@ object --+
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun Jan 26 08:17:05 2014
+    Generated by Epydoc 3.0.1 on Wed Feb 12 09:52:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 589cc84..b22c825 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="how-to-build-lxml-from-source">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu current" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">How to build lxml from source</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu current" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">How to build lxml from source</h1>
 
 <p>To build lxml from source, you need libxml2 and libxslt properly
 installed, <em>including the header files</em>.  These are likely shipped in
@@ -21,7 +21,7 @@ you must install before trying to build lxml.</p>
 <li><a class="reference internal" href="#github-git-and-hg" id="id3">Github, git and hg</a></li>
 <li><a class="reference internal" href="#building-the-sources" id="id4">Building the sources</a></li>
 <li><a class="reference internal" href="#running-the-tests-and-reporting-errors" id="id5">Running the tests and reporting errors</a></li>
-<li><a class="reference internal" href="#building-an-egg" id="id6">Building an egg</a></li>
+<li><a class="reference internal" href="#building-an-egg-or-wheel" id="id6">Building an egg or wheel</a></li>
 <li><a class="reference internal" href="#building-lxml-on-macos-x" id="id7">Building lxml on MacOS-X</a></li>
 <li><a class="reference internal" href="#static-linking-on-windows" id="id8">Static linking on Windows</a></li>
 <li><a class="reference internal" href="#building-debian-packages-from-svn-sources" id="id9">Building Debian packages from SVN sources</a></li>
@@ -45,8 +45,9 @@ developer sources (e.g. to test a bug fix that has not been release
 yet) or if you want to be an lxml developer, then you do need a
 working Cython installation.  You can use <a class="reference external" href="http://pypi.python.org/pypi/pip">pip</a> to install it:</p>
 <pre class="literal-block">
-pip install "Cython&gt;=0.20"
+pip install -r requirements.txt
 </pre>
+<p><a class="reference external" href="https://github.com/lxml/lxml/blob/master/requirements.txt">https://github.com/lxml/lxml/blob/master/requirements.txt</a></p>
 <p>lxml currently requires at least Cython 0.20, later release versions
 should work as well.</p>
 </div>
@@ -152,21 +153,41 @@ like to know.  Please contact us on the <a class="reference external" href="http
 the version of lxml, libxml2, libxslt and Python you were using, as well as
 your operating system type (Linux, Windows, MacOS-X, ...).</p>
 </div>
-<div class="section" id="building-an-egg">
-<h1>Building an egg</h1>
-<p>This is the procedure to make an lxml egg for your platform (assuming
-that you have "setuptools" or "distribute" installed):</p>
-<ul class="simple">
-<li>Download the lxml-x.y.tar.gz release.  This contains the pregenerated C so
-that you can be sure you build exactly from the release sources.  Unpack
-them and cd into the resulting directory.</li>
-<li>python setup.py build</li>
-<li>If you're on a unixy platform, cd into <tt class="docutils literal">build/lib.your.platform</tt> and strip
-any <tt class="docutils literal">.so</tt> file you find there.  This reduces the size of the egg
-considerably.</li>
-<li><tt class="docutils literal">python setup.py bdist_egg</tt></li>
-</ul>
-<p>This will put the egg into the <tt class="docutils literal">dist</tt> directory.</p>
+<div class="section" id="building-an-egg-or-wheel">
+<h1>Building an egg or wheel</h1>
+<p>This is the procedure to make an lxml egg or <a class="reference external" href="http://wheel.readthedocs.org/en/latest/">wheel</a> for your platform.
+It assumes that you have <tt class="docutils literal">setuptools</tt> or <tt class="docutils literal">distribute</tt> installed, as well
+as the <tt class="docutils literal">wheel</tt> package.</p>
+<p>First, download the lxml-x.y.tar.gz release.  This contains the pregenerated
+C files so that you can be sure you build exactly from the release sources.
+Unpack them and <tt class="docutils literal">cd</tt> into the resulting directory.  Then, to build a wheel,
+simply run the command</p>
+<pre class="literal-block">
+python setup.py bdist_wheel
+</pre>
+<p>or, to build a statically linked wheel with all of libxml2, libxslt and
+friends compiled in, run</p>
+<blockquote>
+python setup.py bdist_wheel --static-deps</blockquote>
+<p>The resulting .whl file will be written into the <tt class="docutils literal">dist</tt> directory.</p>
+<p>To build an egg file, run</p>
+<pre class="literal-block">
+python setup.py build_egg
+</pre>
+<p>If you are on a Unix-like platform, you can first build the extension modules
+using</p>
+<pre class="literal-block">
+python setup.py build
+</pre>
+<p>and then <tt class="docutils literal">cd</tt> into the directory <tt class="docutils literal">build/lib.your.platform</tt> to call
+<tt class="docutils literal">strip</tt> on any <tt class="docutils literal">.so</tt> file you find there.  This reduces the size of
+the binary distribution considerably.  Then, from the package root directory,
+call</p>
+<pre class="literal-block">
+python setup.py bdist_egg
+</pre>
+<p>This will quickly package the pre-built packages into an egg file and
+drop it into the <tt class="docutils literal">dist</tt> directory.</p>
 </div>
 <div class="section" id="building-lxml-on-macos-x">
 <h1>Building lxml on MacOS-X</h1>
@@ -310,7 +331,7 @@ installed using <tt class="docutils literal">dpkg <span class="pre">-i</span></t
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 10c61c9..77dab15 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="the-public-c-api-of-lxml-etree">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu current" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">The public C-API of lxml.etree</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu current" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">The public C-API of lxml.etree</h1>
 
 <p>As of version 1.1, lxml.etree provides a public C-API.  This allows external
 C extensions to efficiently access public functions and classes of lxml,
@@ -94,7 +94,7 @@ includes may not be sufficient.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
similarity index 99%
rename from doc/html/changes-3.3.0.html
rename to doc/html/changes-3.3.1.html
index 4a8af8b..3c52048 100644 (file)
 <h1 class="title">lxml changelog</h1>
 
 <div class="section" id="id1">
-<h1>3.3.0 (2014-01-26)</h1>
+<h1>3.3.1 (2014-02-12)</h1>
 <div class="section" id="features-added">
 <h2>Features added</h2>
 </div>
 <div class="section" id="bugs-fixed">
 <h2>Bugs fixed</h2>
 <ul class="simple">
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1014290">LP#1014290</a>: HTML documents parsed with <tt class="docutils literal">parser.feed()</tt> failed to find
+elements during tag iteration.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1273709">LP#1273709</a>: Building in PyPy failed due to missing support for
+<tt class="docutils literal">PyUnicode_Compare()</tt> and <tt class="docutils literal"><span class="pre">PyByteArray_*()</span></tt> in PyPy's C-API.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1274413">LP#1274413</a>: Compilation in MSVC failed due to missing &quot;stdint.h&quot; standard
+header file.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1274118">LP#1274118</a>: iterparse() failed to parse BOM prefixed files.</li>
+</ul>
+</div>
+<div class="section" id="other-changes">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id2">
+<h1>3.3.0 (2014-01-26)</h1>
+<div class="section" id="id3">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id4">
+<h2>Bugs fixed</h2>
+<ul class="simple">
 <li>The heuristic that distinguishes file paths from URLs was tightened
 to produce less false negatives.</li>
 </ul>
 </div>
-<div class="section" id="other-changes">
+<div class="section" id="id5">
 <h2>Other changes</h2>
 </div>
 </div>
 <div class="section" id="beta5-2014-01-18">
 <h1>3.3.0beta5 (2014-01-18)</h1>
-<div class="section" id="id2">
+<div class="section" id="id6">
 <h2>Features added</h2>
 <ul class="simple">
 <li>The PEP 393 unicode parsing support gained a fallback for wchar strings
 which might still be somewhat common on Windows systems.</li>
 </ul>
 </div>
-<div class="section" id="id3">
+<div class="section" id="id7">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Several error handling problems were fixed throughout the code base that
@@ -49,7 +70,7 @@ propagate exceptions (its return type is <tt class="docutils literal">void</tt>)
 parsing the string character by character.</li>
 </ul>
 </div>
-<div class="section" id="id4">
+<div class="section" id="id8">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Document cleanup code was simplified using the new GC features in
@@ -59,10 +80,10 @@ Cython 0.20.</li>
 </div>
 <div class="section" id="beta4-2014-01-12">
 <h1>3.3.0beta4 (2014-01-12)</h1>
-<div class="section" id="id5">
+<div class="section" id="id9">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id6">
+<div class="section" id="id10">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>The (empty) value returned by the <tt class="docutils literal">attrib</tt> property of Entity and Comment
@@ -75,7 +96,7 @@ and keyword arguments could modify the mapping passed as <tt class="docutils lit
 the docinfo property) lost their attribute declarations.</li>
 </ul>
 </div>
-<div class="section" id="id7">
+<div class="section" id="id11">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Built with Cython 0.20pre (gitrev 012ae82eb) to prepare support for
@@ -85,39 +106,39 @@ Python 3.4.</li>
 </div>
 <div class="section" id="beta3-2014-01-02">
 <h1>3.3.0beta3 (2014-01-02)</h1>
-<div class="section" id="id8">
+<div class="section" id="id12">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Unicode string parsing was optimised for Python 3.3 (PEP 393).</li>
 </ul>
 </div>
-<div class="section" id="id9">
+<div class="section" id="id13">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>HTML parsing of Unicode strings could misdecode the input on some platforms.</li>
 <li>Crash in xmlfile() when closing open elements out of order in an error case.</li>
 </ul>
 </div>
-<div class="section" id="id10">
+<div class="section" id="id14">
 <h2>Other changes</h2>
 </div>
 </div>
 <div class="section" id="beta2-2013-12-20">
 <h1>3.3.0beta2 (2013-12-20)</h1>
-<div class="section" id="id11">
+<div class="section" id="id15">
 <h2>Features added</h2>
 <ul class="simple">
 <li><tt class="docutils literal">iterparse()</tt> supports the <tt class="docutils literal">recover</tt> option.</li>
 </ul>
 </div>
-<div class="section" id="id12">
+<div class="section" id="id16">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash in <tt class="docutils literal">iterparse()</tt> for HTML parsing.</li>
 <li>Crash in target parsing with attributes.</li>
 </ul>
 </div>
-<div class="section" id="id13">
+<div class="section" id="id17">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>The safety check in the read-only tree implementation (e.g. used by
@@ -130,7 +151,7 @@ behaviour.</li>
 </div>
 <div class="section" id="beta1-2013-12-12">
 <h1>3.3.0beta1 (2013-12-12)</h1>
-<div class="section" id="id14">
+<div class="section" id="id18">
 <h2>Features added</h2>
 <ul class="simple">
 <li>New option <tt class="docutils literal">handle_failures</tt> in <tt class="docutils literal">make_links_absolute()</tt> and
@@ -142,7 +163,7 @@ incremental parsing, as implemented for ElementTree in Python 3.4.</li>
 (<tt class="docutils literal">html=True</tt>).</li>
 </ul>
 </div>
-<div class="section" id="id15">
+<div class="section" id="id19">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1255132">LP#1255132</a>: crash when trying to run validation over non-Element (e.g.
@@ -164,7 +185,7 @@ The textarea used to be cleared before the new content was set,
 which removed the name attribute.</li>
 </ul>
 </div>
-<div class="section" id="id16">
+<div class="section" id="id20">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Some basic API classes use freelists internally for faster
@@ -175,12 +196,12 @@ classes internally instead of being a parser itself.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id17">
+<div class="section" id="id21">
 <h1>3.2.5 (2014-01-02)</h1>
-<div class="section" id="id18">
+<div class="section" id="id22">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id19">
+<div class="section" id="id23">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash in xmlfile() when closing open elements out of order in an error case.</li>
@@ -189,16 +210,16 @@ classes internally instead of being a parser itself.</li>
 comment or PI).</li>
 </ul>
 </div>
-<div class="section" id="id21">
+<div class="section" id="id25">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id22">
+<div class="section" id="id26">
 <h1>3.2.4 (2013-11-07)</h1>
-<div class="section" id="id23">
+<div class="section" id="id27">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id24">
+<div class="section" id="id28">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Memory leak when creating an XPath evaluator in a thread.</li>
@@ -209,32 +230,32 @@ to one of its own descendants.</li>
 <li>Compressed plain-text serialisation to file-like objects was broken.</li>
 </ul>
 </div>
-<div class="section" id="id27">
+<div class="section" id="id31">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id28">
+<div class="section" id="id32">
 <h1>3.2.3 (2013-07-28)</h1>
-<div class="section" id="id29">
+<div class="section" id="id33">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Fix support for Python 2.4 which was lost in 3.2.2.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id30">
+<div class="section" id="id34">
 <h1>3.2.2 (2013-07-28)</h1>
-<div class="section" id="id31">
+<div class="section" id="id35">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id32">
+<div class="section" id="id36">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1185701">LP#1185701</a>: spurious XMLSyntaxError after finishing iterparse().</li>
 <li>Crash in lxml.objectify during xsi annotation.</li>
 </ul>
 </div>
-<div class="section" id="id33">
+<div class="section" id="id37">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Return values of user provided element class lookup methods are now
@@ -243,9 +264,9 @@ API class mismatches.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id34">
+<div class="section" id="id38">
 <h1>3.2.1 (2013-05-11)</h1>
-<div class="section" id="id35">
+<div class="section" id="id39">
 <h2>Features added</h2>
 <ul class="simple">
 <li>The methods <tt class="docutils literal">apply_templates()</tt> and <tt class="docutils literal">process_children()</tt> of XSLT
@@ -254,7 +275,7 @@ and <tt class="docutils literal">remove_blank_text</tt> that discard either all
 strings from the result list.</li>
 </ul>
 </div>
-<div class="section" id="id36">
+<div class="section" id="id40">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>When moving Elements to another tree, the namespace cleanup mechanism
@@ -267,16 +288,16 @@ to a crash.</li>
 crashed.</li>
 </ul>
 </div>
-<div class="section" id="id37">
+<div class="section" id="id41">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id38">
+<div class="section" id="id42">
 <h1>3.2.0 (2013-04-28)</h1>
-<div class="section" id="id39">
+<div class="section" id="id43">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id40">
+<div class="section" id="id44">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/690319">LP#690319</a>: Leading whitespace could change the behaviour of the string
@@ -295,16 +316,16 @@ of overwriting the current value.</li>
 allowed by the user provided whitelist.  Patch by Christine Koppelt.</li>
 </ul>
 </div>
-<div class="section" id="id41">
+<div class="section" id="id45">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id42">
+<div class="section" id="id46">
 <h1>3.1.2 (2013-04-12)</h1>
-<div class="section" id="id43">
+<div class="section" id="id47">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id44">
+<div class="section" id="id48">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1136509">LP#1136509</a>: Passing attributes through the namespace-unaware API of
@@ -316,16 +337,16 @@ the result tree to a Unicode string.</li>
 by properly exported API function <tt class="docutils literal">xmlBufUse()</tt>.</li>
 </ul>
 </div>
-<div class="section" id="id45">
+<div class="section" id="id49">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id46">
+<div class="section" id="id50">
 <h1>3.1.1 (2013-03-29)</h1>
-<div class="section" id="id47">
+<div class="section" id="id51">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id48">
+<div class="section" id="id52">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1160386">LP#1160386</a>: Write access to <tt class="docutils literal">lxml.html.FormElement.fields</tt> raised
@@ -333,7 +354,7 @@ an AttributeError in Py3.</li>
 <li>Illegal memory access during cleanup in incremental xmlfile writer.</li>
 </ul>
 </div>
-<div class="section" id="id49">
+<div class="section" id="id53">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>The externally useless class <tt class="docutils literal">lxml.etree._BaseParser</tt> was removed
@@ -341,16 +362,16 @@ from the module dict.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id50">
+<div class="section" id="id54">
 <h1>3.1.0 (2013-02-10)</h1>
-<div class="section" id="id51">
+<div class="section" id="id55">
 <h2>Features added</h2>
 <ul class="simple">
 <li><a class="reference external" href="https://github.com/lxml/lxml/issues/89">GH#89</a>: lxml.html.clean allows overriding the set of attributes that it
 considers 'safe'.  Patch by Francis Devereux.</li>
 </ul>
 </div>
-<div class="section" id="id52">
+<div class="section" id="id56">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1104370">LP#1104370</a>: <tt class="docutils literal">copy.copy(el.attrib)</tt> raised an exception.  It now returns
@@ -363,13 +384,13 @@ in for the current run.</li>
 without threading support.  Patch by Ulrich Seidl.</li>
 </ul>
 </div>
-<div class="section" id="id53">
+<div class="section" id="id57">
 <h2>Other changes</h2>
 </div>
 </div>
 <div class="section" id="beta1-2012-12-21">
 <h1>3.1beta1 (2012-12-21)</h1>
-<div class="section" id="id54">
+<div class="section" id="id58">
 <h2>Features added</h2>
 <ul class="simple">
 <li>New build-time option <tt class="docutils literal"><span class="pre">--with-unicode-strings</span></tt> for Python 2 that
@@ -380,7 +401,7 @@ instead of byte strings for plain ASCII content.</li>
 tags with non-identifier names without having to resort to getattr().</li>
 </ul>
 </div>
-<div class="section" id="id55">
+<div class="section" id="id59">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>When starting from a non-namespaced element in lxml.objectify, searching
@@ -392,7 +413,7 @@ the search to non-namespaced children.</li>
 <li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1080792">LP#1080792</a>: Static build of libxml2 2.9.0 failed due to missing file.</li>
 </ul>
 </div>
-<div class="section" id="id56">
+<div class="section" id="id60">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>The externally useless class <tt class="docutils literal">_ObjectifyElementMakerCaller</tt> was
@@ -402,27 +423,27 @@ many children.  Patch by Anders Hammarquist.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id57">
+<div class="section" id="id61">
 <h1>3.0.2 (2012-12-14)</h1>
-<div class="section" id="id58">
+<div class="section" id="id62">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id59">
+<div class="section" id="id63">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Fix crash during interpreter shutdown by switching to Cython 0.17.3 for building.</li>
 </ul>
 </div>
-<div class="section" id="id60">
+<div class="section" id="id64">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id61">
+<div class="section" id="id65">
 <h1>3.0.1 (2012-10-14)</h1>
-<div class="section" id="id62">
+<div class="section" id="id66">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id63">
+<div class="section" id="id67">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1065924">LP#1065924</a>: Element proxies could disappear during garbage collection
@@ -431,16 +452,16 @@ in PyPy without proper cleanup.</li>
 <li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1065139">LP#1065139</a>: static MacOS-X build failed in Py3.</li>
 </ul>
 </div>
-<div class="section" id="id64">
+<div class="section" id="id68">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id65">
+<div class="section" id="id69">
 <h1>3.0 (2012-10-08)</h1>
-<div class="section" id="id66">
+<div class="section" id="id70">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id67">
+<div class="section" id="id71">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>End-of-file handling was incorrect in iterparse() when reading from
@@ -448,7 +469,7 @@ a low-level C file stream and failed in libxml2 2.9.0 due to its
 improved consistency checks.</li>
 </ul>
 </div>
-<div class="section" id="id68">
+<div class="section" id="id72">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>The build no longer uses Cython by default unless the generated C files
@@ -461,21 +482,21 @@ run special setup.py commands that do not actually run a build), pass
 </div>
 <div class="section" id="beta1-2012-09-26">
 <h1>3.0beta1 (2012-09-26)</h1>
-<div class="section" id="id69">
+<div class="section" id="id73">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Python level access to (optional) libxml2 memory debugging features
 to simplify debugging of memory leaks etc.</li>
 </ul>
 </div>
-<div class="section" id="id70">
+<div class="section" id="id74">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Fix a memory leak in XPath by switching to Cython 0.17.1.</li>
 <li>Some tests were adapted to work with PyPy.</li>
 </ul>
 </div>
-<div class="section" id="id71">
+<div class="section" id="id75">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>The code was adapted to work with the upcoming libxml2 2.9.0 release.</li>
@@ -484,7 +505,7 @@ to simplify debugging of memory leaks etc.</li>
 </div>
 <div class="section" id="alpha2-2012-08-23">
 <h1>3.0alpha2 (2012-08-23)</h1>
-<div class="section" id="id72">
+<div class="section" id="id76">
 <h2>Features added</h2>
 <ul class="simple">
 <li>The <tt class="docutils literal">.iter()</tt> method of elements now accepts <tt class="docutils literal">tag</tt> arguments like
@@ -503,20 +524,20 @@ and <tt class="docutils literal">.itertext()</tt> methods;the <tt class="docutil
 to top-level during exclusive serialisation.</li>
 </ul>
 </div>
-<div class="section" id="id73">
+<div class="section" id="id77">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Passing long Unicode strings into the <tt class="docutils literal">feed()</tt> parser interface
 failed to read the entire string.</li>
 </ul>
 </div>
-<div class="section" id="id74">
+<div class="section" id="id78">
 <h2>Other changes</h2>
 </div>
 </div>
 <div class="section" id="alpha1-2012-07-31">
 <h1>3.0alpha1 (2012-07-31)</h1>
-<div class="section" id="id75">
+<div class="section" id="id79">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Initial support for building in PyPy (through cpyext).</li>
@@ -532,7 +553,7 @@ argument supports passing a set of tags.  Tree nodes will be
 returned by the iterators if they match any of the tags.</li>
 </ul>
 </div>
-<div class="section" id="id76">
+<div class="section" id="id80">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>The <tt class="docutils literal"><span class="pre">.find*()</span></tt> methods in <tt class="docutils literal">lxml.objectify</tt> no longer use XPath
@@ -559,7 +580,7 @@ constructor would fail with an exception, stating that the text
 cannot be modified.</li>
 </ul>
 </div>
-<div class="section" id="id77">
+<div class="section" id="id81">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>The code base was overhauled to properly use 'const' where the API
@@ -608,44 +629,44 @@ _XSLTResultTree, _XSLTProcessingInstruction</tt></li>
 </ul>
 </div>
 </div>
-<div class="section" id="id78">
+<div class="section" id="id82">
 <h1>2.3.6 (2012-09-28)</h1>
-<div class="section" id="id79">
+<div class="section" id="id83">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id80">
+<div class="section" id="id84">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Passing long Unicode strings into the <tt class="docutils literal">feed()</tt> parser interface
 failed to read the entire string.</li>
 </ul>
 </div>
-<div class="section" id="id81">
+<div class="section" id="id85">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id82">
+<div class="section" id="id86">
 <h1>2.3.5 (2012-07-31)</h1>
-<div class="section" id="id83">
+<div class="section" id="id87">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id84">
+<div class="section" id="id88">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash when merging text nodes in <tt class="docutils literal">element.remove()</tt>.</li>
 <li>Crash in sax/target parser when reporting empty doctype.</li>
 </ul>
 </div>
-<div class="section" id="id85">
+<div class="section" id="id89">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id86">
+<div class="section" id="id90">
 <h1>2.3.4 (2012-03-26)</h1>
-<div class="section" id="id87">
+<div class="section" id="id91">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id88">
+<div class="section" id="id92">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash when building an nsmap (Element property) with empty
@@ -655,20 +676,20 @@ during threaded XSLT processing.</li>
 <li>XSLT stylesheet compilation could ignore compilation errors.</li>
 </ul>
 </div>
-<div class="section" id="id89">
+<div class="section" id="id93">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id90">
+<div class="section" id="id94">
 <h1>2.3.3 (2012-01-04)</h1>
-<div class="section" id="id91">
+<div class="section" id="id95">
 <h2>Features added</h2>
 <ul class="simple">
 <li><tt class="docutils literal">lxml.html.tostring()</tt> gained new serialisation options
 <tt class="docutils literal">with_tail</tt> and <tt class="docutils literal">doctype</tt>.</li>
 </ul>
 </div>
-<div class="section" id="id92">
+<div class="section" id="id96">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Fixed a crash when using <tt class="docutils literal">iterparse()</tt> for HTML parsing and
@@ -682,13 +703,13 @@ Patch by Simon Sapin.</li>
 'img' tags without 'src' attribute.</li>
 </ul>
 </div>
-<div class="section" id="id93">
+<div class="section" id="id97">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id94">
+<div class="section" id="id98">
 <h1>2.3.2 (2011-11-11)</h1>
-<div class="section" id="id95">
+<div class="section" id="id99">
 <h2>Features added</h2>
 <ul class="simple">
 <li><tt class="docutils literal">lxml.objectify.deannotate()</tt> has a new boolean option
@@ -700,7 +721,7 @@ copy of <tt class="docutils literal">etree.SubElement</tt> to avoid an otherwise
 of <tt class="docutils literal">lxml.etree</tt> on the user side.</li>
 </ul>
 </div>
-<div class="section" id="id96">
+<div class="section" id="id100">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Fixed the &quot;descendant&quot; bug in cssselect a second time (after a first
@@ -715,13 +736,13 @@ a descendant combinator. For example, &quot;div&gt; .foo&quot; was parsed the sa
 &quot;div&gt;* .foo&quot; instead of &quot;div&gt;.foo&quot;. Patch by Simon Sapin.</li>
 </ul>
 </div>
-<div class="section" id="id97">
+<div class="section" id="id101">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id98">
+<div class="section" id="id102">
 <h1>2.3.1 (2011-09-25)</h1>
-<div class="section" id="id99">
+<div class="section" id="id103">
 <h2>Features added</h2>
 <ul class="simple">
 <li>New option <tt class="docutils literal">kill_tags</tt> in <tt class="docutils literal">lxml.html.clean</tt> to remove specific
@@ -739,7 +760,7 @@ closed after reading or not.  By default, the file will be closed,
 as the user is not expected to keep a reference to it.</li>
 </ul>
 </div>
-<div class="section" id="id100">
+<div class="section" id="id104">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>HTML cleaning didn't remove 'data:' links.</li>
@@ -767,7 +788,7 @@ collected form values.</li>
 field properly selects them and unselects them.</li>
 </ul>
 </div>
-<div class="section" id="id101">
+<div class="section" id="id105">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Static builds can specify the download directory with the
@@ -775,16 +796,16 @@ field properly selects them and unselects them.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id102">
+<div class="section" id="id106">
 <h1>2.3 (2011-02-06)</h1>
-<div class="section" id="id103">
+<div class="section" id="id107">
 <h2>Features added</h2>
 <ul class="simple">
 <li>When looking for children, <tt class="docutils literal">lxml.objectify</tt> takes '{}tag' as
 meaning an empty namespace, as opposed to the parent namespace.</li>
 </ul>
 </div>
-<div class="section" id="id104">
+<div class="section" id="id108">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>When finished reading from a file-like object, the parser
@@ -797,7 +818,7 @@ in libxml2 2.7.8).</li>
 <li><tt class="docutils literal">marque</tt> tag in HTML cleanup code is correctly named <tt class="docutils literal">marquee</tt>.</li>
 </ul>
 </div>
-<div class="section" id="id105">
+<div class="section" id="id109">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Some public functions in the Cython-level C-API have more explicit
@@ -807,10 +828,10 @@ return types.</li>
 </div>
 <div class="section" id="beta1-2010-09-06">
 <h1>2.3beta1 (2010-09-06)</h1>
-<div class="section" id="id106">
+<div class="section" id="id110">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id107">
+<div class="section" id="id111">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash in newer libxml2 versions when moving elements between
@@ -822,23 +843,23 @@ documents that had attributes on replaced XInclude nodes.</li>
 use of os.tempnam.  It now takes an optional 'encoding' parameter.</li>
 </ul>
 </div>
-<div class="section" id="id108">
+<div class="section" id="id112">
 <h2>Other changes</h2>
 </div>
 </div>
 <div class="section" id="alpha2-2010-07-24">
 <h1>2.3alpha2 (2010-07-24)</h1>
-<div class="section" id="id109">
+<div class="section" id="id113">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id110">
+<div class="section" id="id114">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash in XSLT when generating text-only result documents with a
 stylesheet created in a different thread.</li>
 </ul>
 </div>
-<div class="section" id="id111">
+<div class="section" id="id115">
 <h2>Other changes</h2>
 <ul class="simple">
 <li><tt class="docutils literal">repr()</tt> of Element objects shows the hex ID with leading 0x
@@ -848,7 +869,7 @@ stylesheet created in a different thread.</li>
 </div>
 <div class="section" id="alpha1-2010-06-19">
 <h1>2.3alpha1 (2010-06-19)</h1>
-<div class="section" id="id112">
+<div class="section" id="id116">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Keyword argument <tt class="docutils literal">namespaces</tt> in <tt class="docutils literal">lxml.cssselect.CSSSelector()</tt>
@@ -899,7 +920,7 @@ the document on submit.</li>
 (compatible with ElementTree).</li>
 </ul>
 </div>
-<div class="section" id="id113">
+<div class="section" id="id117">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>API is hardened against invalid proxy instances to prevent crashes
@@ -933,7 +954,7 @@ parsing failed.  Now it is guaranteed that <tt class="docutils literal">.close()
 called after parsing, regardless of the outcome.</li>
 </ul>
 </div>
-<div class="section" id="id114">
+<div class="section" id="id118">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Official support for Python 3.1.2 and later.</li>
@@ -946,9 +967,9 @@ collector to clean up.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id115">
+<div class="section" id="id119">
 <h1>2.2.8 (2010-09-02)</h1>
-<div class="section" id="id116">
+<div class="section" id="id120">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash in newer libxml2 versions when moving elements between
@@ -957,9 +978,9 @@ documents that had attributes on replaced XInclude nodes.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id117">
+<div class="section" id="id121">
 <h1>2.2.7 (2010-07-24)</h1>
-<div class="section" id="id118">
+<div class="section" id="id122">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash in XSLT when generating text-only result documents with a
@@ -967,25 +988,25 @@ stylesheet created in a different thread.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id119">
+<div class="section" id="id123">
 <h1>2.2.6 (2010-03-02)</h1>
-<div class="section" id="id120">
+<div class="section" id="id124">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Fixed several Python 3 regressions by building with Cython 0.11.3.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id121">
+<div class="section" id="id125">
 <h1>2.2.5 (2010-02-28)</h1>
-<div class="section" id="id122">
+<div class="section" id="id126">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Support for running XSLT extension elements on the input root node
 (e.g. in a template matching on &quot;/&quot;).</li>
 </ul>
 </div>
-<div class="section" id="id123">
+<div class="section" id="id127">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash in XPath evaluation when reading smart strings from a document
@@ -1004,21 +1025,21 @@ an element.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id124">
+<div class="section" id="id128">
 <h1>2.2.4 (2009-11-11)</h1>
-<div class="section" id="id125">
+<div class="section" id="id129">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Static build of libxml2/libxslt was broken.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id126">
+<div class="section" id="id130">
 <h1>2.2.3 (2009-10-30)</h1>
-<div class="section" id="id127">
+<div class="section" id="id131">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id128">
+<div class="section" id="id132">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>The <tt class="docutils literal">resolve_entities</tt> option did not work in the incremental feed
@@ -1051,13 +1072,13 @@ namespaces when annotation is disabled.</li>
 <li>Diverting the error logging to Python's logging system was broken.</li>
 </ul>
 </div>
-<div class="section" id="id129">
+<div class="section" id="id133">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id130">
+<div class="section" id="id134">
 <h1>2.2.2 (2009-06-21)</h1>
-<div class="section" id="id131">
+<div class="section" id="id135">
 <h2>Features added</h2>
 <ul class="simple">
 <li>New helper functions <tt class="docutils literal">strip_attributes()</tt>, <tt class="docutils literal">strip_elements()</tt>,
@@ -1065,7 +1086,7 @@ namespaces when annotation is disabled.</li>
 from a subtree.</li>
 </ul>
 </div>
-<div class="section" id="id132">
+<div class="section" id="id136">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Namespace cleanup on subtree insertions could result in missing
@@ -1079,13 +1100,13 @@ BoolElement ({True, False, T, F, t, f} not any more), restoring lxml &lt;= 2.0
 behaviour.</li>
 </ul>
 </div>
-<div class="section" id="id133">
+<div class="section" id="id137">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id134">
+<div class="section" id="id138">
 <h1>2.2.1 (2009-06-02)</h1>
-<div class="section" id="id135">
+<div class="section" id="id139">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Injecting default attributes into a document during XML Schema
@@ -1094,7 +1115,7 @@ validation (also at parse time).</li>
 restrictions imposed by libxml2 2.7.</li>
 </ul>
 </div>
-<div class="section" id="id136">
+<div class="section" id="id140">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>The script for statically building libxml2 and libxslt didn't work
@@ -1103,13 +1124,13 @@ in Py3.</li>
 for parsing (which could lead to a crash before release 2.6.24).</li>
 </ul>
 </div>
-<div class="section" id="id137">
+<div class="section" id="id141">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id138">
+<div class="section" id="id142">
 <h1>2.2 (2009-03-21)</h1>
-<div class="section" id="id139">
+<div class="section" id="id143">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Support for <tt class="docutils literal">standalone</tt> flag in XML declaration through
@@ -1117,7 +1138,7 @@ for parsing (which could lead to a crash before release 2.6.24).</li>
 on serialisation.</li>
 </ul>
 </div>
-<div class="section" id="id140">
+<div class="section" id="id144">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash when parsing an XML Schema with external imports from a
@@ -1127,7 +1148,7 @@ filename.</li>
 </div>
 <div class="section" id="beta4-2009-02-27">
 <h1>2.2beta4 (2009-02-27)</h1>
-<div class="section" id="id141">
+<div class="section" id="id145">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Support strings and instantiable Element classes as child arguments
@@ -1136,7 +1157,7 @@ to the constructor of custom Element classes.</li>
 objects.</li>
 </ul>
 </div>
-<div class="section" id="id142">
+<div class="section" id="id146">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Deep-copying an ElementTree copied neither its sibling PIs and
@@ -1151,7 +1172,7 @@ to a problem in Cython, not lxml itself.</li>
 was evaluated incorrectly.</li>
 </ul>
 </div>
-<div class="section" id="id143">
+<div class="section" id="id147">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Official support for Python 3.0.1.</li>
@@ -1162,14 +1183,14 @@ for Elements without text content.</li>
 </div>
 <div class="section" id="beta3-2009-02-17">
 <h1>2.2beta3 (2009-02-17)</h1>
-<div class="section" id="id144">
+<div class="section" id="id148">
 <h2>Features added</h2>
 <ul class="simple">
 <li><tt class="docutils literal">XSLT.strparam()</tt> class method to wrap quoted string parameters
 that require escaping.</li>
 </ul>
 </div>
-<div class="section" id="id145">
+<div class="section" id="id149">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Memory leak in XPath evaluators.</li>
@@ -1181,7 +1202,7 @@ string failed.</li>
 <li>Minor fixes for Python 3.</li>
 </ul>
 </div>
-<div class="section" id="id146">
+<div class="section" id="id150">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>The global error log (which is copied into the exception log) is now
@@ -1192,7 +1213,7 @@ local to a thread, which fixes some race conditions.</li>
 </div>
 <div class="section" id="beta2-2009-01-25">
 <h1>2.2beta2 (2009-01-25)</h1>
-<div class="section" id="id147">
+<div class="section" id="id151">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Potential memory leak on exception handling.  This was due to a
@@ -1204,9 +1225,9 @@ problem in Cython, not lxml itself.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id148">
+<div class="section" id="id152">
 <h1>2.1.5 (2009-01-06)</h1>
-<div class="section" id="id149">
+<div class="section" id="id153">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Potential memory leak on exception handling.  This was due to a
@@ -1217,39 +1238,39 @@ problem in Cython, not lxml itself.</li>
 </div>
 <div class="section" id="beta1-2008-12-12">
 <h1>2.2beta1 (2008-12-12)</h1>
-<div class="section" id="id150">
+<div class="section" id="id154">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Allow <tt class="docutils literal">lxml.html.diff.htmldiff</tt> to accept Element objects, not
 just HTML strings.</li>
 </ul>
 </div>
-<div class="section" id="id151">
+<div class="section" id="id155">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash when using an XPath evaluator in multiple threads.</li>
 <li>Fixed missing whitespace before <tt class="docutils literal"><span class="pre">Link:...</span></tt> in <tt class="docutils literal">lxml.html.diff</tt>.</li>
 </ul>
 </div>
-<div class="section" id="id152">
+<div class="section" id="id156">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Export <tt class="docutils literal">lxml.html.parse</tt>.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id153">
+<div class="section" id="id157">
 <h1>2.1.4 (2008-12-12)</h1>
-<div class="section" id="id154">
+<div class="section" id="id158">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash when using an XPath evaluator in multiple threads.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id155">
+<div class="section" id="id159">
 <h1>2.0.11 (2008-12-12)</h1>
-<div class="section" id="id156">
+<div class="section" id="id160">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash when using an XPath evaluator in multiple threads.</li>
@@ -1258,7 +1279,7 @@ just HTML strings.</li>
 </div>
 <div class="section" id="alpha1-2008-11-23">
 <h1>2.2alpha1 (2008-11-23)</h1>
-<div class="section" id="id157">
+<div class="section" id="id161">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Support for XSLT result tree fragments in XPath/XSLT extension
@@ -1268,7 +1289,7 @@ functions.</li>
 <li>Instantiating a custom Element classes creates a new Element.</li>
 </ul>
 </div>
-<div class="section" id="id158">
+<div class="section" id="id162">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>XSLT didn't inherit the parse options of the input document.</li>
@@ -1279,16 +1300,16 @@ that end in a parenthesis, will be linked in their entirety (typical
 with Wikipedia links).</li>
 </ul>
 </div>
-<div class="section" id="id159">
+<div class="section" id="id163">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id160">
+<div class="section" id="id164">
 <h1>2.1.3 (2008-11-17)</h1>
-<div class="section" id="id161">
+<div class="section" id="id165">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id162">
+<div class="section" id="id166">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Ref-count leaks when lxml enters a try-except statement while an
@@ -1307,13 +1328,13 @@ ElementTrees.</li>
 <li>Overriding the parser encoding didn't work for many encodings.</li>
 </ul>
 </div>
-<div class="section" id="id163">
+<div class="section" id="id167">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id164">
+<div class="section" id="id168">
 <h1>2.0.10 (2008-11-17)</h1>
-<div class="section" id="id165">
+<div class="section" id="id169">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Ref-count leaks when lxml enters a try-except statement while an
@@ -1322,9 +1343,9 @@ Cython, not lxml itself.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id166">
+<div class="section" id="id170">
 <h1>2.1.2 (2008-09-05)</h1>
-<div class="section" id="id167">
+<div class="section" id="id171">
 <h2>Features added</h2>
 <ul class="simple">
 <li>lxml.etree now tries to find the absolute path name of files when
@@ -1333,7 +1354,7 @@ resolving relative URLs, as lixbml2 can prepend them with the path
 of the source document.</li>
 </ul>
 </div>
-<div class="section" id="id168">
+<div class="section" id="id172">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Memory problem when passing documents between threads.</li>
@@ -1341,13 +1362,13 @@ of the source document.</li>
 exception instead of calling <tt class="docutils literal">.close()</tt> on the target.</li>
 </ul>
 </div>
-<div class="section" id="id169">
+<div class="section" id="id173">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id170">
+<div class="section" id="id174">
 <h1>2.0.9 (2008-09-05)</h1>
-<div class="section" id="id171">
+<div class="section" id="id175">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Memory problem when passing documents between threads.</li>
@@ -1356,12 +1377,12 @@ exception instead of calling <tt class="docutils literal">.close()</tt> on the t
 </ul>
 </div>
 </div>
-<div class="section" id="id172">
+<div class="section" id="id176">
 <h1>2.1.1 (2008-07-24)</h1>
-<div class="section" id="id173">
+<div class="section" id="id177">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id174">
+<div class="section" id="id178">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash when parsing XSLT stylesheets in a thread and using them in
@@ -1370,20 +1391,20 @@ another.</li>
 Python 3.</li>
 </ul>
 </div>
-<div class="section" id="id175">
+<div class="section" id="id179">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id176">
+<div class="section" id="id180">
 <h1>2.0.8 (2008-07-24)</h1>
-<div class="section" id="id177">
+<div class="section" id="id181">
 <h2>Features added</h2>
 <ul class="simple">
 <li><tt class="docutils literal">lxml.html.rewrite_links()</tt> strips links to work around documents
 with whitespace in URL attributes.</li>
 </ul>
 </div>
-<div class="section" id="id178">
+<div class="section" id="id182">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash when parsing XSLT stylesheets in a thread and using them in
@@ -1392,13 +1413,13 @@ another.</li>
 with parameters.</li>
 </ul>
 </div>
-<div class="section" id="id179">
+<div class="section" id="id183">
 <h2>Other changes</h2>
 </div>
 </div>
-<div class="section" id="id180">
+<div class="section" id="id184">
 <h1>2.1 (2008-07-09)</h1>
-<div class="section" id="id181">
+<div class="section" id="id185">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Smart strings can be switched off in XPath (<tt class="docutils literal">smart_strings</tt>
@@ -1407,7 +1428,7 @@ keyword option).</li>
 with whitespace in URL attributes.</li>
 </ul>
 </div>
-<div class="section" id="id182">
+<div class="section" id="id186">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Custom resolvers were not used for XMLSchema includes/imports and
@@ -1416,7 +1437,7 @@ XInclude processing.</li>
 with parameters.</li>
 </ul>
 </div>
-<div class="section" id="id183">
+<div class="section" id="id187">
 <h2>Other changes</h2>
 <ul class="simple">
 <li><tt class="docutils literal">objectify.enableRecursiveStr()</tt> was removed, use
@@ -1425,15 +1446,15 @@ with parameters.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id184">
+<div class="section" id="id188">
 <h1>2.0.7 (2008-06-20)</h1>
-<div class="section" id="id185">
+<div class="section" id="id189">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Pickling <tt class="docutils literal">ElementTree</tt> objects in lxml.objectify.</li>
 </ul>
 </div>
-<div class="section" id="id186">
+<div class="section" id="id190">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Descending dot-separated classes in CSS selectors were not resolved
@@ -1444,7 +1465,7 @@ correctly.</li>
 the super class is not called from Python subclasses.</li>
 </ul>
 </div>
-<div class="section" id="id187">
+<div class="section" id="id191">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Non-ASCII characters in attribute values are no longer escaped on
@@ -1454,7 +1475,7 @@ serialisation.</li>
 </div>
 <div class="section" id="beta3-2008-06-19">
 <h1>2.1beta3 (2008-06-19)</h1>
-<div class="section" id="id188">
+<div class="section" id="id192">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Major overhaul of <tt class="docutils literal">tools/xpathgrep.py</tt> script.</li>
@@ -1480,7 +1501,7 @@ lxml.html (experimental).</li>
 (experimental).</li>
 </ul>
 </div>
-<div class="section" id="id189">
+<div class="section" id="id193">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li><tt class="docutils literal">ElementTree.parse()</tt> didn't handle target parser result.</li>
@@ -1495,7 +1516,7 @@ platform.</li>
 <li>Rare crash when serialising to a file object with certain encodings.</li>
 </ul>
 </div>
-<div class="section" id="id190">
+<div class="section" id="id194">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Non-ASCII characters in attribute values are no longer escaped on
@@ -1508,12 +1529,12 @@ lxml.objectify.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id191">
+<div class="section" id="id195">
 <h1>2.0.6 (2008-05-31)</h1>
-<div class="section" id="id192">
+<div class="section" id="id196">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id193">
+<div class="section" id="id197">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Incorrect evaluation of <tt class="docutils literal"><span class="pre">el.find(&quot;tag[child]&quot;)</span></tt>.</li>
@@ -1524,7 +1545,7 @@ document is deleted while the subtree is still in use.</li>
 <li>Rare crash when serialising to a file object with certain encodings.</li>
 </ul>
 </div>
-<div class="section" id="id194">
+<div class="section" id="id198">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>lxml should now build without problems on MacOS-X.</li>
@@ -1533,7 +1554,7 @@ document is deleted while the subtree is still in use.</li>
 </div>
 <div class="section" id="beta2-2008-05-02">
 <h1>2.1beta2 (2008-05-02)</h1>
-<div class="section" id="id195">
+<div class="section" id="id199">
 <h2>Features added</h2>
 <ul class="simple">
 <li>All parse functions in lxml.html take a <tt class="docutils literal">parser</tt> keyword argument.</li>
@@ -1542,7 +1563,7 @@ attribute <tt class="docutils literal">xhtml_parser</tt> that provide XML parser
 pre-configured for the lxml.html package.</li>
 </ul>
 </div>
-<div class="section" id="id196">
+<div class="section" id="id200">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Moving a subtree from a document created in one thread into a
@@ -1553,7 +1574,7 @@ redundantly defined namespace URIs.  This prevented the definition
 of more than one prefix for a namespace on the same Element.</li>
 </ul>
 </div>
-<div class="section" id="id197">
+<div class="section" id="id201">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>If the default namespace is redundantly defined with a prefix on the
@@ -1565,12 +1586,12 @@ namespace (i.e. they would end up in the wrong namespace).</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id198">
+<div class="section" id="id202">
 <h1>2.0.5 (2008-05-01)</h1>
-<div class="section" id="id199">
+<div class="section" id="id203">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id200">
+<div class="section" id="id204">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Resolving to a filename in custom resolvers didn't work.</li>
@@ -1579,13 +1600,13 @@ let some XSLT errors pass silently.</li>
 <li>Memory leak in Schematron with libxml2 &gt;= 2.6.31.</li>
 </ul>
 </div>
-<div class="section" id="id201">
+<div class="section" id="id205">
 <h2>Other changes</h2>
 </div>
 </div>
 <div class="section" id="beta1-2008-04-15">
 <h1>2.1beta1 (2008-04-15)</h1>
-<div class="section" id="id202">
+<div class="section" id="id206">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Error logging in Schematron (requires libxml2 2.6.32 or later).</li>
@@ -1595,7 +1616,7 @@ sections by their text content.</li>
 <li><tt class="docutils literal">CDATA()</tt> factory to wrap string content as CDATA section.</li>
 </ul>
 </div>
-<div class="section" id="id203">
+<div class="section" id="id207">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Resolving to a filename in custom resolvers didn't work.</li>
@@ -1605,7 +1626,7 @@ let some XSLT errors pass silently.</li>
 <li>lxml.etree accepted non well-formed namespace prefix names.</li>
 </ul>
 </div>
-<div class="section" id="id204">
+<div class="section" id="id208">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Major cleanup in internal <tt class="docutils literal">moveNodeToDocument()</tt> function, which
@@ -1619,12 +1640,12 @@ context.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id205">
+<div class="section" id="id209">
 <h1>2.0.4 (2008-04-13)</h1>
-<div class="section" id="id206">
+<div class="section" id="id210">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id207">
+<div class="section" id="id211">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Hanging thread in conjunction with GTK threading.</li>
@@ -1633,13 +1654,13 @@ context.</li>
 <li><tt class="docutils literal"><span class="pre">ElementTree.find*()</span></tt> didn't accept QName objects.</li>
 </ul>
 </div>
-<div class="section" id="id208">
+<div class="section" id="id212">
 <h2>Other changes</h2>
 </div>
 </div>
 <div class="section" id="alpha1-2008-03-27">
 <h1>2.1alpha1 (2008-03-27)</h1>
-<div class="section" id="id209">
+<div class="section" id="id213">
 <h2>Features added</h2>
 <ul class="simple">
 <li>New event types 'comment' and 'pi' in <tt class="docutils literal">iterparse()</tt>.</li>
@@ -1653,14 +1674,14 @@ an Element.</li>
 <li><tt class="docutils literal">docinfo.URL</tt> property is writable.</li>
 </ul>
 </div>
-<div class="section" id="id210">
+<div class="section" id="id214">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Default encoding for plain text serialisation was different from
 that of XML serialisation (UTF-8 instead of ASCII).</li>
 </ul>
 </div>
-<div class="section" id="id211">
+<div class="section" id="id215">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Minor API speed-ups.</li>
@@ -1704,9 +1725,9 @@ instead.</p>
 </ul>
 </div>
 </div>
-<div class="section" id="id212">
+<div class="section" id="id216">
 <h1>2.0.3 (2008-03-26)</h1>
-<div class="section" id="id213">
+<div class="section" id="id217">
 <h2>Features added</h2>
 <ul class="simple">
 <li>soupparser.parse() allows passing keyword arguments on to
@@ -1714,7 +1735,7 @@ BeautifulSoup.</li>
 <li><tt class="docutils literal">fromstring()</tt> method in <tt class="docutils literal">lxml.html.soupparser</tt>.</li>
 </ul>
 </div>
-<div class="section" id="id214">
+<div class="section" id="id218">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li><tt class="docutils literal">lxml.html.diff</tt> didn't treat empty tags properly (e.g.,
@@ -1727,7 +1748,7 @@ which made them turn up in text content.</li>
 correctly serialise the value to a string.</li>
 </ul>
 </div>
-<div class="section" id="id215">
+<div class="section" id="id219">
 <h2>Other changes</h2>
 <ul class="simple">
 <li><tt class="docutils literal">lxml.html.ElementSoup</tt> was replaced by a new module
@@ -1743,16 +1764,16 @@ option.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id216">
+<div class="section" id="id220">
 <h1>2.0.2 (2008-02-22)</h1>
-<div class="section" id="id217">
+<div class="section" id="id221">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Support passing <tt class="docutils literal">base_url</tt> to file parser functions to override
 the filename of the file(-like) object.</li>
 </ul>
 </div>
-<div class="section" id="id218">
+<div class="section" id="id222">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>The prefix for objectify's pytype namespace was missing from the set
@@ -1762,7 +1783,7 @@ of default prefixes.</li>
 <li>Slice deletion bug fixed in objectify.</li>
 </ul>
 </div>
-<div class="section" id="id219">
+<div class="section" id="id223">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Enabled doctests for some Python modules (especially <tt class="docutils literal">lxml.html</tt>).</li>
@@ -1773,9 +1794,9 @@ of default prefixes.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id220">
+<div class="section" id="id224">
 <h1>2.0.1 (2008-02-13)</h1>
-<div class="section" id="id221">
+<div class="section" id="id225">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Child iteration in <tt class="docutils literal">lxml.pyclasslookup</tt>.</li>
@@ -1783,7 +1804,7 @@ of default prefixes.</li>
 methods to make them visible in API docs and <tt class="docutils literal">help()</tt></li>
 </ul>
 </div>
-<div class="section" id="id222">
+<div class="section" id="id226">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>The module <tt class="docutils literal">lxml.html.builder</tt> was duplicated as
@@ -1795,7 +1816,7 @@ ignored.</li>
 elements at the wrong position.</li>
 </ul>
 </div>
-<div class="section" id="id223">
+<div class="section" id="id227">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>The generated API documentation was cleaned up and disburdened from
@@ -1810,9 +1831,9 @@ compiler options.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id224">
+<div class="section" id="id228">
 <h1>2.0 (2008-02-01)</h1>
-<div class="section" id="id225">
+<div class="section" id="id229">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Passing the <tt class="docutils literal">unicode</tt> type as <tt class="docutils literal">encoding</tt> to <tt class="docutils literal">tostring()</tt> will
@@ -1917,7 +1938,7 @@ instead of a string</li>
 <li>EXSLT RegExp support in standard XPath (not only XSLT)</li>
 </ul>
 </div>
-<div class="section" id="id226">
+<div class="section" id="id230">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Missing import in <tt class="docutils literal">lxml.html.clean</tt>.</li>
@@ -1954,7 +1975,7 @@ evaluators now reports the first error that occurred instead of the last</li>
 <li>Thread safety in XPath evaluators</li>
 </ul>
 </div>
-<div class="section" id="id227">
+<div class="section" id="id231">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>Exceptions carry only the part of the error log that is related to
@@ -2012,16 +2033,16 @@ generic <tt class="docutils literal">findOrBuildNodeNsPrefix</tt></li>
 </ul>
 </div>
 </div>
-<div class="section" id="id228">
+<div class="section" id="id232">
 <h1>1.3.6 (2007-10-29)</h1>
-<div class="section" id="id229">
+<div class="section" id="id233">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Backported decref crash fix from 2.0</li>
 <li>Well hidden free-while-in-use crash bug in ObjectPath</li>
 </ul>
 </div>
-<div class="section" id="id230">
+<div class="section" id="id234">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>The test suites now run <tt class="docutils literal">gc.collect()</tt> in the <tt class="docutils literal">tearDown()</tt>
@@ -2031,12 +2052,12 @@ problems that would otherwise appear in later tests.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id231">
+<div class="section" id="id235">
 <h1>1.3.5 (2007-10-22)</h1>
-<div class="section" id="id232">
+<div class="section" id="id236">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id233">
+<div class="section" id="id237">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>lxml.etree could crash when adding more than 10000 namespaces to a
@@ -2046,9 +2067,9 @@ than the root node of a tree</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id234">
+<div class="section" id="id238">
 <h1>1.3.4 (2007-08-30)</h1>
-<div class="section" id="id235">
+<div class="section" id="id239">
 <h2>Features added</h2>
 <ul class="simple">
 <li>The <tt class="docutils literal">ElementMaker</tt> in <tt class="docutils literal">lxml.builder</tt> now accepts the keyword arguments
@@ -2062,13 +2083,13 @@ part of the document, as well as comments and PIs that are siblings of the
 root node.</li>
 </ul>
 </div>
-<div class="section" id="id236">
+<div class="section" id="id240">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Parsing with the <tt class="docutils literal">no_network</tt> option could fail</li>
 </ul>
 </div>
-<div class="section" id="id237">
+<div class="section" id="id241">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>lxml now raises a TagNameWarning about tag names containing ':' instead of
@@ -2084,9 +2105,9 @@ ElementTree serialisation includes them).</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id238">
+<div class="section" id="id242">
 <h1>1.3.3 (2007-07-26)</h1>
-<div class="section" id="id239">
+<div class="section" id="id243">
 <h2>Features added</h2>
 <ul class="simple">
 <li>ElementTree compatible parser <tt class="docutils literal">ETCompatXMLParser</tt> strips processing
@@ -2097,7 +2118,7 @@ the parser you pass.</li>
 <li>Support <tt class="docutils literal">base_url</tt> keyword argument in <tt class="docutils literal">HTML()</tt> and <tt class="docutils literal">XML()</tt></li>
 </ul>
 </div>
-<div class="section" id="id240">
+<div class="section" id="id244">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Parsing from Python Unicode strings failed on some platforms</li>
@@ -2107,21 +2128,21 @@ the parser you pass.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id241">
+<div class="section" id="id245">
 <h1>1.3.2 (2007-07-03)</h1>
-<div class="section" id="id242">
+<div class="section" id="id246">
 <h2>Features added</h2>
 </div>
-<div class="section" id="id243">
+<div class="section" id="id247">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>&quot;deallocating None&quot; crash bug</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id244">
+<div class="section" id="id248">
 <h1>1.3.1 (2007-07-02)</h1>
-<div class="section" id="id245">
+<div class="section" id="id249">
 <h2>Features added</h2>
 <ul class="simple">
 <li>objectify.DataElement now supports setting values from existing data
@@ -2129,7 +2150,7 @@ elements (not just plain Python types) and reuses defined namespaces etc.</li>
 <li>E-factory support for lxml.objectify (<tt class="docutils literal">objectify.E</tt>)</li>
 </ul>
 </div>
-<div class="section" id="id246">
+<div class="section" id="id250">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Better way to prevent crashes in Element proxy cleanup code</li>
@@ -2139,9 +2160,9 @@ elements (not just plain Python types) and reuses defined namespaces etc.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id247">
+<div class="section" id="id251">
 <h1>1.3 (2007-06-24)</h1>
-<div class="section" id="id248">
+<div class="section" id="id252">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Module <tt class="docutils literal">lxml.pyclasslookup</tt> module implements an Element class lookup
@@ -2170,7 +2191,7 @@ keys/values/items for a libxml2 node</li>
 a better handling of namespaces when moving elements between documents.</li>
 </ul>
 </div>
-<div class="section" id="id249">
+<div class="section" id="id253">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Removing Elements from a tree could make them loose their namespace
@@ -2194,16 +2215,16 @@ PIs are copied.</li>
 documents</li>
 </ul>
 </div>
-<div class="section" id="id250">
+<div class="section" id="id254">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>major restructuring in the documentation</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id251">
+<div class="section" id="id255">
 <h1>1.2.1 (2007-02-27)</h1>
-<div class="section" id="id252">
+<div class="section" id="id256">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Build fixes for MS compiler</li>
@@ -2214,9 +2235,9 @@ to access</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id253">
+<div class="section" id="id257">
 <h1>1.2 (2007-02-20)</h1>
-<div class="section" id="id254">
+<div class="section" id="id258">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Rich comparison of QName objects</li>
@@ -2232,7 +2253,7 @@ possible to pass an --rpath directly to distutils; previously this was being
 shadowed.</li>
 </ul>
 </div>
-<div class="section" id="id255">
+<div class="section" id="id259">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Element instantiation now uses locks to prevent race conditions with threads</li>
@@ -2242,7 +2263,7 @@ support in these environments</li>
 <li>Element.find*() did not accept QName objects as path</li>
 </ul>
 </div>
-<div class="section" id="id256">
+<div class="section" id="id260">
 <h2>Other changes</h2>
 <ul class="simple">
 <li>code cleanup: redundant _NodeBase super class merged into _Element class
@@ -2251,9 +2272,9 @@ the compatibiliy of the public C-API</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id257">
+<div class="section" id="id261">
 <h1>1.1.2 (2006-10-30)</h1>
-<div class="section" id="id258">
+<div class="section" id="id262">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Data elements in objectify support repr(), which is now used by dump()</li>
@@ -2264,7 +2285,7 @@ tail, attributes and namespaces</li>
 <li>Simplified support for handling XSLT processing instructions</li>
 </ul>
 </div>
-<div class="section" id="id259">
+<div class="section" id="id263">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Parser resources were not freed before the next parser run</li>
@@ -2280,9 +2301,9 @@ closed/freed</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id260">
+<div class="section" id="id264">
 <h1>1.1.1 (2006-09-21)</h1>
-<div class="section" id="id261">
+<div class="section" id="id265">
 <h2>Features added</h2>
 <ul class="simple">
 <li>XSLT profiling support (<tt class="docutils literal">profile_run</tt> keyword)</li>
@@ -2290,7 +2311,7 @@ closed/freed</li>
 <li>Support custom elements for tree nodes in lxml.objectify</li>
 </ul>
 </div>
-<div class="section" id="id262">
+<div class="section" id="id266">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>lxml.objectify failed to support long data values (e.g., &quot;123L&quot;)</li>
@@ -2305,9 +2326,9 @@ elements)</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id263">
+<div class="section" id="id267">
 <h1>1.1 (2006-09-13)</h1>
-<div class="section" id="id264">
+<div class="section" id="id268">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Comments and processing instructions return '&lt;!-- coment --&gt;' and
@@ -2360,7 +2381,7 @@ generated elements</li>
 element</li>
 </ul>
 </div>
-<div class="section" id="id265">
+<div class="section" id="id269">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>filenames with local 8-bit encoding were not supported</li>
@@ -2384,30 +2405,30 @@ change from 1.0.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id266">
+<div class="section" id="id270">
 <h1>1.0.4 (2006-09-09)</h1>
-<div class="section" id="id267">
+<div class="section" id="id271">
 <h2>Features added</h2>
 <ul class="simple">
 <li>List-like <tt class="docutils literal">Element.extend()</tt> method</li>
 </ul>
 </div>
-<div class="section" id="id268">
+<div class="section" id="id272">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash in tail handling in <tt class="docutils literal">Element.replace()</tt></li>
 </ul>
 </div>
 </div>
-<div class="section" id="id269">
+<div class="section" id="id273">
 <h1>1.0.3 (2006-08-08)</h1>
-<div class="section" id="id270">
+<div class="section" id="id274">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Element.replace(old, new) method to replace a subelement by another one</li>
 </ul>
 </div>
-<div class="section" id="id271">
+<div class="section" id="id275">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Crash when mixing elements from XSLT results into other trees</li>
@@ -2417,16 +2438,16 @@ change from 1.0.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id272">
+<div class="section" id="id276">
 <h1>1.0.2 (2006-06-27)</h1>
-<div class="section" id="id273">
+<div class="section" id="id277">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Support for setting a custom default Element class as opposed to namespace
 specific classes (which still override the default class)</li>
 </ul>
 </div>
-<div class="section" id="id274">
+<div class="section" id="id278">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Rare exceptions in Python list functions were not handled</li>
@@ -2438,15 +2459,15 @@ cases</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id275">
+<div class="section" id="id279">
 <h1>1.0.1 (2006-06-09)</h1>
-<div class="section" id="id276">
+<div class="section" id="id280">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Repeated calls to Element.attrib now efficiently return the same instance</li>
 </ul>
 </div>
-<div class="section" id="id277">
+<div class="section" id="id281">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Document deallocation could crash in certain garbage collection scenarios</li>
@@ -2462,9 +2483,9 @@ stylesheet and crash on repeated calls</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id278">
+<div class="section" id="id282">
 <h1>1.0 (2006-06-01)</h1>
-<div class="section" id="id279">
+<div class="section" id="id283">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Element.getiterator() and the findall() methods support finding arbitrary
@@ -2511,7 +2532,7 @@ enabled by default, can be switched off with 'regexp=False' keyword argument</li
 implementation of libxml2 (as opposed to ET compatible XMLID)</li>
 </ul>
 </div>
-<div class="section" id="id280">
+<div class="section" id="id284">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Memory leak in Element.__setitem__</li>
@@ -2553,9 +2574,9 @@ ElementTree root node as reference point</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id281">
+<div class="section" id="id285">
 <h1>0.9.2 (2006-05-10)</h1>
-<div class="section" id="id282">
+<div class="section" id="id286">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Speedup for Element.makeelement(): the new element reuses the original
@@ -2565,7 +2586,7 @@ libxml2 document instead of creating a new empty one</li>
 <li>RelaxNG and XMLSchema accept any Element, not only ElementTrees</li>
 </ul>
 </div>
-<div class="section" id="id283">
+<div class="section" id="id287">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>str(xslt_result) was broken for XSLT output other than UTF-8</li>
@@ -2575,9 +2596,9 @@ libxml2 document instead of creating a new empty one</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id284">
+<div class="section" id="id288">
 <h1>0.9.1 (2006-03-30)</h1>
-<div class="section" id="id285">
+<div class="section" id="id289">
 <h2>Features added</h2>
 <ul class="simple">
 <li>lxml.sax.ElementTreeContentHandler checks closing elements and raises
@@ -2589,7 +2610,7 @@ argument)</li>
 <li>Minor API performance improvements</li>
 </ul>
 </div>
-<div class="section" id="id286">
+<div class="section" id="id290">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Memory deallocation bug when using XSLT output method &quot;html&quot;</li>
@@ -2598,9 +2619,9 @@ argument)</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id287">
+<div class="section" id="id291">
 <h1>0.9 (2006-03-20)</h1>
-<div class="section" id="id288">
+<div class="section" id="id292">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Error logging API for libxml2 error messages</li>
@@ -2625,7 +2646,7 @@ parent element.</li>
 doc/sax.txt for more information.</li>
 </ul>
 </div>
-<div class="section" id="id289">
+<div class="section" id="id293">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Segfaults and memory leaks in various API functions of Element</li>
@@ -2637,9 +2658,9 @@ cannot support this due to libxslt deficiencies)</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id290">
+<div class="section" id="id294">
 <h1>0.8 (2005-11-03)</h1>
-<div class="section" id="id291">
+<div class="section" id="id295">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Support for copy.deepcopy() on elements. copy.copy() works also, but
@@ -2653,7 +2674,7 @@ supported and parsing of gzipped XML files works.</li>
 SubElement.</li>
 </ul>
 </div>
-<div class="section" id="id292">
+<div class="section" id="id296">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Use xslt-config instead of xml2-config to find out libxml2
@@ -2676,9 +2697,9 @@ fixed.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id293">
+<div class="section" id="id297">
 <h1>0.7 (2005-06-15)</h1>
-<div class="section" id="id294">
+<div class="section" id="id298">
 <h2>Features added</h2>
 <ul class="simple">
 <li>parameters (XPath expressions) can be passed to XSLT using keyword
@@ -2708,7 +2729,7 @@ prefix declarations on these elements and these prefixes will show up
 in XML serialization.</li>
 </ul>
 </div>
-<div class="section" id="id295">
+<div class="section" id="id299">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Killed yet another memory management related bug: trees created
@@ -2729,9 +2750,9 @@ test both serializing to StringIO as well as serializing to a real file.</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id296">
+<div class="section" id="id300">
 <h1>0.6 (2005-05-14)</h1>
-<div class="section" id="id297">
+<div class="section" id="id301">
 <h2>Features added</h2>
 <ul class="simple">
 <li>Changed setup.py so that library_dirs is also guessed. This should
@@ -2740,7 +2761,7 @@ wrong library (shipping with the OS) could be picked up.</li>
 <li>Tweaked setup.py so that it picks up the version from version.txt.</li>
 </ul>
 </div>
-<div class="section" id="id298">
+<div class="section" id="id302">
 <h2>Bugs fixed</h2>
 <ul class="simple">
 <li>Do the right thing when handling namespaced attributes.</li>
@@ -2749,7 +2770,7 @@ had very nasty side-effects before this fix, sorry!</li>
 </ul>
 </div>
 </div>
-<div class="section" id="id299">
+<div class="section" id="id303">
 <h1>0.5.1 (2005-04-09)</h1>
 <ul class="simple">
 <li>Python 2.2 compatibility fixes.</li>
@@ -2757,14 +2778,14 @@ had very nasty side-effects before this fix, sorry!</li>
 input wasn't properly being UTF-8 encoded.</li>
 </ul>
 </div>
-<div class="section" id="id300">
+<div class="section" id="id304">
 <h1>0.5 (2005-04-08)</h1>
 <p>Initial public release.</p>
 </div>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 64e2288..ffc0268 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="elementtree-compatibility-of-lxml-etree">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu current" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">ElementTree compatibility of lxml.etree</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu current" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">ElementTree compatibility of lxml.etree</h1>
 
 <p>A lot of care has been taken to ensure compatibility between etree and
 ElementTree.  Nonetheless, some differences and incompatibilities exist:</p>
@@ -183,7 +183,7 @@ enough to replace a shallow copy in your case.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index e85de06..de25916 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="credits">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu current" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Credits</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu current" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Credits</h1>
 
 <div class="section" id="main-contributors">
 <h1>Main contributors</h1>
@@ -72,7 +72,7 @@ Holger Krekel for originally hosting lxml on codespeak.net</li>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index baae495..f246de3 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="lxml-cssselect">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu current" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">lxml.cssselect</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu current" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">lxml.cssselect</h1>
 
 <p>lxml supports a number of interesting languages for tree traversal and element
 selection.  The most important is obviously <a class="reference external" href="xpathxslt.html#xpath">XPath</a>, but there is also
@@ -92,7 +92,7 @@ namespace URIs: the <tt class="docutils literal">CSSSelector</tt> class accepts
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 75dff42..9db25ce 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="using-custom-element-classes-in-lxml">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu current" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Using custom Element classes in lxml</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu current" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Using custom Element classes in lxml</h1>
 
 <p>lxml has very sophisticated support for custom Element classes.  You
 can provide your own classes for Elements and have lxml use them by
@@ -443,7 +443,7 @@ subclasses for elements of this namespace:</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 259a75c..4ff413e 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="beautifulsoup-parser">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu current" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">BeautifulSoup Parser</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu current" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">BeautifulSoup Parser</h1>
 
 <p><a class="reference external" href="http://www.crummy.com/software/BeautifulSoup/">BeautifulSoup</a> is a Python package that parses broken HTML, just like
 lxml supports it based on the parser of libxml2.  BeautifulSoup uses a
@@ -169,7 +169,7 @@ BeautifulSoup's <a class="reference external" href="http://www.crummy.com/softwa
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 54b5c13..cd0ef0d 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="python-extensions-for-xpath-and-xslt">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu current" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Python extensions for XPath and XSLT</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu current" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Python extensions for XPath and XSLT</h1>
 
 <p>This document describes how to use Python extension functions in XPath
 and XSLT like this:</p>
@@ -505,7 +505,7 @@ will work:</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 67f0afc..b5373db 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="html5lib-parser">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu current" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">html5lib Parser</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu current" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">html5lib Parser</h1>
 
 <p><a class="reference external" href="http://code.google.com/p/html5lib/">html5lib</a> is a Python package that implements the HTML5 parsing algorithm
 which is heavily influenced by current browsers and based on the <a class="reference external" href="http://www.whatwg.org/specs/web-apps/current-work/">WHATWG
@@ -74,7 +74,7 @@ module.  Note that these are the parser classes provided by html5lib.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 61c45c5..7eded13 100644 (file)
@@ -10,7 +10,7 @@
 </head>
 <body>
 <div class="document" id="lxml">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu current" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">lxml - XML and HTML with Python</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu current" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">lxml - XML and HTML with Python</h1>
 
 <div class="pagequote line-block">
 <div class="line"><a class="reference external" href="http://thread.gmane.org/gmane.comp.python.lxml.devel/3252/focus=3258">&#187; lxml takes all the pain out of XML. &#171;</a></div>
@@ -57,7 +57,7 @@ customisations and trainings on lxml and fast Python XML processing.</p>
 </div>
 <div class="section" id="documentation">
 <h1>Documentation</h1>
-<p>The complete lxml documentation is available for download as <a class="reference external" href="lxmldoc-3.3.0.pdf">PDF
+<p>The complete lxml documentation is available for download as <a class="reference external" href="lxmldoc-3.3.1.pdf">PDF
 documentation</a>.  The HTML documentation from this web site is part of
 the normal <a class="reference external" href="#download">source download</a>.</p>
 <ul class="simple">
@@ -120,8 +120,8 @@ external C modules, including fast custom element class support.</p>
 Index</a> (PyPI).  It has the source
 that compiles on various platforms.  The source distribution is signed
 with <a class="reference external" href="pubkey.asc">this key</a>.</p>
-<p>The latest version is <a class="reference external" href="/files/lxml-3.3.0.tgz">lxml 3.3.0</a>, released 2014-01-26
-(<a class="reference external" href="/changes-3.3.0.html">changes for 3.3.0</a>).  <a class="reference external" href="#old-versions">Older versions</a>
+<p>The latest version is <a class="reference external" href="/files/lxml-3.3.1.tgz">lxml 3.3.1</a>, released 2014-02-12
+(<a class="reference external" href="/changes-3.3.1.html">changes for 3.3.1</a>).  <a class="reference external" href="#old-versions">Older versions</a>
 are listed below.</p>
 <p>Please take a look at the
 <a class="reference external" href="installation.html">installation instructions</a> !</p>
@@ -129,7 +129,7 @@ are listed below.</p>
 part of the source distribution, so if you want to download the
 documentation for offline use, take the source archive and copy the
 <tt class="docutils literal">doc/html</tt> directory out of the source tree, or use the
-<a class="reference external" href="lxmldoc-3.3.0.pdf">PDF documentation</a>.</p>
+<a class="reference external" href="lxmldoc-3.3.1.pdf">PDF documentation</a>.</p>
 <p>The latest installable developer sources should usually be available from the
 <a class="reference external" href="http://lxml.de/build/">build server</a>.  It's also possible to check out
 the latest development version of lxml from github directly, using a command
@@ -179,6 +179,7 @@ obstacle to using lxml in your codebase.</p>
 <a class="reference external" href="http://lxml.de/3.2/">3.2</a>
 and the <a class="reference external" href="http://lxml.de/dev/">latest in-development version</a>.</p>
 <ul class="simple">
+<li><a class="reference external" href="/files/lxml-3.3.1.tgz">lxml 3.3.1</a>, released 2014-02-12 (<a class="reference external" href="/changes-3.3.1.html">changes for 3.3.1</a>)</li>
 <li><a class="reference external" href="/files/lxml-3.3.0.tgz">lxml 3.3.0</a>, released 2014-01-26 (<a class="reference external" href="/changes-3.3.0.html">changes for 3.3.0</a>)</li>
 <li><a class="reference external" href="/files/lxml-3.3.0beta5.tgz">lxml 3.3.0beta5</a>, released 2014-01-18 (<a class="reference external" href="/changes-3.3.0beta5.html">changes for 3.3.0beta5</a>)</li>
 <li><a class="reference external" href="/files/lxml-3.3.0beta4.tgz">lxml 3.3.0beta4</a>, released 2014-01-12 (<a class="reference external" href="/changes-3.3.0beta4.html">changes for 3.3.0beta4</a>)</li>
@@ -220,7 +221,7 @@ donation is non-refundable.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index bde0023..70fcb67 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="installing-lxml">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu current" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Installing lxml</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu current" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Installing lxml</h1>
 
 <p>For special installation instructions regarding MS Windows and
 MacOS-X, see the specific sections below.</p>
@@ -166,7 +166,7 @@ follow the static build instructions above.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 1138e11..9aa9bf9 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="why-lxml">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu current" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Why lxml?</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu current" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Why lxml?</h1>
 
 <div class="contents topic" id="contents">
 <p class="topic-title first">Contents</p>
@@ -66,7 +66,7 @@ having to learn new things -- XML is complicated enough.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index d80b2c4..aa583ee 100644 (file)
@@ -11,7 +11,7 @@
 </head>
 <body>
 <div class="document" id="how-to-read-the-source-of-lxml">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu current" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">How to read the source of lxml</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu current" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">How to read the source of lxml</h1>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -270,7 +270,7 @@ implemented in pure Python.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 8eb2a94..dc597dc 100644 (file)
@@ -9,7 +9,7 @@
 </head>
 <body>
 <div class="document" id="lxml-html">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu current" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">lxml.html</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu current" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">lxml.html</h1>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -670,7 +670,7 @@ microformat.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 99e604e..52b044c 100644 (file)
@@ -9,7 +9,7 @@
 </head>
 <body>
 <div class="document" id="lxml-objectify">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu current" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">lxml.objectify</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu current" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">lxml.objectify</h1>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -1149,7 +1149,7 @@ support any XPath expression.</li>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index f8e2632..1318d1f 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="parsing-xml-and-html-with-lxml">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu current" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Parsing XML and HTML with lxml</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu current" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Parsing XML and HTML with lxml</h1>
 
 <p>lxml provides a very simple and powerful API for parsing XML and HTML.  It
 supports one-step parsing as well as step-by-step parsing using an
@@ -410,7 +410,7 @@ incremental parsing step, by calling the <tt class="docutils literal">.read_even
 iterating over the result.  This is most useful for non-blocking execution
 environments where data chunks arrive one after the other and should be
 processed as far as possible in each step.</p>
-<p>The basic usage is as follows:</p>
+<p>The same feature is available in lxml 3.3.  The basic usage is as follows:</p>
 <div class="syntax"><pre><span class="gp">&gt;&gt;&gt; </span><span class="n">parser</span> <span class="o">=</span> <span class="n">etree</span><span class="o">.</span><span class="n">XMLPullParser</span><span class="p">(</span><span class="n">events</span><span class="o">=</span><span class="p">(</span><span class="s">'start'</span><span class="p">,</span> <span class="s">'end'</span><span class="p">))</span>
 
 <span class="gp">&gt;&gt;&gt; </span><span class="k">def</span> <span class="nf">print_events</span><span class="p">(</span><span class="n">parser</span><span class="p">):</span>
@@ -842,7 +842,7 @@ with UTF-8 is also considerably faster in most cases.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 8935b38..53a189c 100644 (file)
@@ -11,7 +11,7 @@
 </head>
 <body>
 <div class="document" id="benchmarks-and-speed">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu current" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Benchmarks and Speed</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu current" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Benchmarks and Speed</h1>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -782,7 +782,7 @@ random.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index da152fc..6dcfc9e 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="document-loading-and-url-resolving">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu current" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Document loading and URL resolving</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu current" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Document loading and URL resolving</h1>
 
 <div class="contents topic" id="contents">
 <p class="topic-title first">Contents</p>
@@ -234,7 +234,7 @@ documents or raises exceptions if access is denied.</li>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index fe7d8f4..ec1f01a 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="sax-support">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu current" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Sax support</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu current" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Sax support</h1>
 
 <p>In this document we'll describe lxml's SAX support.  lxml has support for
 producing SAX events for an ElementTree or Element.  lxml can also turn SAX
@@ -108,7 +108,7 @@ DOM implementation connot generate SAX events from a DOM tree.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 0683138..69dd6a4 100644 (file)
@@ -8,5 +8,5 @@
    </head>
    <body>
   <h1>Sitemap of lxml.de - Processing XML and HTML with Python</h1>
-   <div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/files/">Download files</a></li></ul></div></body>
+   <div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/files/">Download files</a></li></ul></div></body>
  </html>
\ No newline at end of file
index 5589bf4..735e65e 100644 (file)
@@ -11,7 +11,7 @@
 </head>
 <body>
 <div class="document" id="the-lxml-etree-tutorial">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu current" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">The lxml.etree Tutorial</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu current" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">The lxml.etree Tutorial</h1>
 <table class="docinfo" frame="void" rules="none">
 <col class="docinfo-name" />
 <col class="docinfo-content" />
@@ -1141,7 +1141,7 @@ whereas the other two examples would raise a <tt class="docutils literal">StopIt
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 992d794..a3a537a 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="validation-with-lxml">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu current" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Validation with lxml</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu current" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu foreign" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">Validation with lxml</h1>
 
 <p>Apart from the built-in DTD support in parsers, lxml currently supports three
 schema languages: <a class="reference external" href="http://en.wikipedia.org/wiki/Document_Type_Definition">DTD</a>, <a class="reference external" href="http://www.relaxng.org/">Relax NG</a> and <a class="reference external" href="http://www.w3.org/XML/Schema">XML Schema</a>.  All three provide
@@ -536,7 +536,7 @@ reporting during validation.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index 6fd8dc6..0c25617 100644 (file)
@@ -8,7 +8,7 @@
 </head>
 <body>
 <div class="document" id="xpath-and-xslt-with-lxml">
-<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu current" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg">Building an egg</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 0-menu"><li class="menu title"><a href="changes-3.3.0.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">XPath and XSLT with lxml</h1>
+<div class="sidemenu"><ul id="lxml-section"><li><span class="section title">lxml</span><ul class="menu foreign" id="index-menu"><li class="menu title"><a href="index.html">lxml</a><ul class="submenu"><li class="menu item"><a href="index.html#introduction">Introduction</a></li><li class="menu item"><a href="index.html#support-the-project">Support the project</a></li><li class="menu item"><a href="index.html#documentation">Documentation</a></li><li class="menu item"><a href="index.html#download">Download</a></li><li class="menu item"><a href="index.html#mailing-list">Mailing list</a></li><li class="menu item"><a href="index.html#bug-tracker">Bug tracker</a></li><li class="menu item"><a href="index.html#license">License</a></li><li class="menu item"><a href="index.html#old-versions">Old Versions</a></li><li class="menu item"><a href="index.html#legal-notice-for-donations">Legal Notice for Donations</a></li></ul></li></ul><ul class="menu foreign" id="intro-menu"><li class="menu title"><a href="intro.html">Why lxml?</a><ul class="submenu"><li class="menu item"><a href="intro.html#motto">Motto</a></li><li class="menu item"><a href="intro.html#aims">Aims</a></li></ul></li></ul><ul class="menu foreign" id="installation-menu"><li class="menu title"><a href="installation.html">Installing lxml</a><ul class="submenu"><li class="menu item"><a href="installation.html#requirements">Requirements</a></li><li class="menu item"><a href="installation.html#installation">Installation</a></li><li class="menu item"><a href="installation.html#building-lxml-from-sources">Building lxml from sources</a></li><li class="menu item"><a href="installation.html#using-lxml-with-python-libxml2">Using lxml with python-libxml2</a></li><li class="menu item"><a href="installation.html#ms-windows">MS Windows</a></li><li class="menu item"><a href="installation.html#macos-x">MacOS-X</a></li></ul></li></ul><ul class="menu foreign" id="performance-menu"><li class="menu title"><a href="performance.html">Benchmarks and Speed</a><ul class="submenu"><li class="menu item"><a href="performance.html#general-notes">General notes</a></li><li class="menu item"><a href="performance.html#how-to-read-the-timings">How to read the timings</a></li><li class="menu item"><a href="performance.html#parsing-and-serialising">Parsing and Serialising</a></li><li class="menu item"><a href="performance.html#the-elementtree-api">The ElementTree API</a></li><li class="menu item"><a href="performance.html#xpath">XPath</a></li><li class="menu item"><a href="performance.html#a-longer-example">A longer example</a></li><li class="menu item"><a href="performance.html#lxml-objectify">lxml.objectify</a></li></ul></li></ul><ul class="menu foreign" id="compatibility-menu"><li class="menu title"><a href="compatibility.html">ElementTree compatibility of lxml.etree</a></li></ul><ul class="menu foreign" id="FAQ-menu"><li class="menu title"><a href="FAQ.html">lxml FAQ - Frequently Asked Questions</a><ul class="submenu"><li class="menu item"><a href="FAQ.html#general-questions">General Questions</a></li><li class="menu item"><a href="FAQ.html#installation">Installation</a></li><li class="menu item"><a href="FAQ.html#contributing">Contributing</a></li><li class="menu item"><a href="FAQ.html#bugs">Bugs</a></li><li class="menu item"><a href="FAQ.html#id1">Threading</a></li><li class="menu item"><a href="FAQ.html#parsing-and-serialisation">Parsing and Serialisation</a></li><li class="menu item"><a href="FAQ.html#xpath-and-document-traversal">XPath and Document Traversal</a></li></ul></li></ul></li></ul><ul id="Developing with lxml-section"><li><span class="section title">Developing with lxml</span><ul class="menu foreign" id="tutorial-menu"><li class="menu title"><a href="tutorial.html">The lxml.etree Tutorial</a><ul class="submenu"><li class="menu item"><a href="tutorial.html#the-element-class">The Element class</a></li><li class="menu item"><a href="tutorial.html#the-elementtree-class">The ElementTree class</a></li><li class="menu item"><a href="tutorial.html#parsing-from-strings-and-files">Parsing from strings and files</a></li><li class="menu item"><a href="tutorial.html#namespaces">Namespaces</a></li><li class="menu item"><a href="tutorial.html#the-e-factory">The E-factory</a></li><li class="menu item"><a href="tutorial.html#elementpath">ElementPath</a></li></ul></li></ul><ul class="menu foreign" id="api index-menu"><li class="menu title"><a href="api/index.html">API reference</a></li></ul><ul class="menu foreign" id="api-menu"><li class="menu title"><a href="api.html">APIs specific to lxml.etree</a><ul class="submenu"><li class="menu item"><a href="api.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="api.html#other-element-apis">Other Element APIs</a></li><li class="menu item"><a href="api.html#trees-and-documents">Trees and Documents</a></li><li class="menu item"><a href="api.html#iteration">Iteration</a></li><li class="menu item"><a href="api.html#error-handling-on-exceptions">Error handling on exceptions</a></li><li class="menu item"><a href="api.html#error-logging">Error logging</a></li><li class="menu item"><a href="api.html#serialisation">Serialisation</a></li><li class="menu item"><a href="api.html#incremental-xml-generation">Incremental XML generation</a></li><li class="menu item"><a href="api.html#cdata">CDATA</a></li><li class="menu item"><a href="api.html#xinclude-and-elementinclude">XInclude and ElementInclude</a></li><li class="menu item"><a href="api.html#write-c14n-on-elementtree">write_c14n on ElementTree</a></li></ul></li></ul><ul class="menu foreign" id="parsing-menu"><li class="menu title"><a href="parsing.html">Parsing XML and HTML with lxml</a><ul class="submenu"><li class="menu item"><a href="parsing.html#parsers">Parsers</a></li><li class="menu item"><a href="parsing.html#the-target-parser-interface">The target parser interface</a></li><li class="menu item"><a href="parsing.html#the-feed-parser-interface">The feed parser interface</a></li><li class="menu item"><a href="parsing.html#incremental-event-parsing">Incremental event parsing</a></li><li class="menu item"><a href="parsing.html#iterparse-and-iterwalk">iterparse and iterwalk</a></li><li class="menu item"><a href="parsing.html#python-unicode-strings">Python unicode strings</a></li></ul></li></ul><ul class="menu foreign" id="validation-menu"><li class="menu title"><a href="validation.html">Validation with lxml</a><ul class="submenu"><li class="menu item"><a href="validation.html#validation-at-parse-time">Validation at parse time</a></li><li class="menu item"><a href="validation.html#id1">DTD</a></li><li class="menu item"><a href="validation.html#relaxng">RelaxNG</a></li><li class="menu item"><a href="validation.html#xmlschema">XMLSchema</a></li><li class="menu item"><a href="validation.html#id2">Schematron</a></li><li class="menu item"><a href="validation.html#id3">(Pre-ISO-Schematron)</a></li></ul></li></ul><ul class="menu current" id="xpathxslt-menu"><li class="menu title"><a href="xpathxslt.html">XPath and XSLT with lxml</a><ul class="submenu"><li class="menu item"><a href="xpathxslt.html#xpath">XPath</a></li><li class="menu item"><a href="xpathxslt.html#xslt">XSLT</a></li></ul></li></ul><ul class="menu foreign" id="objectify-menu"><li class="menu title"><a href="objectify.html">lxml.objectify</a><ul class="submenu"><li class="menu item"><a href="objectify.html#the-lxml-objectify-api">The lxml.objectify API</a></li><li class="menu item"><a href="objectify.html#asserting-a-schema">Asserting a Schema</a></li><li class="menu item"><a href="objectify.html#objectpath">ObjectPath</a></li><li class="menu item"><a href="objectify.html#python-data-types">Python data types</a></li><li class="menu item"><a href="objectify.html#how-data-types-are-matched">How data types are matched</a></li><li class="menu item"><a href="objectify.html#what-is-different-from-lxml-etree">What is different from lxml.etree?</a></li></ul></li></ul><ul class="menu foreign" id="lxmlhtml-menu"><li class="menu title"><a href="lxmlhtml.html">lxml.html</a><ul class="submenu"><li class="menu item"><a href="lxmlhtml.html#parsing-html">Parsing HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-element-methods">HTML Element Methods</a></li><li class="menu item"><a href="lxmlhtml.html#running-html-doctests">Running HTML doctests</a></li><li class="menu item"><a href="lxmlhtml.html#creating-html-with-the-e-factory">Creating HTML with the E-factory</a></li><li class="menu item"><a href="lxmlhtml.html#working-with-links">Working with links</a></li><li class="menu item"><a href="lxmlhtml.html#forms">Forms</a></li><li class="menu item"><a href="lxmlhtml.html#cleaning-up-html">Cleaning up HTML</a></li><li class="menu item"><a href="lxmlhtml.html#html-diff">HTML Diff</a></li><li class="menu item"><a href="lxmlhtml.html#examples">Examples</a></li></ul></li></ul><ul class="menu foreign" id="cssselect-menu"><li class="menu title"><a href="cssselect.html">lxml.cssselect</a><ul class="submenu"><li class="menu item"><a href="cssselect.html#the-cssselector-class">The CSSSelector class</a></li><li class="menu item"><a href="cssselect.html#the-cssselect-method">The cssselect method</a></li><li class="menu item"><a href="cssselect.html#supported-selectors">Supported Selectors</a></li><li class="menu item"><a href="cssselect.html#namespaces">Namespaces</a></li></ul></li></ul><ul class="menu foreign" id="elementsoup-menu"><li class="menu title"><a href="elementsoup.html">BeautifulSoup Parser</a><ul class="submenu"><li class="menu item"><a href="elementsoup.html#parsing-with-the-soupparser">Parsing with the soupparser</a></li><li class="menu item"><a href="elementsoup.html#entity-handling">Entity handling</a></li><li class="menu item"><a href="elementsoup.html#using-soupparser-as-a-fallback">Using soupparser as a fallback</a></li><li class="menu item"><a href="elementsoup.html#using-only-the-encoding-detection">Using only the encoding detection</a></li></ul></li></ul><ul class="menu foreign" id="html5parser-menu"><li class="menu title"><a href="html5parser.html">html5lib Parser</a><ul class="submenu"><li class="menu item"><a href="html5parser.html#differences-to-regular-html-parsing">Differences to regular HTML parsing</a></li><li class="menu item"><a href="html5parser.html#function-reference">Function Reference</a></li></ul></li></ul></li></ul><ul id="Extending lxml-section"><li><span class="section title">Extending lxml</span><ul class="menu foreign" id="resolvers-menu"><li class="menu title"><a href="resolvers.html">Document loading and URL resolving</a><ul class="submenu"><li class="menu item"><a href="resolvers.html#xml-catalogs">XML Catalogs</a></li><li class="menu item"><a href="resolvers.html#uri-resolvers">URI Resolvers</a></li><li class="menu item"><a href="resolvers.html#document-loading-in-context">Document loading in context</a></li><li class="menu item"><a href="resolvers.html#i-o-access-control-in-xslt">I/O access control in XSLT</a></li></ul></li></ul><ul class="menu foreign" id="extensions-menu"><li class="menu title"><a href="extensions.html">Python extensions for XPath and XSLT</a><ul class="submenu"><li class="menu item"><a href="extensions.html#xpath-extension-functions">XPath Extension functions</a></li><li class="menu item"><a href="extensions.html#xslt-extension-elements">XSLT extension elements</a></li></ul></li></ul><ul class="menu foreign" id="element classes-menu"><li class="menu title"><a href="element_classes.html">Using custom Element classes in lxml</a><ul class="submenu"><li class="menu item"><a href="element_classes.html#background-on-element-proxies">Background on Element proxies</a></li><li class="menu item"><a href="element_classes.html#element-initialization">Element initialization</a></li><li class="menu item"><a href="element_classes.html#setting-up-a-class-lookup-scheme">Setting up a class lookup scheme</a></li><li class="menu item"><a href="element_classes.html#generating-xml-with-custom-classes">Generating XML with custom classes</a></li><li class="menu item"><a href="element_classes.html#id1">Implementing namespaces</a></li></ul></li></ul><ul class="menu foreign" id="sax-menu"><li class="menu title"><a href="sax.html">Sax support</a><ul class="submenu"><li class="menu item"><a href="sax.html#building-a-tree-from-sax-events">Building a tree from SAX events</a></li><li class="menu item"><a href="sax.html#producing-sax-events-from-an-elementtree-or-element">Producing SAX events from an ElementTree or Element</a></li><li class="menu item"><a href="sax.html#interfacing-with-pulldom-minidom">Interfacing with pulldom/minidom</a></li></ul></li></ul><ul class="menu foreign" id="capi-menu"><li class="menu title"><a href="capi.html">The public C-API of lxml.etree</a><ul class="submenu"><li class="menu item"><a href="capi.html#writing-external-modules-in-cython">Writing external modules in Cython</a></li><li class="menu item"><a href="capi.html#writing-external-modules-in-c">Writing external modules in C</a></li></ul></li></ul></li></ul><ul id="Developing lxml-section"><li><span class="section title">Developing lxml</span><ul class="menu foreign" id="build-menu"><li class="menu title"><a href="build.html">How to build lxml from source</a><ul class="submenu"><li class="menu item"><a href="build.html#cython">Cython</a></li><li class="menu item"><a href="build.html#github-git-and-hg">Github, git and hg</a></li><li class="menu item"><a href="build.html#building-the-sources">Building the sources</a></li><li class="menu item"><a href="build.html#running-the-tests-and-reporting-errors">Running the tests and reporting errors</a></li><li class="menu item"><a href="build.html#building-an-egg-or-wheel">Building an egg or wheel</a></li><li class="menu item"><a href="build.html#building-lxml-on-macos-x">Building lxml on MacOS-X</a></li><li class="menu item"><a href="build.html#static-linking-on-windows">Static linking on Windows</a></li><li class="menu item"><a href="build.html#building-debian-packages-from-svn-sources">Building Debian packages from SVN sources</a></li></ul></li></ul><ul class="menu foreign" id="lxml source howto-menu"><li class="menu title"><a href="lxml-source-howto.html">How to read the source of lxml</a><ul class="submenu"><li class="menu item"><a href="lxml-source-howto.html#what-is-cython">What is Cython?</a></li><li class="menu item"><a href="lxml-source-howto.html#where-to-start">Where to start?</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-etree">lxml.etree</a></li><li class="menu item"><a href="lxml-source-howto.html#python-modules">Python modules</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-objectify">lxml.objectify</a></li><li class="menu item"><a href="lxml-source-howto.html#lxml-html">lxml.html</a></li></ul></li></ul><ul class="menu foreign" id="changes 3 3 1-menu"><li class="menu title"><a href="changes-3.3.1.html">Release Changelog</a></li></ul><ul class="menu foreign" id="credits-menu"><li class="menu title"><a href="credits.html">Credits</a><ul class="submenu"><li class="menu item"><a href="credits.html#main-contributors">Main contributors</a></li><li class="menu item"><a href="credits.html#special-thanks-goes-to">Special thanks goes to:</a></li></ul></li></ul></li><li><a href="http://lxml.de/sitemap.html">Sitemap</a></li></ul></div><h1 class="title">XPath and XSLT with lxml</h1>
 
 <p>lxml supports XPath 1.0, XSLT 1.0 and the EXSLT extensions through
 libxml2 and libxslt in a standards compliant way.</p>
@@ -589,7 +589,7 @@ If you want to free it from memory, just do:</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2014-01-26.
+Generated on: 2014-02-12.
 
 </div>
 </body>
index fe88f2e..7cfc487 100644 (file)
@@ -157,8 +157,8 @@ Index <http://pypi.python.org/pypi/lxml/>`_ (PyPI).  It has the source
 that compiles on various platforms.  The source distribution is signed
 with `this key <pubkey.asc>`_.
 
-The latest version is `lxml 3.3.0`_, released 2014-01-26
-(`changes for 3.3.0`_).  `Older versions <#old-versions>`_
+The latest version is `lxml 3.3.1`_, released 2014-02-12
+(`changes for 3.3.1`_).  `Older versions <#old-versions>`_
 are listed below.
 
 Please take a look at the
@@ -240,7 +240,9 @@ See the web sites of lxml
 `3.2 <http://lxml.de/3.2/>`_
 and the `latest in-development version <http://lxml.de/dev/>`_.
 
-.. _`PDF documentation`: lxmldoc-3.3.0.pdf
+.. _`PDF documentation`: lxmldoc-3.3.1.pdf
+
+* `lxml 3.3.1`_, released 2014-02-12 (`changes for 3.3.1`_)
 
 * `lxml 3.3.0`_, released 2014-01-26 (`changes for 3.3.0`_)
 
@@ -280,6 +282,7 @@ and the `latest in-development version <http://lxml.de/dev/>`_.
 
 * `older releases <http://lxml.de/3.0/#old-versions>`_
 
+.. _`lxml 3.3.1`: /files/lxml-3.3.1.tgz
 .. _`lxml 3.3.0`: /files/lxml-3.3.0.tgz
 .. _`lxml 3.3.0beta5`: /files/lxml-3.3.0beta5.tgz
 .. _`lxml 3.3.0beta4`: /files/lxml-3.3.0beta4.tgz
@@ -299,6 +302,7 @@ and the `latest in-development version <http://lxml.de/dev/>`_.
 .. _`lxml 3.0.1`: /files/lxml-3.0.1.tgz
 .. _`lxml 3.0`: /files/lxml-3.0.tgz
 
+.. _`changes for 3.3.1`: /changes-3.3.1.html
 .. _`changes for 3.3.0`: /changes-3.3.0.html
 .. _`changes for 3.3.0beta5`: /changes-3.3.0beta5.html
 .. _`changes for 3.3.0beta4`: /changes-3.3.0beta4.html
index f9554d2..ed4f10c 100644 (file)
@@ -517,7 +517,7 @@ iterating over the result.  This is most useful for non-blocking execution
 environments where data chunks arrive one after the other and should be
 processed as far as possible in each step.
 
-The basic usage is as follows:
+The same feature is available in lxml 3.3.  The basic usage is as follows:
 
 .. sourcecode:: pycon
 
diff --git a/requirements.txt b/requirements.txt
new file mode 100644 (file)
index 0000000..ed5195b
--- /dev/null
@@ -0,0 +1 @@
+Cython>=0.20
index 17c4c7b..66e9fbc 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -49,6 +49,21 @@ extra_options = {}
 if 'setuptools' in sys.modules:
     extra_options['zip_safe'] = False
 
+    try:
+        import pkg_resources
+    except ImportError:
+        pass
+    else:
+        f = open("requirements.txt", "r")
+        try:
+            deps = [str(req) for req in pkg_resources.parse_requirements(f)]
+        finally:
+            f.close()
+        extra_options['extra_require'] = {
+            'source': deps,
+            'cssselect': 'cssselect>=0.7',
+        }
+
 extra_options.update(setupinfo.extra_setup_args())
 
 extra_options['package_data'] = {
index 0daeaa4..704dea4 100644 (file)
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: lxml
-Version: 3.3.0
+Version: 3.3.1
 Summary: Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API.
 Home-page: http://lxml.de/
 Author: lxml dev team
 Author-email: lxml-dev@lxml.de
 License: UNKNOWN
-Download-URL: http://pypi.python.org/packages/source/l/lxml/lxml-3.3.0.tar.gz
+Download-URL: http://pypi.python.org/packages/source/l/lxml/lxml-3.3.1.tar.gz
 Description: lxml is a Pythonic, mature binding for the libxml2 and libxslt libraries.  It
         provides safe and convenient access to these libraries using the ElementTree
         API.
@@ -37,7 +37,7 @@ Description: lxml is a Pythonic, mature binding for the libxml2 and libxslt libr
         as soon as a maintenance branch has been established.  Note that this
         requires Cython to be installed at an appropriate version for the build.
         
-        3.3.0 (2014-01-26)
+        3.3.1 (2014-02-12)
         ==================
         
         Features added
@@ -46,8 +46,16 @@ Description: lxml is a Pythonic, mature binding for the libxml2 and libxslt libr
         Bugs fixed
         ----------
         
-        * The heuristic that distinguishes file paths from URLs was tightened
-          to produce less false negatives.
+        * LP#1014290: HTML documents parsed with ``parser.feed()`` failed to find
+          elements during tag iteration.
+        
+        * LP#1273709: Building in PyPy failed due to missing support for
+          ``PyUnicode_Compare()`` and ``PyByteArray_*()`` in PyPy's C-API.
+        
+        * LP#1274413: Compilation in MSVC failed due to missing "stdint.h" standard
+          header file.
+        
+        * LP#1274118: iterparse() failed to parse BOM prefixed files.
         
         Other changes
         -------------
index 94f9bdb..34e3ad3 100644 (file)
@@ -8,6 +8,7 @@ README.rst
 TODO.txt
 buildlibxml.py
 ez_setup.py
+requirements.txt
 selftest.py
 selftest2.py
 setup.cfg
@@ -59,7 +60,7 @@ doc/html/FAQ.html
 doc/html/api.html
 doc/html/build.html
 doc/html/capi.html
-doc/html/changes-3.3.0.html
+doc/html/changes-3.3.1.html
 doc/html/compatibility.html
 doc/html/credits.html
 doc/html/cssselect.html
index e81fc31..440496a 100644 (file)
@@ -1,3 +1,3 @@
 #ifndef LXML_VERSION_STRING
-#define LXML_VERSION_STRING "3.3.0"
+#define LXML_VERSION_STRING "3.3.1"
 #endif
index 190c302..c9312fa 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.20 on Sun Jan 26 08:01:29 2014 */
+/* Generated by Cython 0.20.1 on Wed Feb 12 09:46:47 2014 */
 
 #define PY_SSIZE_T_CLEAN
 #ifndef CYTHON_USE_PYLONG_INTERNALS
@@ -19,7 +19,7 @@
 #elif PY_VERSION_HEX < 0x02040000
     #error Cython requires Python 2.4+.
 #else
-#define CYTHON_ABI "0_20"
+#define CYTHON_ABI "0_20_1"
 #include <stddef.h> /* For offsetof */
 #ifndef offsetof
 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
   #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
-          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+          PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
   #define __Pyx_DefaultClassType PyClass_Type
 #else
   #define __Pyx_BUILTIN_MODULE_NAME "builtins"
   #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
   #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
 #endif
+#if CYTHON_COMPILING_IN_PYPY
+  #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
+  #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
+#else
+  #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
+  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \
+      PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
+#endif
 #define __Pyx_PyString_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
 #define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
-#define __Pyx_PyUnicode_Concat(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \
-    PyNumber_Add(a, b) : PyUnicode_Concat(a, b))
 #if PY_MAJOR_VERSION >= 3
   #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)
 #else
 #if PY_MAJOR_VERSION >= 3
   #define PyBoolObject                 PyLongObject
 #endif
-#if PY_VERSION_HEX < 0x03020000
+#if PY_VERSION_HEX < 0x030200A4
   typedef long Py_hash_t;
   #define __Pyx_PyInt_FromHash_t PyInt_FromLong
   #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
@@ -592,123 +598,123 @@ static const char *__pyx_f[] = {
 };
 
 /*--- Type declarations ---*/
-struct __pyx_obj_4lxml_5etree__BaseParser;
-struct __pyx_obj_4lxml_5etree__FeedParser;
-struct __pyx_obj_4lxml_5etree_XMLParser;
-struct __pyx_obj_4lxml_5etree_ETCompatXMLParser;
+struct __pyx_obj_4lxml_5etree__TempStore;
+struct __pyx_obj_4lxml_5etree__ExceptionContext;
+struct __pyx_obj_4lxml_5etree__LogEntry;
+struct __pyx_obj_4lxml_5etree__BaseErrorLog;
+struct __pyx_obj_4lxml_5etree__ListErrorLog;
+struct __pyx_obj_4lxml_5etree__ErrorLogContext;
+struct __pyx_obj_4lxml_5etree__ErrorLog;
+struct __pyx_obj_4lxml_5etree__DomainErrorLog;
+struct __pyx_obj_4lxml_5etree__RotatingErrorLog;
+struct __pyx_obj_4lxml_5etree_PyErrorLog;
+struct LxmlDocument;
+struct __pyx_obj_4lxml_5etree_DocInfo;
 struct LxmlElement;
 struct __pyx_obj_4lxml_5etree___ContentOnlyElement;
+struct __pyx_obj_4lxml_5etree__Comment;
 struct __pyx_obj_4lxml_5etree__ProcessingInstruction;
+struct __pyx_obj_4lxml_5etree__Entity;
+struct __pyx_obj_4lxml_5etree_QName;
+struct LxmlElementTree;
+struct __pyx_obj_4lxml_5etree__Attrib;
+struct __pyx_obj_4lxml_5etree__AttribIterator;
+struct LxmlElementTagMatcher;
+struct LxmlElementIterator;
+struct __pyx_obj_4lxml_5etree__MultiTagMatcher;
+struct __pyx_obj_4lxml_5etree__ElementMatchIterator;
+struct __pyx_obj_4lxml_5etree_ElementChildIterator;
+struct __pyx_obj_4lxml_5etree_SiblingsIterator;
+struct __pyx_obj_4lxml_5etree_AncestorsIterator;
+struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator;
+struct __pyx_obj_4lxml_5etree_ElementTextIterator;
+struct __pyx_obj_4lxml_5etree_CDATA;
+struct __pyx_obj_4lxml_5etree__ReadOnlyProxy;
+struct __pyx_obj_4lxml_5etree__ReadOnlyPIProxy;
+struct __pyx_obj_4lxml_5etree__ReadOnlyEntityProxy;
+struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy;
+struct __pyx_obj_4lxml_5etree__OpaqueNodeWrapper;
+struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper;
+struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy;
+struct __pyx_obj_4lxml_5etree__ModifyContentOnlyPIProxy;
+struct __pyx_obj_4lxml_5etree__ModifyContentOnlyEntityProxy;
+struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy;
+struct LxmlElementBase;
+struct __pyx_obj_4lxml_5etree_CommentBase;
 struct __pyx_obj_4lxml_5etree_PIBase;
-struct __pyx_obj_4lxml_5etree__XSLTProcessingInstruction;
-struct __pyx_obj_4lxml_5etree_XMLPullParser;
-struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues;
+struct __pyx_obj_4lxml_5etree_EntityBase;
+struct LxmlElementClassLookup;
+struct LxmlFallbackElementClassLookup;
+struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup;
+struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup;
+struct __pyx_obj_4lxml_5etree_ParserBasedElementClassLookup;
+struct __pyx_obj_4lxml_5etree_CustomElementClassLookup;
+struct __pyx_obj_4lxml_5etree_PythonElementClassLookup;
 struct __pyx_obj_4lxml_5etree__NamespaceRegistry;
+struct __pyx_obj_4lxml_5etree__ClassNamespaceRegistry;
+struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup;
 struct __pyx_obj_4lxml_5etree__FunctionNamespaceRegistry;
 struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry;
-struct __pyx_obj_4lxml_5etree__FileReaderContext;
-struct __pyx_obj_4lxml_5etree__BaseErrorLog;
-struct LxmlElementTagMatcher;
-struct __pyx_obj_4lxml_5etree_XSLT;
-struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator;
-struct LxmlElementClassLookup;
+struct __pyx_obj_4lxml_5etree__InputDocument;
+struct __pyx_obj_4lxml_5etree_Resolver;
 struct __pyx_obj_4lxml_5etree__ResolverRegistry;
+struct __pyx_obj_4lxml_5etree__ResolverContext;
+struct __pyx_obj_4lxml_5etree__ParserDictionaryContext;
+struct __pyx_obj_4lxml_5etree__FileReaderContext;
+struct __pyx_obj_4lxml_5etree__ParserContext;
+struct __pyx_obj_4lxml_5etree__BaseParser;
+struct __pyx_obj_4lxml_5etree__FeedParser;
+struct __pyx_obj_4lxml_5etree_XMLParser;
+struct __pyx_obj_4lxml_5etree_XMLPullParser;
+struct __pyx_obj_4lxml_5etree_ETCompatXMLParser;
+struct __pyx_obj_4lxml_5etree_HTMLParser;
+struct __pyx_obj_4lxml_5etree_HTMLPullParser;
 struct __pyx_obj_4lxml_5etree__SaxParserTarget;
+struct __pyx_obj_4lxml_5etree__SaxParserContext;
+struct __pyx_obj_4lxml_5etree__ParseEventsIterator;
 struct __pyx_obj_4lxml_5etree_TreeBuilder;
+struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget;
+struct __pyx_obj_4lxml_5etree__TargetParserContext;
+struct __pyx_obj_4lxml_5etree__FilelikeWriter;
+struct __pyx_obj_4lxml_5etree_xmlfile;
+struct __pyx_obj_4lxml_5etree__IncrementalFileWriter;
+struct __pyx_obj_4lxml_5etree__FileWriterElement;
+struct __pyx_obj_4lxml_5etree_iterparse;
+struct __pyx_obj_4lxml_5etree_iterwalk;
+struct __pyx_obj_4lxml_5etree__IDDict;
+struct __pyx_obj_4lxml_5etree_XInclude;
+struct __pyx_obj_4lxml_5etree__BaseContext;
+struct __pyx_obj_4lxml_5etree__ExsltRegExp;
+struct __pyx_obj_4lxml_5etree__ElementUnicodeResult;
+struct __pyx_obj_4lxml_5etree__XPathContext;
 struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase;
 struct __pyx_obj_4lxml_5etree_XPathElementEvaluator;
 struct __pyx_obj_4lxml_5etree_XPathDocumentEvaluator;
-struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes;
-struct __pyx_obj_4lxml_5etree__Comment;
-struct __pyx_obj_4lxml_5etree__MultiTagMatcher;
 struct __pyx_obj_4lxml_5etree_XPath;
 struct __pyx_obj_4lxml_5etree_ETXPath;
-struct LxmlFallbackElementClassLookup;
-struct __pyx_obj_4lxml_5etree_CustomElementClassLookup;
-struct __pyx_obj_4lxml_5etree__IncrementalFileWriter;
-struct __pyx_obj_4lxml_5etree__ReadOnlyProxy;
-struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy;
-struct __pyx_obj_4lxml_5etree_CommentBase;
-struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam;
-struct __pyx_obj_4lxml_5etree__BaseContext;
+struct __pyx_obj_4lxml_5etree__XSLTResolverContext;
+struct __pyx_obj_4lxml_5etree_XSLTAccessControl;
 struct __pyx_obj_4lxml_5etree__XSLTContext;
-struct __pyx_obj_4lxml_5etree__DTDElementDecl;
+struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam;
+struct __pyx_obj_4lxml_5etree_XSLT;
+struct __pyx_obj_4lxml_5etree__XSLTResultTree;
+struct __pyx_obj_4lxml_5etree__XSLTProcessingInstruction;
 struct __pyx_obj_4lxml_5etree_XSLTExtension;
-struct __pyx_obj_4lxml_5etree__ExceptionContext;
-struct __pyx_obj_4lxml_5etree__ResolverContext;
-struct __pyx_obj_4lxml_5etree__ParserContext;
-struct __pyx_obj_4lxml_5etree__SaxParserContext;
-struct __pyx_obj_4lxml_5etree__TargetParserContext;
-struct __pyx_obj_4lxml_5etree_Resolver;
-struct __pyx_obj_4lxml_5etree__XPathContext;
-struct __pyx_obj_4lxml_5etree__ParseEventsIterator;
-struct __pyx_obj_4lxml_5etree__Entity;
-struct __pyx_obj_4lxml_5etree_EntityBase;
-struct __pyx_obj_4lxml_5etree_XInclude;
-struct LxmlDocument;
-struct __pyx_obj_4lxml_5etree__InputDocument;
-struct LxmlElementTree;
-struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy;
-struct __pyx_obj_4lxml_5etree_ParserBasedElementClassLookup;
 struct __pyx_obj_4lxml_5etree__Validator;
-struct __pyx_obj_4lxml_5etree_RelaxNG;
-struct __pyx_obj_4lxml_5etree__LogEntry;
-struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget;
-struct __pyx_obj_4lxml_5etree_CDATA;
-struct __pyx_obj_4lxml_5etree_xmlfile;
 struct __pyx_obj_4lxml_5etree__DTDElementContentDecl;
-struct __pyx_obj_4lxml_5etree__ListErrorLog;
-struct __pyx_obj_4lxml_5etree__ErrorLog;
-struct __pyx_obj_4lxml_5etree__ReadOnlyPIProxy;
-struct __pyx_obj_4lxml_5etree__XSLTResultTree;
-struct __pyx_obj_4lxml_5etree_ElementTextIterator;
-struct LxmlElementIterator;
-struct LxmlElementBase;
-struct __pyx_obj_4lxml_5etree_PyErrorLog;
-struct __pyx_obj_4lxml_5etree_DTD;
-struct __pyx_obj_4lxml_5etree_iterparse;
-struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements;
-struct __pyx_obj_4lxml_5etree__XSLTResolverContext;
-struct __pyx_obj_4lxml_5etree__ParserDictionaryContext;
-struct __pyx_obj_4lxml_5etree_iterwalk;
-struct __pyx_obj_4lxml_5etree__DomainErrorLog;
-struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup;
-struct __pyx_obj_4lxml_5etree_DocInfo;
 struct __pyx_obj_4lxml_5etree__DTDAttributeDecl;
+struct __pyx_obj_4lxml_5etree__DTDElementDecl;
+struct __pyx_obj_4lxml_5etree__DTDEntityDecl;
+struct __pyx_obj_4lxml_5etree_DTD;
+struct __pyx_obj_4lxml_5etree_RelaxNG;
 struct __pyx_obj_4lxml_5etree_XMLSchema;
-struct __pyx_obj_4lxml_5etree__ElementMatchIterator;
-struct __pyx_obj_4lxml_5etree_AncestorsIterator;
-struct __pyx_obj_4lxml_5etree_HTMLParser;
-struct __pyx_obj_4lxml_5etree_HTMLPullParser;
-struct __pyx_obj_4lxml_5etree__IDDict;
-struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup;
-struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy;
-struct __pyx_obj_4lxml_5etree__ModifyContentOnlyEntityProxy;
-struct __pyx_obj_4lxml_5etree__ReadOnlyEntityProxy;
-struct __pyx_obj_4lxml_5etree__FileWriterElement;
+struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext;
+struct __pyx_obj_4lxml_5etree_Schematron;
 struct __pyx_obj_4lxml_5etree__MemDebug;
-struct __pyx_obj_4lxml_5etree__Attrib;
-struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup;
-struct __pyx_obj_4lxml_5etree__ElementUnicodeResult;
-struct __pyx_obj_4lxml_5etree__ExsltRegExp;
-struct __pyx_obj_4lxml_5etree_QName;
+struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues;
+struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes;
+struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements;
 struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities;
-struct __pyx_obj_4lxml_5etree__TempStore;
-struct __pyx_obj_4lxml_5etree__OpaqueNodeWrapper;
-struct __pyx_obj_4lxml_5etree__FilelikeWriter;
-struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper;
-struct __pyx_obj_4lxml_5etree_Schematron;
-struct __pyx_obj_4lxml_5etree__ErrorLogContext;
-struct __pyx_obj_4lxml_5etree_XSLTAccessControl;
-struct __pyx_obj_4lxml_5etree_SiblingsIterator;
-struct __pyx_obj_4lxml_5etree__ModifyContentOnlyPIProxy;
-struct __pyx_obj_4lxml_5etree__ClassNamespaceRegistry;
-struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext;
-struct __pyx_obj_4lxml_5etree__DTDEntityDecl;
-struct __pyx_obj_4lxml_5etree__AttribIterator;
-struct __pyx_obj_4lxml_5etree_PythonElementClassLookup;
-struct __pyx_obj_4lxml_5etree_ElementChildIterator;
-struct __pyx_obj_4lxml_5etree__RotatingErrorLog;
 struct __pyx_t_4lxml_5etree_qname;
 struct __pyx_t_4lxml_5etree__nscache;
 typedef struct __pyx_t_4lxml_5etree__nscache __pyx_t_4lxml_5etree__nscache;
@@ -807,7 +813,7 @@ struct __pyx_t_4lxml_5etree_qname {
  */
 typedef xmlNode *(*_node_to_node_function)(xmlNode *);
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":223
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":220
  *         c_parent = c_parent.parent
  * 
  * ctypedef struct _nscache:             # <<<<<<<<<<<<<<
@@ -863,67 +869,180 @@ typedef PyObject *(*_element_class_lookup_function)(PyObject *, struct LxmlDocum
  */
 typedef int (*__pyx_t_4lxml_5etree__register_function)(void *, PyObject *, PyObject *);
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":300
- * cdef public class _Document [ type LxmlDocumentType, object LxmlDocument ]
- * cdef public class _Element [ type LxmlElementType, object LxmlElement ]
- * cdef class _BaseParser             # <<<<<<<<<<<<<<
- * cdef class QName
- * ctypedef public xmlNode* (*_node_to_node_function)(xmlNode*)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":257
+ * @cython.final
+ * @cython.internal
+ * cdef class _TempStore:             # <<<<<<<<<<<<<<
+ *     cdef list _storage
+ *     def __init__(self):
  */
-struct __pyx_obj_4lxml_5etree__BaseParser {
+struct __pyx_obj_4lxml_5etree__TempStore {
   PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__BaseParser *__pyx_vtab;
-  struct LxmlElementClassLookup *_class_lookup;
-  struct __pyx_obj_4lxml_5etree__ResolverRegistry *_resolvers;
-  struct __pyx_obj_4lxml_5etree__ParserContext *_parser_context;
-  struct __pyx_obj_4lxml_5etree__ParserContext *_push_parser_context;
-  int _parse_options;
-  int _for_html;
-  int _remove_comments;
-  int _remove_pis;
-  int _strip_cdata;
-  struct __pyx_obj_4lxml_5etree_XMLSchema *_schema;
+  struct __pyx_vtabstruct_4lxml_5etree__TempStore *__pyx_vtab;
+  PyObject *_storage;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":272
+ * # class for temporarily storing exceptions raised in extensions
+ * @cython.internal
+ * cdef class _ExceptionContext:             # <<<<<<<<<<<<<<
+ *     cdef object _exc_info
+ *     cdef void clear(self):
+ */
+struct __pyx_obj_4lxml_5etree__ExceptionContext {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *__pyx_vtab;
+  PyObject *_exc_info;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":39
+ * 
+ * @cython.freelist(16)
+ * cdef class _LogEntry:             # <<<<<<<<<<<<<<
+ *     """A log message entry from an error log.
+ * 
+ */
+struct __pyx_obj_4lxml_5etree__LogEntry {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree__LogEntry *__pyx_vtab;
+  int domain;
+  int type;
+  int level;
+  int line;
+  int column;
+  PyObject *_message;
   PyObject *_filename;
-  PyObject *target;
-  PyObject *_default_encoding;
-  PyObject *_events_to_collect;
+  char *_c_message;
+  xmlChar *_c_filename;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1123
- * ############################################################
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":166
  * 
- * cdef class _FeedParser(_BaseParser):             # <<<<<<<<<<<<<<
- *     cdef bint _feed_parser_running
  * 
+ * cdef class _BaseErrorLog:             # <<<<<<<<<<<<<<
+ *     cdef _LogEntry _first_error
+ *     cdef readonly object last_error
  */
-struct __pyx_obj_4lxml_5etree__FeedParser {
-  struct __pyx_obj_4lxml_5etree__BaseParser __pyx_base;
-  int _feed_parser_running;
+struct __pyx_obj_4lxml_5etree__BaseErrorLog {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog *__pyx_vtab;
+  struct __pyx_obj_4lxml_5etree__LogEntry *_first_error;
+  PyObject *last_error;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1303
- *     )
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":256
+ *         return message
  * 
- * cdef class XMLParser(_FeedParser):             # <<<<<<<<<<<<<<
- *     u"""XMLParser(self, encoding=None, attribute_defaults=False, dtd_validation=False, load_dtd=False, no_network=True, ns_clean=False, recover=False, XMLSchema schema=None, remove_blank_text=False, resolve_entities=True, remove_comments=False, remove_pis=False, strip_cdata=True, target=None, compact=True)
+ * cdef class _ListErrorLog(_BaseErrorLog):             # <<<<<<<<<<<<<<
+ *     u"Immutable base version of a list based error log."
+ *     cdef list _entries
+ */
+struct __pyx_obj_4lxml_5etree__ListErrorLog {
+  struct __pyx_obj_4lxml_5etree__BaseErrorLog __pyx_base;
+  PyObject *_entries;
+  int _offset;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":373
+ * @cython.final
+ * @cython.internal
+ * cdef class _ErrorLogContext:             # <<<<<<<<<<<<<<
+ *     """
+ *     Error log context for the 'with' statement.
+ */
+struct __pyx_obj_4lxml_5etree__ErrorLogContext {
+  PyObject_HEAD
+  xmlStructuredErrorFunc old_error_func;
+  void *old_error_context;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":382
+ *     cdef void* old_error_context
  * 
+ * cdef class _ErrorLog(_ListErrorLog):             # <<<<<<<<<<<<<<
+ *     cdef list _logContexts
+ *     def __cinit__(self):
  */
-struct __pyx_obj_4lxml_5etree_XMLParser {
-  struct __pyx_obj_4lxml_5etree__FeedParser __pyx_base;
+struct __pyx_obj_4lxml_5etree__ErrorLog {
+  struct __pyx_obj_4lxml_5etree__ListErrorLog __pyx_base;
+  PyObject *_logContexts;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1415
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":439
+ *         self._entries.append(entry)
  * 
+ * cdef class _DomainErrorLog(_ErrorLog):             # <<<<<<<<<<<<<<
+ *     def __init__(self, domains):
+ *         _ErrorLog.__init__(self)
+ */
+struct __pyx_obj_4lxml_5etree__DomainErrorLog {
+  struct __pyx_obj_4lxml_5etree__ErrorLog __pyx_base;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":448
+ *             _ErrorLog.receive(self, entry)
  * 
- * cdef class ETCompatXMLParser(XMLParser):             # <<<<<<<<<<<<<<
- *     u"""ETCompatXMLParser(self, encoding=None, attribute_defaults=False, \
- *                  dtd_validation=False, load_dtd=False, no_network=True, \
+ * cdef class _RotatingErrorLog(_ErrorLog):             # <<<<<<<<<<<<<<
+ *     cdef int _max_len
+ *     def __init__(self, max_len):
  */
-struct __pyx_obj_4lxml_5etree_ETCompatXMLParser {
-  struct __pyx_obj_4lxml_5etree_XMLParser __pyx_base;
+struct __pyx_obj_4lxml_5etree__RotatingErrorLog {
+  struct __pyx_obj_4lxml_5etree__ErrorLog __pyx_base;
+  int _max_len;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":466
+ *                 del self._entries[:offset]
+ * 
+ * cdef class PyErrorLog(_BaseErrorLog):             # <<<<<<<<<<<<<<
+ *     u"""PyErrorLog(self, logger_name=None, logger=None)
+ *     A global error log that connects to the Python stdlib logging package.
+ */
+struct __pyx_obj_4lxml_5etree_PyErrorLog {
+  struct __pyx_obj_4lxml_5etree__BaseErrorLog __pyx_base;
+  PyObject *level_map;
+  PyObject *_map_level;
+  PyObject *_log;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":298
+ * 
+ * # forward declarations
+ * cdef public class _Document [ type LxmlDocumentType, object LxmlDocument ]             # <<<<<<<<<<<<<<
+ * cdef public class _Element [ type LxmlElementType, object LxmlElement ]
+ * cdef class _BaseParser
+ */
+struct LxmlDocument {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree__Document *__pyx_vtab;
+  int _ns_counter;
+  PyObject *_prefix_tail;
+  xmlDoc *_c_doc;
+  struct __pyx_obj_4lxml_5etree__BaseParser *_parser;
+};
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlDocumentType;
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":488
+ * 
+ * @cython.freelist(4)
+ * cdef class DocInfo:             # <<<<<<<<<<<<<<
+ *     u"Document information provided by parser and DTD."
+ *     cdef _Document _doc
+ */
+struct __pyx_obj_4lxml_5etree_DocInfo {
+  PyObject_HEAD
+  struct LxmlDocument *_doc;
 };
 
 
@@ -956,6 +1075,18 @@ struct __pyx_obj_4lxml_5etree___ContentOnlyElement {
 };
 
 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1578
+ *         return []
+ * 
+ * cdef class _Comment(__ContentOnlyElement):             # <<<<<<<<<<<<<<
+ *     property tag:
+ *         def __get__(self):
+ */
+struct __pyx_obj_4lxml_5etree__Comment {
+  struct __pyx_obj_4lxml_5etree___ContentOnlyElement __pyx_base;
+};
+
+
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1586
  *         return u"<!--%s-->" % self.text
  * 
@@ -968,168 +1099,178 @@ struct __pyx_obj_4lxml_5etree__ProcessingInstruction {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":126
- *         self._init()
- * 
- * cdef class PIBase(_ProcessingInstruction):             # <<<<<<<<<<<<<<
- *     u"""All custom Processing Instruction classes must inherit from this one.
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1636
+ * cdef object _FIND_PI_ATTRIBUTES = re.compile(ur'\s+(\w+)\s*=\s*(?:\'([^\']*)\'|"([^"]*)")', re.U).findall
  * 
+ * cdef class _Entity(__ContentOnlyElement):             # <<<<<<<<<<<<<<
+ *     property tag:
+ *         def __get__(self):
  */
-struct __pyx_obj_4lxml_5etree_PIBase {
-  struct __pyx_obj_4lxml_5etree__ProcessingInstruction __pyx_base;
+struct __pyx_obj_4lxml_5etree__Entity {
+  struct __pyx_obj_4lxml_5etree___ContentOnlyElement __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":849
- *     return __findStylesheetByID(doc, id=id)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":301
+ * cdef public class _Element [ type LxmlElementType, object LxmlElement ]
+ * cdef class _BaseParser
+ * cdef class QName             # <<<<<<<<<<<<<<
+ * ctypedef public xmlNode* (*_node_to_node_function)(xmlNode*)
  * 
- * cdef class _XSLTProcessingInstruction(PIBase):             # <<<<<<<<<<<<<<
- *     def parseXSL(self, parser=None):
- *         u"""parseXSL(self, parser=None)
  */
-struct __pyx_obj_4lxml_5etree__XSLTProcessingInstruction {
-  struct __pyx_obj_4lxml_5etree_PIBase __pyx_base;
+struct __pyx_obj_4lxml_5etree_QName {
+  PyObject_HEAD
+  PyObject *text;
+  PyObject *localname;
+  PyObject *namespace;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1386
- * 
- * 
- * cdef class XMLPullParser(XMLParser):             # <<<<<<<<<<<<<<
- *     """XMLPullParser(self, events=None, *, tag=None, **kwargs)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1735
  * 
+ * @cython.freelist(8)
+ * cdef public class _ElementTree [ type LxmlElementTreeType,             # <<<<<<<<<<<<<<
+ *                                  object LxmlElementTree ]:
+ *     cdef _Document _doc
  */
-struct __pyx_obj_4lxml_5etree_XMLPullParser {
-  struct __pyx_obj_4lxml_5etree_XMLParser __pyx_base;
+struct LxmlElementTree {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree__ElementTree *__pyx_vtab;
+  struct LxmlDocument *_doc;
+  struct LxmlElement *_context_node;
 };
 
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementTreeType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":165
- *            return funicode(self._c_node.defaultValue) if self._c_node.defaultValue is not NULL else None
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2204
  * 
- *     def itervalues(self):             # <<<<<<<<<<<<<<
- *         _assertValidDTDNode(self, self._c_node)
- *         cdef tree.xmlEnumeration *c_node = self._c_node.tree
+ * @cython.freelist(16)
+ * cdef class _Attrib:             # <<<<<<<<<<<<<<
+ *     u"""A dict-like proxy for the ``Element.attrib`` property.
+ *     """
  */
-struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues {
+struct __pyx_obj_4lxml_5etree__Attrib {
   PyObject_HEAD
-  xmlEnumeration *__pyx_v_c_node;
-  struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *__pyx_v_self;
+  struct LxmlElement *_element;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":15
- * 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2344
+ * @cython.final
  * @cython.internal
- * cdef class _NamespaceRegistry:             # <<<<<<<<<<<<<<
- *     u"Dictionary-like namespace registry"
- *     cdef object _ns_uri
+ * cdef class _AttribIterator:             # <<<<<<<<<<<<<<
+ *     u"""Attribute iterator - for internal use only!
+ *     """
  */
-struct __pyx_obj_4lxml_5etree__NamespaceRegistry {
+struct __pyx_obj_4lxml_5etree__AttribIterator {
   PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry *__pyx_vtab;
-  PyObject *_ns_uri;
-  PyObject *_ns_uri_utf;
-  PyObject *_entries;
-  char *_c_ns_uri_utf;
+  struct LxmlElement *_node;
+  xmlAttr *_c_attr;
+  int _keysvalues;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":192
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2385
  * 
- * @cython.internal
- * cdef class _FunctionNamespaceRegistry(_NamespaceRegistry):             # <<<<<<<<<<<<<<
- *     def __setitem__(self, name, item):
- *         if not callable(item):
+ * 
+ * cdef public class _ElementTagMatcher [ object LxmlElementTagMatcher,             # <<<<<<<<<<<<<<
+ *                                        type LxmlElementTagMatcherType ]:
+ *     """
  */
-struct __pyx_obj_4lxml_5etree__FunctionNamespaceRegistry {
-  struct __pyx_obj_4lxml_5etree__NamespaceRegistry __pyx_base;
+struct LxmlElementTagMatcher {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher *__pyx_vtab;
+  PyObject *_pystrings;
+  int _node_type;
+  char *_href;
+  char *_name;
 };
 
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementTagMatcherType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":207
- * @cython.final
- * @cython.internal
- * cdef class _XPathFunctionNamespaceRegistry(_FunctionNamespaceRegistry):             # <<<<<<<<<<<<<<
- *     cdef object _prefix
- *     cdef bytes _prefix_utf
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2416
+ *                 self._name = NULL
+ * 
+ * cdef public class _ElementIterator(_ElementTagMatcher) [             # <<<<<<<<<<<<<<
+ *     object LxmlElementIterator, type LxmlElementIteratorType ]:
+ *     """
  */
-struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry {
-  struct __pyx_obj_4lxml_5etree__FunctionNamespaceRegistry __pyx_base;
-  PyObject *_prefix;
-  PyObject *_prefix_utf;
+struct LxmlElementIterator {
+  struct LxmlElementTagMatcher __pyx_base;
+  struct LxmlElement *_node;
+  _node_to_node_function _next_element;
 };
 
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementIteratorType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":252
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2453
  * @cython.final
  * @cython.internal
- * cdef class _FileReaderContext:             # <<<<<<<<<<<<<<
- *     cdef object _filelike
- *     cdef object _encoding
+ * cdef class _MultiTagMatcher:             # <<<<<<<<<<<<<<
+ *     """
+ *     Match an xmlNode against a list of tags.
  */
-struct __pyx_obj_4lxml_5etree__FileReaderContext {
+struct __pyx_obj_4lxml_5etree__MultiTagMatcher {
   PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__FileReaderContext *__pyx_vtab;
-  PyObject *_filelike;
-  PyObject *_encoding;
-  PyObject *_url;
-  PyObject *_bytes;
-  struct __pyx_obj_4lxml_5etree__ExceptionContext *_exc_context;
-  Py_ssize_t _bytes_read;
-  char *_c_url;
-  int _close_file_after_read;
+  struct __pyx_vtabstruct_4lxml_5etree__MultiTagMatcher *__pyx_vtab;
+  PyObject *_py_tags;
+  struct __pyx_t_4lxml_5etree_qname *_cached_tags;
+  size_t _tag_count;
+  size_t _cached_size;
+  struct LxmlDocument *_cached_doc;
+  int _node_types;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":166
- * 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2594
+ *         return False
  * 
- * cdef class _BaseErrorLog:             # <<<<<<<<<<<<<<
- *     cdef _LogEntry _first_error
- *     cdef readonly object last_error
+ * cdef class _ElementMatchIterator:             # <<<<<<<<<<<<<<
+ *     cdef _Element _node
+ *     cdef _node_to_node_function _next_element
  */
-struct __pyx_obj_4lxml_5etree__BaseErrorLog {
+struct __pyx_obj_4lxml_5etree__ElementMatchIterator {
   PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog *__pyx_vtab;
-  struct __pyx_obj_4lxml_5etree__LogEntry *_first_error;
-  PyObject *last_error;
+  struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator *__pyx_vtab;
+  struct LxmlElement *_node;
+  _node_to_node_function _next_element;
+  struct __pyx_obj_4lxml_5etree__MultiTagMatcher *_matcher;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2385
- * 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2623
+ *         return current_node
  * 
- * cdef public class _ElementTagMatcher [ object LxmlElementTagMatcher,             # <<<<<<<<<<<<<<
- *                                        type LxmlElementTagMatcherType ]:
- *     """
+ * cdef class ElementChildIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
+ *     u"""ElementChildIterator(self, node, tag=None, reversed=False)
+ *     Iterates over the children of an element.
  */
-struct LxmlElementTagMatcher {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher *__pyx_vtab;
-  PyObject *_pystrings;
-  int _node_type;
-  char *_href;
-  char *_name;
+struct __pyx_obj_4lxml_5etree_ElementChildIterator {
+  struct __pyx_obj_4lxml_5etree__ElementMatchIterator __pyx_base;
 };
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementTagMatcherType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":334
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2643
+ *         self._node = _elementFactory(node._doc, c_node) if c_node is not NULL else None
  * 
- * @cython.no_gc_clear
- * cdef class XSLT:             # <<<<<<<<<<<<<<
- *     u"""XSLT(self, xslt_input, extensions=None, regexp=True, access_control=None)
+ * cdef class SiblingsIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
+ *     u"""SiblingsIterator(self, node, tag=None, preceding=False)
+ *     Iterates over the siblings of an element.
+ */
+struct __pyx_obj_4lxml_5etree_SiblingsIterator {
+  struct __pyx_obj_4lxml_5etree__ElementMatchIterator __pyx_base;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2658
+ *         self._storeNext(node)
  * 
+ * cdef class AncestorsIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
+ *     u"""AncestorsIterator(self, node, tag=None)
+ *     Iterates over the ancestors of an element (from parent to parent).
  */
-struct __pyx_obj_4lxml_5etree_XSLT {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree_XSLT *__pyx_vtab;
-  struct __pyx_obj_4lxml_5etree__XSLTContext *_context;
-  xsltStylesheet *_c_style;
-  struct __pyx_obj_4lxml_5etree__XSLTResolverContext *_xslt_resolver_context;
-  struct __pyx_obj_4lxml_5etree_XSLTAccessControl *_access_control;
-  struct __pyx_obj_4lxml_5etree__ErrorLog *_error_log;
+struct __pyx_obj_4lxml_5etree_AncestorsIterator {
+  struct __pyx_obj_4lxml_5etree__ElementMatchIterator __pyx_base;
 };
 
 
@@ -1149,182 +1290,223 @@ struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":214
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2744
+ *         return NULL
  * 
- * # class to store element class lookup functions
- * cdef public class ElementClassLookup [ type LxmlElementClassLookupType,             # <<<<<<<<<<<<<<
- *                                        object LxmlElementClassLookup ]:
- *     u"""ElementClassLookup(self)
+ * cdef class ElementTextIterator:             # <<<<<<<<<<<<<<
+ *     u"""ElementTextIterator(self, element, tag=None, with_tail=True)
+ *     Iterates over the text content of a subtree.
  */
-struct LxmlElementClassLookup {
+struct __pyx_obj_4lxml_5etree_ElementTextIterator {
   PyObject_HEAD
-  _element_class_lookup_function _lookup_function;
+  PyObject *_nextEvent;
+  struct LxmlElement *_start_element;
 };
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementClassLookupType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/docloader.pxi":113
- * @cython.final
- * @cython.internal
- * cdef class _ResolverRegistry:             # <<<<<<<<<<<<<<
- *     cdef object _resolvers
- *     cdef Resolver _default_resolver
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2856
+ * 
+ * @cython.freelist(8)
+ * cdef class CDATA:             # <<<<<<<<<<<<<<
+ *     u"""CDATA(data)
+ * 
  */
-struct __pyx_obj_4lxml_5etree__ResolverRegistry {
+struct __pyx_obj_4lxml_5etree_CDATA {
   PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__ResolverRegistry *__pyx_vtab;
-  PyObject *_resolvers;
-  struct __pyx_obj_4lxml_5etree_Resolver *_default_resolver;
+  PyObject *_utf8_data;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":41
- * 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":4
  * 
- * cdef class _SaxParserTarget:             # <<<<<<<<<<<<<<
- *     cdef int _sax_event_filter
- *     def __cinit__(self):
+ * @cython.internal
+ * cdef class _ReadOnlyProxy:             # <<<<<<<<<<<<<<
+ *     u"A read-only proxy class suitable for PIs/Comments (for internal use only!)."
+ *     cdef bint _free_after_use
  */
-struct __pyx_obj_4lxml_5etree__SaxParserTarget {
+struct __pyx_obj_4lxml_5etree__ReadOnlyProxy {
   PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__SaxParserTarget *__pyx_vtab;
-  int _sax_event_filter;
+  struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy *__pyx_vtab;
+  int _free_after_use;
+  xmlNode *_c_node;
+  struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *_source_proxy;
+  PyObject *_dependent_proxies;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":627
- * ############################################################
- * 
- * cdef class TreeBuilder(_SaxParserTarget):             # <<<<<<<<<<<<<<
- *     u"""TreeBuilder(self, element_factory=None, parser=None)
- *     Parser target that builds a tree.
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":248
+ * @cython.final
+ * @cython.internal
+ * cdef class _ReadOnlyPIProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
+ *     u"A read-only proxy for processing instructions (for internal use only!)"
+ *     property target:
  */
-struct __pyx_obj_4lxml_5etree_TreeBuilder {
-  struct __pyx_obj_4lxml_5etree__SaxParserTarget __pyx_base;
-  struct __pyx_obj_4lxml_5etree__BaseParser *_parser;
-  PyObject *_factory;
-  PyObject *_data;
-  PyObject *_element_stack;
-  PyObject *_element_stack_pop;
-  struct LxmlElement *_last;
-  int _in_tail;
+struct __pyx_obj_4lxml_5etree__ReadOnlyPIProxy {
+  struct __pyx_obj_4lxml_5etree__ReadOnlyProxy __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":123
- *     _XPATH_VERSION_WARNING_REQUIRED = 0
- * 
- * cdef class _XPathEvaluatorBase:             # <<<<<<<<<<<<<<
- *     cdef xpath.xmlXPathContext* _xpathCtxt
- *     cdef _XPathContext _context
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":257
+ * @cython.final
+ * @cython.internal
+ * cdef class _ReadOnlyEntityProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
+ *     u"A read-only proxy for entity references (for internal use only!)"
+ *     property name:
  */
-struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase *__pyx_vtab;
-  xmlXPathContext *_xpathCtxt;
-  struct __pyx_obj_4lxml_5etree__XPathContext *_context;
-  PyThread_type_lock _eval_lock;
-  struct __pyx_obj_4lxml_5etree__ErrorLog *_error_log;
+struct __pyx_obj_4lxml_5etree__ReadOnlyEntityProxy {
+  struct __pyx_obj_4lxml_5etree__ReadOnlyProxy __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":249
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":275
  * 
+ * @cython.internal
+ * cdef class _ReadOnlyElementProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
+ *     u"The main read-only Element proxy class (for internal use only!)."
  * 
- * cdef class XPathElementEvaluator(_XPathEvaluatorBase):             # <<<<<<<<<<<<<<
- *     u"""XPathElementEvaluator(self, element, namespaces=None, extensions=None, regexp=True, smart_strings=True)
- *     Create an XPath evaluator for an element.
  */
-struct __pyx_obj_4lxml_5etree_XPathElementEvaluator {
-  struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase __pyx_base;
-  struct LxmlElement *_element;
+struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy {
+  struct __pyx_obj_4lxml_5etree__ReadOnlyProxy __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":326
- * 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":365
  * 
- * cdef class XPathDocumentEvaluator(XPathElementEvaluator):             # <<<<<<<<<<<<<<
- *     u"""XPathDocumentEvaluator(self, etree, namespaces=None, extensions=None, regexp=True, smart_strings=True)
- *     Create an XPath evaluator for an ElementTree.
+ * @cython.internal
+ * cdef class _OpaqueNodeWrapper:             # <<<<<<<<<<<<<<
+ *     cdef tree.xmlNode* _c_node
+ *     def __init__(self):
  */
-struct __pyx_obj_4lxml_5etree_XPathDocumentEvaluator {
-  struct __pyx_obj_4lxml_5etree_XPathElementEvaluator __pyx_base;
+struct __pyx_obj_4lxml_5etree__OpaqueNodeWrapper {
+  PyObject_HEAD
+  xmlNode *_c_node;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":225
- *                return None
- * 
- *     def iterattributes(self):             # <<<<<<<<<<<<<<
- *         _assertValidDTDNode(self, self._c_node)
- *         cdef tree.xmlAttribute *c_node = self._c_node.attributes
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":372
+ * @cython.final
+ * @cython.internal
+ * cdef class _OpaqueDocumentWrapper(_OpaqueNodeWrapper):             # <<<<<<<<<<<<<<
+ *     cdef int _assertNode(self) except -1:
+ *         u"""This is our way of saying: this proxy is invalid!
  */
-struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes {
-  PyObject_HEAD
-  xmlAttribute *__pyx_v_c_node;
-  struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *__pyx_v_node;
-  struct __pyx_obj_4lxml_5etree__DTDElementDecl *__pyx_v_self;
+struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper {
+  struct __pyx_obj_4lxml_5etree__OpaqueNodeWrapper __pyx_base;
+  struct __pyx_vtabstruct_4lxml_5etree__OpaqueDocumentWrapper *__pyx_vtab;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1578
- *         return []
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":416
  * 
- * cdef class _Comment(__ContentOnlyElement):             # <<<<<<<<<<<<<<
- *     property tag:
- *         def __get__(self):
+ * @cython.internal
+ * cdef class _ModifyContentOnlyProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
+ *     u"""A read-only proxy that allows changing the text content.
+ *     """
  */
-struct __pyx_obj_4lxml_5etree__Comment {
-  struct __pyx_obj_4lxml_5etree___ContentOnlyElement __pyx_base;
+struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy {
+  struct __pyx_obj_4lxml_5etree__ReadOnlyProxy __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2453
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":439
  * @cython.final
  * @cython.internal
- * cdef class _MultiTagMatcher:             # <<<<<<<<<<<<<<
- *     """
- *     Match an xmlNode against a list of tags.
+ * cdef class _ModifyContentOnlyPIProxy(_ModifyContentOnlyProxy):             # <<<<<<<<<<<<<<
+ *     u"""A read-only proxy that allows changing the text/target content of a
+ *     processing instruction.
  */
-struct __pyx_obj_4lxml_5etree__MultiTagMatcher {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__MultiTagMatcher *__pyx_vtab;
-  PyObject *_py_tags;
-  struct __pyx_t_4lxml_5etree_qname *_cached_tags;
-  size_t _tag_count;
-  size_t _cached_size;
-  struct LxmlDocument *_cached_doc;
-  int _node_types;
+struct __pyx_obj_4lxml_5etree__ModifyContentOnlyPIProxy {
+  struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":405
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":456
+ * @cython.final
+ * @cython.internal
+ * cdef class _ModifyContentOnlyEntityProxy(_ModifyContentOnlyProxy):             # <<<<<<<<<<<<<<
+ *     u"A read-only proxy for entity references (for internal use only!)"
+ *     property name:
+ */
+struct __pyx_obj_4lxml_5etree__ModifyContentOnlyEntityProxy {
+  struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy __pyx_base;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":472
+ * @cython.final
+ * @cython.internal
+ * cdef class _AppendOnlyElementProxy(_ReadOnlyElementProxy):             # <<<<<<<<<<<<<<
+ *     u"""A read-only element that allows adding children and changing the
+ *     text content (i.e. everything that adds to the subtree).
+ */
+struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy {
+  struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy __pyx_base;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":6
+ * # Custom Element classes
  * 
+ * cdef public class ElementBase(_Element) [ type LxmlElementBaseType,             # <<<<<<<<<<<<<<
+ *                                           object LxmlElementBase ]:
+ *     u"""ElementBase(*children, attrib=None, nsmap=None, **_extra)
+ */
+struct LxmlElementBase {
+  struct LxmlElement __pyx_base;
+};
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementBaseType;
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":97
+ *                 raise TypeError, "Invalid child type: %r" % type(child)
+ * 
+ * cdef class CommentBase(_Comment):             # <<<<<<<<<<<<<<
+ *     u"""All custom Comment classes must inherit from this one.
  * 
- * cdef class XPath(_XPathEvaluatorBase):             # <<<<<<<<<<<<<<
- *     u"""XPath(self, path, namespaces=None, extensions=None, regexp=True, smart_strings=True)
- *     A compiled XPath expression that can be called on Elements and ElementTrees.
  */
-struct __pyx_obj_4lxml_5etree_XPath {
-  struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase __pyx_base;
-  xmlXPathCompExpr *_xpath;
-  PyObject *_path;
+struct __pyx_obj_4lxml_5etree_CommentBase {
+  struct __pyx_obj_4lxml_5etree__Comment __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":481
- * _find_namespaces = re.compile(b'({[^}]+})').findall
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":126
+ *         self._init()
+ * 
+ * cdef class PIBase(_ProcessingInstruction):             # <<<<<<<<<<<<<<
+ *     u"""All custom Processing Instruction classes must inherit from this one.
  * 
- * cdef class ETXPath(XPath):             # <<<<<<<<<<<<<<
- *     u"""ETXPath(self, path, extensions=None, regexp=True, smart_strings=True)
- *     Special XPath class that supports the ElementTree {uri} notation for namespaces.
  */
-struct __pyx_obj_4lxml_5etree_ETXPath {
-  struct __pyx_obj_4lxml_5etree_XPath __pyx_base;
+struct __pyx_obj_4lxml_5etree_PIBase {
+  struct __pyx_obj_4lxml_5etree__ProcessingInstruction __pyx_base;
 };
 
 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":157
+ *         self._init()
+ * 
+ * cdef class EntityBase(_Entity):             # <<<<<<<<<<<<<<
+ *     u"""All custom Entity classes must inherit from this one.
+ * 
+ */
+struct __pyx_obj_4lxml_5etree_EntityBase {
+  struct __pyx_obj_4lxml_5etree__Entity __pyx_base;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":214
+ * 
+ * # class to store element class lookup functions
+ * cdef public class ElementClassLookup [ type LxmlElementClassLookupType,             # <<<<<<<<<<<<<<
+ *                                        object LxmlElementClassLookup ]:
+ *     u"""ElementClassLookup(self)
+ */
+struct LxmlElementClassLookup {
+  PyObject_HEAD
+  _element_class_lookup_function _lookup_function;
+};
+
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementClassLookupType;
+
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":223
  *         self._lookup_function = NULL # use default lookup
  * 
@@ -1341,6 +1523,50 @@ struct LxmlFallbackElementClassLookup {
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlFallbackElementClassLookupType;
 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":265
+ * # default lookup scheme
+ * 
+ * cdef class ElementDefaultClassLookup(ElementClassLookup):             # <<<<<<<<<<<<<<
+ *     u"""ElementDefaultClassLookup(self, element=None, comment=None, pi=None, entity=None)
+ *     Element class lookup scheme that always returns the default Element
+ */
+struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup {
+  struct LxmlElementClassLookup __pyx_base;
+  PyObject *element_class;
+  PyObject *comment_class;
+  PyObject *pi_class;
+  PyObject *entity_class;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":344
+ * # attribute based lookup scheme
+ * 
+ * cdef class AttributeBasedElementClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
+ *     u"""AttributeBasedElementClassLookup(self, attribute_name, class_mapping, fallback=None)
+ *     Checks an attribute of an Element and looks up the value in a
+ */
+struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup {
+  struct LxmlFallbackElementClassLookup __pyx_base;
+  PyObject *_class_mapping;
+  PyObject *_pytag;
+  const xmlChar *_c_ns;
+  const xmlChar *_c_name;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":396
+ * #  per-parser lookup scheme
+ * 
+ * cdef class ParserBasedElementClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
+ *     u"""ParserBasedElementClassLookup(self, fallback=None)
+ *     Element class lookup based on the XML parser.
+ */
+struct __pyx_obj_4lxml_5etree_ParserBasedElementClassLookup {
+  struct LxmlFallbackElementClassLookup __pyx_base;
+};
+
+
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":413
  * #  custom class lookup based on node type, namespace, name
  * 
@@ -1353,158 +1579,127 @@ struct __pyx_obj_4lxml_5etree_CustomElementClassLookup {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":651
- * @cython.final
- * @cython.internal
- * cdef class _IncrementalFileWriter:             # <<<<<<<<<<<<<<
- *     cdef tree.xmlOutputBuffer* _c_out
- *     cdef bytes _encoding
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":468
+ * # read-only tree based class lookup
+ * 
+ * cdef class PythonElementClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
+ *     u"""PythonElementClassLookup(self, fallback=None)
+ *     Element class lookup based on a subclass method.
  */
-struct __pyx_obj_4lxml_5etree__IncrementalFileWriter {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__IncrementalFileWriter *__pyx_vtab;
-  xmlOutputBuffer *_c_out;
-  PyObject *_encoding;
-  const char *_c_encoding;
-  struct __pyx_obj_4lxml_5etree__FilelikeWriter *_target;
-  PyObject *_element_stack;
-  int _status;
+struct __pyx_obj_4lxml_5etree_PythonElementClassLookup {
+  struct LxmlFallbackElementClassLookup __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":4
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":15
  * 
  * @cython.internal
- * cdef class _ReadOnlyProxy:             # <<<<<<<<<<<<<<
- *     u"A read-only proxy class suitable for PIs/Comments (for internal use only!)."
- *     cdef bint _free_after_use
+ * cdef class _NamespaceRegistry:             # <<<<<<<<<<<<<<
+ *     u"Dictionary-like namespace registry"
+ *     cdef object _ns_uri
  */
-struct __pyx_obj_4lxml_5etree__ReadOnlyProxy {
+struct __pyx_obj_4lxml_5etree__NamespaceRegistry {
   PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy *__pyx_vtab;
-  int _free_after_use;
-  xmlNode *_c_node;
-  struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *_source_proxy;
-  PyObject *_dependent_proxies;
+  struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry *__pyx_vtab;
+  PyObject *_ns_uri;
+  PyObject *_ns_uri_utf;
+  PyObject *_entries;
+  char *_c_ns_uri_utf;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":275
- * 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":87
+ * @cython.final
  * @cython.internal
- * cdef class _ReadOnlyElementProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
- *     u"The main read-only Element proxy class (for internal use only!)."
- * 
+ * cdef class _ClassNamespaceRegistry(_NamespaceRegistry):             # <<<<<<<<<<<<<<
+ *     u"Dictionary-like registry for namespace implementation classes"
+ *     def __setitem__(self, name, item):
  */
-struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy {
-  struct __pyx_obj_4lxml_5etree__ReadOnlyProxy __pyx_base;
+struct __pyx_obj_4lxml_5etree__ClassNamespaceRegistry {
+  struct __pyx_obj_4lxml_5etree__NamespaceRegistry __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":97
- *                 raise TypeError, "Invalid child type: %r" % type(child)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":101
  * 
- * cdef class CommentBase(_Comment):             # <<<<<<<<<<<<<<
- *     u"""All custom Comment classes must inherit from this one.
+ * 
+ * cdef class ElementNamespaceClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
+ *     u"""ElementNamespaceClassLookup(self, fallback=None)
  * 
  */
-struct __pyx_obj_4lxml_5etree_CommentBase {
-  struct __pyx_obj_4lxml_5etree__Comment __pyx_base;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":324
- * @cython.internal
- * @cython.freelist(8)
- * cdef class _XSLTQuotedStringParam:             # <<<<<<<<<<<<<<
- *     u"""A wrapper class for literal XSLT string parameters that require
- *     quote escaping.
- */
-struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam {
-  PyObject_HEAD
-  PyObject *strval;
+struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup {
+  struct LxmlFallbackElementClassLookup __pyx_base;
+  PyObject *_namespace_registries;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/extensions.pxi":32
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":192
  * 
  * @cython.internal
- * cdef class _BaseContext:             # <<<<<<<<<<<<<<
- *     cdef xpath.xmlXPathContext* _xpathCtxt
- *     cdef _Document _doc
+ * cdef class _FunctionNamespaceRegistry(_NamespaceRegistry):             # <<<<<<<<<<<<<<
+ *     def __setitem__(self, name, item):
+ *         if not callable(item):
  */
-struct __pyx_obj_4lxml_5etree__BaseContext {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__BaseContext *__pyx_vtab;
-  xmlXPathContext *_xpathCtxt;
-  struct LxmlDocument *_doc;
-  PyObject *_extensions;
-  PyObject *_namespaces;
-  PyObject *_global_namespaces;
-  PyObject *_utf_refs;
-  PyObject *_function_cache;
-  PyObject *_eval_context_dict;
-  int _build_smart_strings;
-  struct __pyx_obj_4lxml_5etree__TempStore *_temp_refs;
-  PyObject *_temp_documents;
-  struct __pyx_obj_4lxml_5etree__ExceptionContext *_exc;
-  struct __pyx_obj_4lxml_5etree__ErrorLog *_error_log;
+struct __pyx_obj_4lxml_5etree__FunctionNamespaceRegistry {
+  struct __pyx_obj_4lxml_5etree__NamespaceRegistry __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":271
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":207
  * @cython.final
  * @cython.internal
- * cdef class _XSLTContext(_BaseContext):             # <<<<<<<<<<<<<<
- *     cdef xslt.xsltTransformContext* _xsltCtxt
- *     cdef _ReadOnlyElementProxy _extension_element_proxy
+ * cdef class _XPathFunctionNamespaceRegistry(_FunctionNamespaceRegistry):             # <<<<<<<<<<<<<<
+ *     cdef object _prefix
+ *     cdef bytes _prefix_utf
  */
-struct __pyx_obj_4lxml_5etree__XSLTContext {
-  struct __pyx_obj_4lxml_5etree__BaseContext __pyx_base;
-  xsltTransformContext *_xsltCtxt;
-  struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy *_extension_element_proxy;
-  PyObject *_extension_elements;
+struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry {
+  struct __pyx_obj_4lxml_5etree__FunctionNamespaceRegistry __pyx_base;
+  PyObject *_prefix;
+  PyObject *_prefix_utf;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":179
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/docloader.pxi":12
+ * @cython.final
  * @cython.internal
- * @cython.freelist(8)
- * cdef class _DTDElementDecl:             # <<<<<<<<<<<<<<
- *     cdef DTD _dtd
- *     cdef tree.xmlElement* _c_node
+ * cdef class _InputDocument:             # <<<<<<<<<<<<<<
+ *     cdef _InputDocumentDataType _type
+ *     cdef bytes _data_bytes
  */
-struct __pyx_obj_4lxml_5etree__DTDElementDecl {
+struct __pyx_obj_4lxml_5etree__InputDocument {
   PyObject_HEAD
-  struct __pyx_obj_4lxml_5etree_DTD *_dtd;
-  xmlElement *_c_node;
+  __pyx_t_4lxml_5etree__InputDocumentDataType _type;
+  PyObject *_data_bytes;
+  PyObject *_filename;
+  PyObject *_file;
+  int _close_file;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xsltext.pxi":3
- * # XSLT extension elements
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/docloader.pxi":23
  * 
- * cdef class XSLTExtension:             # <<<<<<<<<<<<<<
- *     u"""Base class of an XSLT extension element.
- *     """
+ * 
+ * cdef class Resolver:             # <<<<<<<<<<<<<<
+ *     u"This is the base class of all resolvers."
+ *     def resolve(self, system_url, public_id, context):
  */
-struct __pyx_obj_4lxml_5etree_XSLTExtension {
+struct __pyx_obj_4lxml_5etree_Resolver {
   PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree_XSLTExtension *__pyx_vtab;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":272
- * # class for temporarily storing exceptions raised in extensions
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/docloader.pxi":113
+ * @cython.final
  * @cython.internal
- * cdef class _ExceptionContext:             # <<<<<<<<<<<<<<
- *     cdef object _exc_info
- *     cdef void clear(self):
+ * cdef class _ResolverRegistry:             # <<<<<<<<<<<<<<
+ *     cdef object _resolvers
+ *     cdef Resolver _default_resolver
  */
-struct __pyx_obj_4lxml_5etree__ExceptionContext {
+struct __pyx_obj_4lxml_5etree__ResolverRegistry {
   PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *__pyx_vtab;
-  PyObject *_exc_info;
+  struct __pyx_vtabstruct_4lxml_5etree__ResolverRegistry *__pyx_vtab;
+  PyObject *_resolvers;
+  struct __pyx_obj_4lxml_5etree_Resolver *_default_resolver;
 };
 
 
@@ -1522,6 +1717,43 @@ struct __pyx_obj_4lxml_5etree__ResolverContext {
 };
 
 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":42
+ * @cython.final
+ * @cython.internal
+ * cdef class _ParserDictionaryContext:             # <<<<<<<<<<<<<<
+ *     # Global parser context to share the string dictionary.
+ *     #
+ */
+struct __pyx_obj_4lxml_5etree__ParserDictionaryContext {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree__ParserDictionaryContext *__pyx_vtab;
+  xmlDict *_c_dict;
+  struct __pyx_obj_4lxml_5etree__BaseParser *_default_parser;
+  PyObject *_implied_parser_contexts;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":253
+ * @cython.final
+ * @cython.internal
+ * cdef class _FileReaderContext:             # <<<<<<<<<<<<<<
+ *     cdef object _filelike
+ *     cdef object _encoding
+ */
+struct __pyx_obj_4lxml_5etree__FileReaderContext {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree__FileReaderContext *__pyx_vtab;
+  PyObject *_filelike;
+  PyObject *_encoding;
+  PyObject *_url;
+  PyObject *_bytes;
+  struct __pyx_obj_4lxml_5etree__ExceptionContext *_exc_context;
+  Py_ssize_t _bytes_read;
+  char *_c_url;
+  int _close_file_after_read;
+};
+
+
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":6
  * from lxml.includes cimport htmlparser
  * 
@@ -1539,246 +1771,180 @@ struct __pyx_obj_4lxml_5etree__ParserContext {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":7
- * 
- * cdef class _ParserContext(_ResolverContext)
- * cdef class _SaxParserContext(_ParserContext)             # <<<<<<<<<<<<<<
- * cdef class _TargetParserContext(_SaxParserContext)
- * cdef class _ParserSchemaValidationContext
- */
-struct __pyx_obj_4lxml_5etree__SaxParserContext {
-  struct __pyx_obj_4lxml_5etree__ParserContext __pyx_base;
-  struct __pyx_obj_4lxml_5etree__SaxParserTarget *_target;
-  struct __pyx_obj_4lxml_5etree__BaseParser *_parser;
-  startElementNsSAX2Func _origSaxStart;
-  endElementNsSAX2Func _origSaxEnd;
-  startElementSAXFunc _origSaxStartNoNs;
-  endElementSAXFunc _origSaxEndNoNs;
-  charactersSAXFunc _origSaxData;
-  cdataBlockSAXFunc _origSaxCData;
-  internalSubsetSAXFunc _origSaxDoctype;
-  commentSAXFunc _origSaxComment;
-  processingInstructionSAXFunc _origSaxPI;
-  startDocumentSAXFunc _origSaxStartDocument;
-  int _event_filter;
-  PyObject *_ns_stack;
-  PyObject *_node_stack;
-  struct __pyx_obj_4lxml_5etree__ParseEventsIterator *events_iterator;
-  struct LxmlElement *_root;
-  struct __pyx_obj_4lxml_5etree__MultiTagMatcher *_matcher;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":8
- * cdef class _ParserContext(_ResolverContext)
- * cdef class _SaxParserContext(_ParserContext)
- * cdef class _TargetParserContext(_SaxParserContext)             # <<<<<<<<<<<<<<
- * cdef class _ParserSchemaValidationContext
- * cdef class _Validator
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":300
+ * cdef public class _Document [ type LxmlDocumentType, object LxmlDocument ]
+ * cdef public class _Element [ type LxmlElementType, object LxmlElement ]
+ * cdef class _BaseParser             # <<<<<<<<<<<<<<
+ * cdef class QName
+ * ctypedef public xmlNode* (*_node_to_node_function)(xmlNode*)
  */
-struct __pyx_obj_4lxml_5etree__TargetParserContext {
-  struct __pyx_obj_4lxml_5etree__SaxParserContext __pyx_base;
-  PyObject *_python_target;
+struct __pyx_obj_4lxml_5etree__BaseParser {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree__BaseParser *__pyx_vtab;
+  struct LxmlElementClassLookup *_class_lookup;
+  struct __pyx_obj_4lxml_5etree__ResolverRegistry *_resolvers;
+  struct __pyx_obj_4lxml_5etree__ParserContext *_parser_context;
+  struct __pyx_obj_4lxml_5etree__ParserContext *_push_parser_context;
+  int _parse_options;
+  int _for_html;
+  int _remove_comments;
+  int _remove_pis;
+  int _strip_cdata;
+  struct __pyx_obj_4lxml_5etree_XMLSchema *_schema;
+  PyObject *_filename;
+  PyObject *target;
+  PyObject *_default_encoding;
+  PyObject *_events_to_collect;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/docloader.pxi":23
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1143
+ * ############################################################
  * 
+ * cdef class _FeedParser(_BaseParser):             # <<<<<<<<<<<<<<
+ *     cdef bint _feed_parser_running
  * 
- * cdef class Resolver:             # <<<<<<<<<<<<<<
- *     u"This is the base class of all resolvers."
- *     def resolve(self, system_url, public_id, context):
- */
-struct __pyx_obj_4lxml_5etree_Resolver {
-  PyObject_HEAD
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":52
- * @cython.final
- * @cython.internal
- * cdef class _XPathContext(_BaseContext):             # <<<<<<<<<<<<<<
- *     cdef object _variables
- *     def __init__(self, namespaces, extensions, error_log, enable_regexp, variables,
- */
-struct __pyx_obj_4lxml_5etree__XPathContext {
-  struct __pyx_obj_4lxml_5etree__BaseContext __pyx_base;
-  PyObject *_variables;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":222
- * @cython.final
- * @cython.internal
- * cdef class _ParseEventsIterator:             # <<<<<<<<<<<<<<
- *     """A reusable parse events iterator"""
- *     cdef list _events
  */
-struct __pyx_obj_4lxml_5etree__ParseEventsIterator {
-  PyObject_HEAD
-  PyObject *_events;
-  int _event_index;
+struct __pyx_obj_4lxml_5etree__FeedParser {
+  struct __pyx_obj_4lxml_5etree__BaseParser __pyx_base;
+  int _feed_parser_running;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1636
- * cdef object _FIND_PI_ATTRIBUTES = re.compile(ur'\s+(\w+)\s*=\s*(?:\'([^\']*)\'|"([^"]*)")', re.U).findall
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1359
+ *     )
+ * 
+ * cdef class XMLParser(_FeedParser):             # <<<<<<<<<<<<<<
+ *     u"""XMLParser(self, encoding=None, attribute_defaults=False, dtd_validation=False, load_dtd=False, no_network=True, ns_clean=False, recover=False, XMLSchema schema=None, remove_blank_text=False, resolve_entities=True, remove_comments=False, remove_pis=False, strip_cdata=True, target=None, compact=True)
  * 
- * cdef class _Entity(__ContentOnlyElement):             # <<<<<<<<<<<<<<
- *     property tag:
- *         def __get__(self):
  */
-struct __pyx_obj_4lxml_5etree__Entity {
-  struct __pyx_obj_4lxml_5etree___ContentOnlyElement __pyx_base;
+struct __pyx_obj_4lxml_5etree_XMLParser {
+  struct __pyx_obj_4lxml_5etree__FeedParser __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":157
- *         self._init()
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1442
  * 
- * cdef class EntityBase(_Entity):             # <<<<<<<<<<<<<<
- *     u"""All custom Entity classes must inherit from this one.
  * 
- */
-struct __pyx_obj_4lxml_5etree_EntityBase {
-  struct __pyx_obj_4lxml_5etree__Entity __pyx_base;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xinclude.pxi":10
- *     pass
+ * cdef class XMLPullParser(XMLParser):             # <<<<<<<<<<<<<<
+ *     """XMLPullParser(self, events=None, *, tag=None, **kwargs)
  * 
- * cdef class XInclude:             # <<<<<<<<<<<<<<
- *     u"""XInclude(self)
- *     XInclude processor.
  */
-struct __pyx_obj_4lxml_5etree_XInclude {
-  PyObject_HEAD
-  struct __pyx_obj_4lxml_5etree__ErrorLog *_error_log;
+struct __pyx_obj_4lxml_5etree_XMLPullParser {
+  struct __pyx_obj_4lxml_5etree_XMLParser __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":298
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1471
  * 
- * # forward declarations
- * cdef public class _Document [ type LxmlDocumentType, object LxmlDocument ]             # <<<<<<<<<<<<<<
- * cdef public class _Element [ type LxmlElementType, object LxmlElement ]
- * cdef class _BaseParser
- */
-struct LxmlDocument {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__Document *__pyx_vtab;
-  int _ns_counter;
-  PyObject *_prefix_tail;
-  xmlDoc *_c_doc;
-  struct __pyx_obj_4lxml_5etree__BaseParser *_parser;
-};
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlDocumentType;
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/docloader.pxi":12
- * @cython.final
- * @cython.internal
- * cdef class _InputDocument:             # <<<<<<<<<<<<<<
- *     cdef _InputDocumentDataType _type
- *     cdef bytes _data_bytes
+ * 
+ * cdef class ETCompatXMLParser(XMLParser):             # <<<<<<<<<<<<<<
+ *     u"""ETCompatXMLParser(self, encoding=None, attribute_defaults=False, \
+ *                  dtd_validation=False, load_dtd=False, no_network=True, \
  */
-struct __pyx_obj_4lxml_5etree__InputDocument {
-  PyObject_HEAD
-  __pyx_t_4lxml_5etree__InputDocumentDataType _type;
-  PyObject *_data_bytes;
-  PyObject *_filename;
-  PyObject *_file;
-  int _close_file;
+struct __pyx_obj_4lxml_5etree_ETCompatXMLParser {
+  struct __pyx_obj_4lxml_5etree_XMLParser __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1735
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1550
+ *     )
  * 
- * @cython.freelist(8)
- * cdef public class _ElementTree [ type LxmlElementTreeType,             # <<<<<<<<<<<<<<
- *                                  object LxmlElementTree ]:
- *     cdef _Document _doc
+ * cdef class HTMLParser(_FeedParser):             # <<<<<<<<<<<<<<
+ *     u"""HTMLParser(self, encoding=None, remove_blank_text=False, \
+ *                    remove_comments=False, remove_pis=False, strip_cdata=True, \
  */
-struct LxmlElementTree {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__ElementTree *__pyx_vtab;
-  struct LxmlDocument *_doc;
-  struct LxmlElement *_context_node;
+struct __pyx_obj_4lxml_5etree_HTMLParser {
+  struct __pyx_obj_4lxml_5etree__FeedParser __pyx_base;
 };
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementTreeType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":416
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1606
+ * 
+ * 
+ * cdef class HTMLPullParser(HTMLParser):             # <<<<<<<<<<<<<<
+ *     """HTMLPullParser(self, events=None, *, tag=None, base_url=None, **kwargs)
  * 
- * @cython.internal
- * cdef class _ModifyContentOnlyProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
- *     u"""A read-only proxy that allows changing the text content.
- *     """
  */
-struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy {
-  struct __pyx_obj_4lxml_5etree__ReadOnlyProxy __pyx_base;
+struct __pyx_obj_4lxml_5etree_HTMLPullParser {
+  struct __pyx_obj_4lxml_5etree_HTMLParser __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":396
- * #  per-parser lookup scheme
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":41
  * 
- * cdef class ParserBasedElementClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
- *     u"""ParserBasedElementClassLookup(self, fallback=None)
- *     Element class lookup based on the XML parser.
+ * 
+ * cdef class _SaxParserTarget:             # <<<<<<<<<<<<<<
+ *     cdef int _sax_event_filter
+ *     def __cinit__(self):
  */
-struct __pyx_obj_4lxml_5etree_ParserBasedElementClassLookup {
-  struct LxmlFallbackElementClassLookup __pyx_base;
+struct __pyx_obj_4lxml_5etree__SaxParserTarget {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree__SaxParserTarget *__pyx_vtab;
+  int _sax_event_filter;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":10
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":7
+ * 
+ * cdef class _ParserContext(_ResolverContext)
+ * cdef class _SaxParserContext(_ParserContext)             # <<<<<<<<<<<<<<
  * cdef class _TargetParserContext(_SaxParserContext)
  * cdef class _ParserSchemaValidationContext
- * cdef class _Validator             # <<<<<<<<<<<<<<
- * cdef class XMLSchema(_Validator)
- * 
  */
-struct __pyx_obj_4lxml_5etree__Validator {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__Validator *__pyx_vtab;
-  struct __pyx_obj_4lxml_5etree__ErrorLog *_error_log;
+struct __pyx_obj_4lxml_5etree__SaxParserContext {
+  struct __pyx_obj_4lxml_5etree__ParserContext __pyx_base;
+  struct __pyx_obj_4lxml_5etree__SaxParserTarget *_target;
+  struct __pyx_obj_4lxml_5etree__BaseParser *_parser;
+  startElementNsSAX2Func _origSaxStart;
+  endElementNsSAX2Func _origSaxEnd;
+  startElementSAXFunc _origSaxStartNoNs;
+  endElementSAXFunc _origSaxEndNoNs;
+  charactersSAXFunc _origSaxData;
+  cdataBlockSAXFunc _origSaxCData;
+  internalSubsetSAXFunc _origSaxDoctype;
+  commentSAXFunc _origSaxComment;
+  processingInstructionSAXFunc _origSaxPI;
+  startDocumentSAXFunc _origSaxStartDocument;
+  int _event_filter;
+  PyObject *_ns_stack;
+  PyObject *_node_stack;
+  struct __pyx_obj_4lxml_5etree__ParseEventsIterator *events_iterator;
+  struct LxmlElement *_root;
+  struct __pyx_obj_4lxml_5etree__MultiTagMatcher *_matcher;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/relaxng.pxi":22
- * # RelaxNG
- * 
- * cdef class RelaxNG(_Validator):             # <<<<<<<<<<<<<<
- *     u"""RelaxNG(self, etree=None, file=None)
- *     Turn a document into a Relax NG validator.
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":222
+ * @cython.final
+ * @cython.internal
+ * cdef class _ParseEventsIterator:             # <<<<<<<<<<<<<<
+ *     """A reusable parse events iterator"""
+ *     cdef list _events
  */
-struct __pyx_obj_4lxml_5etree_RelaxNG {
-  struct __pyx_obj_4lxml_5etree__Validator __pyx_base;
-  xmlRelaxNG *_c_schema;
+struct __pyx_obj_4lxml_5etree__ParseEventsIterator {
+  PyObject_HEAD
+  PyObject *_events;
+  int _event_index;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":39
- * 
- * @cython.freelist(16)
- * cdef class _LogEntry:             # <<<<<<<<<<<<<<
- *     """A log message entry from an error log.
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":627
+ * ############################################################
  * 
+ * cdef class TreeBuilder(_SaxParserTarget):             # <<<<<<<<<<<<<<
+ *     u"""TreeBuilder(self, element_factory=None, parser=None)
+ *     Parser target that builds a tree.
  */
-struct __pyx_obj_4lxml_5etree__LogEntry {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__LogEntry *__pyx_vtab;
-  int domain;
-  int type;
-  int level;
-  int line;
-  int column;
-  PyObject *_message;
-  PyObject *_filename;
-  char *_c_message;
-  xmlChar *_c_filename;
+struct __pyx_obj_4lxml_5etree_TreeBuilder {
+  struct __pyx_obj_4lxml_5etree__SaxParserTarget __pyx_base;
+  struct __pyx_obj_4lxml_5etree__BaseParser *_parser;
+  PyObject *_factory;
+  PyObject *_data;
+  PyObject *_element_stack;
+  PyObject *_element_stack_pop;
+  struct LxmlElement *_last;
+  int _in_tail;
 };
 
 
@@ -1801,16 +1967,33 @@ struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2856
- * 
- * @cython.freelist(8)
- * cdef class CDATA:             # <<<<<<<<<<<<<<
- *     u"""CDATA(data)
- * 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":8
+ * cdef class _ParserContext(_ResolverContext)
+ * cdef class _SaxParserContext(_ParserContext)
+ * cdef class _TargetParserContext(_SaxParserContext)             # <<<<<<<<<<<<<<
+ * cdef class _ParserSchemaValidationContext
+ * cdef class _Validator
  */
-struct __pyx_obj_4lxml_5etree_CDATA {
+struct __pyx_obj_4lxml_5etree__TargetParserContext {
+  struct __pyx_obj_4lxml_5etree__SaxParserContext __pyx_base;
+  PyObject *_python_target;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":369
+ * @cython.final
+ * @cython.internal
+ * cdef class _FilelikeWriter:             # <<<<<<<<<<<<<<
+ *     cdef object _filelike
+ *     cdef object _close_filelike
+ */
+struct __pyx_obj_4lxml_5etree__FilelikeWriter {
   PyObject_HEAD
-  PyObject *_utf8_data;
+  struct __pyx_vtabstruct_4lxml_5etree__FilelikeWriter *__pyx_vtab;
+  PyObject *_filelike;
+  PyObject *_close_filelike;
+  struct __pyx_obj_4lxml_5etree__ExceptionContext *_exc_context;
+  struct __pyx_obj_4lxml_5etree__ErrorLog *error_log;
 };
 
 
@@ -1830,143 +2013,36 @@ struct __pyx_obj_4lxml_5etree_xmlfile {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":26
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":651
+ * @cython.final
  * @cython.internal
- * @cython.freelist(8)
- * cdef class _DTDElementContentDecl:             # <<<<<<<<<<<<<<
- *     cdef DTD _dtd
- *     cdef tree.xmlElementContent* _c_node
+ * cdef class _IncrementalFileWriter:             # <<<<<<<<<<<<<<
+ *     cdef tree.xmlOutputBuffer* _c_out
+ *     cdef bytes _encoding
  */
-struct __pyx_obj_4lxml_5etree__DTDElementContentDecl {
+struct __pyx_obj_4lxml_5etree__IncrementalFileWriter {
   PyObject_HEAD
-  struct __pyx_obj_4lxml_5etree_DTD *_dtd;
-  xmlElementContent *_c_node;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":256
- *         return message
- * 
- * cdef class _ListErrorLog(_BaseErrorLog):             # <<<<<<<<<<<<<<
- *     u"Immutable base version of a list based error log."
- *     cdef list _entries
- */
-struct __pyx_obj_4lxml_5etree__ListErrorLog {
-  struct __pyx_obj_4lxml_5etree__BaseErrorLog __pyx_base;
-  PyObject *_entries;
-  int _offset;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":382
- *     cdef void* old_error_context
- * 
- * cdef class _ErrorLog(_ListErrorLog):             # <<<<<<<<<<<<<<
- *     cdef list _logContexts
- *     def __cinit__(self):
- */
-struct __pyx_obj_4lxml_5etree__ErrorLog {
-  struct __pyx_obj_4lxml_5etree__ListErrorLog __pyx_base;
-  PyObject *_logContexts;
+  struct __pyx_vtabstruct_4lxml_5etree__IncrementalFileWriter *__pyx_vtab;
+  xmlOutputBuffer *_c_out;
+  PyObject *_encoding;
+  const char *_c_encoding;
+  struct __pyx_obj_4lxml_5etree__FilelikeWriter *_target;
+  PyObject *_element_stack;
+  int _status;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":248
- * @cython.final
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":887
  * @cython.internal
- * cdef class _ReadOnlyPIProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
- *     u"A read-only proxy for processing instructions (for internal use only!)"
- *     property target:
- */
-struct __pyx_obj_4lxml_5etree__ReadOnlyPIProxy {
-  struct __pyx_obj_4lxml_5etree__ReadOnlyProxy __pyx_base;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":698
- * 
- * @cython.final
- * cdef class _XSLTResultTree(_ElementTree):             # <<<<<<<<<<<<<<
- *     cdef XSLT _xslt
- *     cdef _Document _profile
- */
-struct __pyx_obj_4lxml_5etree__XSLTResultTree {
-  struct LxmlElementTree __pyx_base;
-  struct __pyx_obj_4lxml_5etree_XSLT *_xslt;
-  struct LxmlDocument *_profile;
-  xmlChar *_buffer;
-  Py_ssize_t _buffer_len;
-  Py_ssize_t _buffer_refcnt;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2744
- *         return NULL
- * 
- * cdef class ElementTextIterator:             # <<<<<<<<<<<<<<
- *     u"""ElementTextIterator(self, element, tag=None, with_tail=True)
- *     Iterates over the text content of a subtree.
+ * @cython.freelist(8)
+ * cdef class _FileWriterElement:             # <<<<<<<<<<<<<<
+ *     cdef object _element
+ *     cdef _IncrementalFileWriter _writer
  */
-struct __pyx_obj_4lxml_5etree_ElementTextIterator {
+struct __pyx_obj_4lxml_5etree__FileWriterElement {
   PyObject_HEAD
-  PyObject *_nextEvent;
-  struct LxmlElement *_start_element;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2416
- *                 self._name = NULL
- * 
- * cdef public class _ElementIterator(_ElementTagMatcher) [             # <<<<<<<<<<<<<<
- *     object LxmlElementIterator, type LxmlElementIteratorType ]:
- *     """
- */
-struct LxmlElementIterator {
-  struct LxmlElementTagMatcher __pyx_base;
-  struct LxmlElement *_node;
-  _node_to_node_function _next_element;
-};
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementIteratorType;
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":6
- * # Custom Element classes
- * 
- * cdef public class ElementBase(_Element) [ type LxmlElementBaseType,             # <<<<<<<<<<<<<<
- *                                           object LxmlElementBase ]:
- *     u"""ElementBase(*children, attrib=None, nsmap=None, **_extra)
- */
-struct LxmlElementBase {
-  struct LxmlElement __pyx_base;
-};
-
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementBaseType;
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":466
- *                 del self._entries[:offset]
- * 
- * cdef class PyErrorLog(_BaseErrorLog):             # <<<<<<<<<<<<<<
- *     u"""PyErrorLog(self, logger_name=None, logger=None)
- *     A global error log that connects to the Python stdlib logging package.
- */
-struct __pyx_obj_4lxml_5etree_PyErrorLog {
-  struct __pyx_obj_4lxml_5etree__BaseErrorLog __pyx_base;
-  PyObject *level_map;
-  PyObject *_map_level;
-  PyObject *_log;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":267
- * # DTD
- * 
- * cdef class DTD(_Validator):             # <<<<<<<<<<<<<<
- *     u"""DTD(self, file=None, external_id=None)
- *     A DTD validator.
- */
-struct __pyx_obj_4lxml_5etree_DTD {
-  struct __pyx_obj_4lxml_5etree__Validator __pyx_base;
-  xmlDtd *_c_dtd;
+  PyObject *_element;
+  struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *_writer;
 };
 
 
@@ -1991,51 +2067,6 @@ struct __pyx_obj_4lxml_5etree_iterparse {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":310
- *           return funicode(self._c_dtd.SystemID) if (self._c_dtd is not NULL and self._c_dtd.SystemID is not NULL) else None
- * 
- *     def iterelements(self):             # <<<<<<<<<<<<<<
- *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
- *         while c_node is not NULL:
- */
-struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements {
-  PyObject_HEAD
-  xmlNode *__pyx_v_c_node;
-  struct __pyx_obj_4lxml_5etree__DTDElementDecl *__pyx_v_node;
-  struct __pyx_obj_4lxml_5etree_DTD *__pyx_v_self;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":52
- * @cython.final
- * @cython.internal
- * cdef class _XSLTResolverContext(_ResolverContext):             # <<<<<<<<<<<<<<
- *     cdef xmlDoc* _c_style_doc
- *     cdef _BaseParser _parser
- */
-struct __pyx_obj_4lxml_5etree__XSLTResolverContext {
-  struct __pyx_obj_4lxml_5etree__ResolverContext __pyx_base;
-  xmlDoc *_c_style_doc;
-  struct __pyx_obj_4lxml_5etree__BaseParser *_parser;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":42
- * @cython.final
- * @cython.internal
- * cdef class _ParserDictionaryContext:             # <<<<<<<<<<<<<<
- *     # Global parser context to share the string dictionary.
- *     #
- */
-struct __pyx_obj_4lxml_5etree__ParserDictionaryContext {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__ParserDictionaryContext *__pyx_vtab;
-  xmlDict *_c_dict;
-  struct __pyx_obj_4lxml_5etree__BaseParser *_default_parser;
-  PyObject *_implied_parser_contexts;
-};
-
-
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/iterparse.pxi":203
  * 
  * 
@@ -2055,441 +2086,397 @@ struct __pyx_obj_4lxml_5etree_iterwalk {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":439
- *         self._entries.append(entry)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlid.pxi":58
+ *     return (_elementTreeFactory(doc, None), _IDDict(doc))
  * 
- * cdef class _DomainErrorLog(_ErrorLog):             # <<<<<<<<<<<<<<
- *     def __init__(self, domains):
- *         _ErrorLog.__init__(self)
+ * cdef class _IDDict:             # <<<<<<<<<<<<<<
+ *     u"""IDDict(self, etree)
+ *     A dictionary-like proxy class that mapps ID attributes to elements.
  */
-struct __pyx_obj_4lxml_5etree__DomainErrorLog {
-  struct __pyx_obj_4lxml_5etree__ErrorLog __pyx_base;
+struct __pyx_obj_4lxml_5etree__IDDict {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree__IDDict *__pyx_vtab;
+  struct LxmlDocument *_doc;
+  PyObject *_keys;
+  PyObject *_items;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":344
- * # attribute based lookup scheme
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xinclude.pxi":10
+ *     pass
  * 
- * cdef class AttributeBasedElementClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
- *     u"""AttributeBasedElementClassLookup(self, attribute_name, class_mapping, fallback=None)
- *     Checks an attribute of an Element and looks up the value in a
+ * cdef class XInclude:             # <<<<<<<<<<<<<<
+ *     u"""XInclude(self)
+ *     XInclude processor.
  */
-struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup {
-  struct LxmlFallbackElementClassLookup __pyx_base;
-  PyObject *_class_mapping;
-  PyObject *_pytag;
-  const xmlChar *_c_ns;
-  const xmlChar *_c_name;
+struct __pyx_obj_4lxml_5etree_XInclude {
+  PyObject_HEAD
+  struct __pyx_obj_4lxml_5etree__ErrorLog *_error_log;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":488
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/extensions.pxi":32
  * 
- * @cython.freelist(4)
- * cdef class DocInfo:             # <<<<<<<<<<<<<<
- *     u"Document information provided by parser and DTD."
+ * @cython.internal
+ * cdef class _BaseContext:             # <<<<<<<<<<<<<<
+ *     cdef xpath.xmlXPathContext* _xpathCtxt
  *     cdef _Document _doc
  */
-struct __pyx_obj_4lxml_5etree_DocInfo {
+struct __pyx_obj_4lxml_5etree__BaseContext {
   PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree__BaseContext *__pyx_vtab;
+  xmlXPathContext *_xpathCtxt;
   struct LxmlDocument *_doc;
+  PyObject *_extensions;
+  PyObject *_namespaces;
+  PyObject *_global_namespaces;
+  PyObject *_utf_refs;
+  PyObject *_function_cache;
+  PyObject *_eval_context_dict;
+  int _build_smart_strings;
+  struct __pyx_obj_4lxml_5etree__TempStore *_temp_refs;
+  PyObject *_temp_documents;
+  struct __pyx_obj_4lxml_5etree__ExceptionContext *_exc;
+  struct __pyx_obj_4lxml_5etree__ErrorLog *_error_log;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":96
- * @cython.internal
- * @cython.freelist(8)
- * cdef class _DTDAttributeDecl:             # <<<<<<<<<<<<<<
- *     cdef DTD _dtd
- *     cdef tree.xmlAttribute* _c_node
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/extensions.pxi":26
+ * 
+ * ctypedef int (*_register_function)(void* ctxt, name_utf, ns_uri_utf)
+ * cdef class _ExsltRegExp             # <<<<<<<<<<<<<<
+ * 
+ * ################################################################################
  */
-struct __pyx_obj_4lxml_5etree__DTDAttributeDecl {
+struct __pyx_obj_4lxml_5etree__ExsltRegExp {
   PyObject_HEAD
-  struct __pyx_obj_4lxml_5etree_DTD *_dtd;
-  xmlAttribute *_c_node;
+  struct __pyx_vtabstruct_4lxml_5etree__ExsltRegExp *__pyx_vtab;
+  PyObject *_compile_map;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":11
- * cdef class _ParserSchemaValidationContext
- * cdef class _Validator
- * cdef class XMLSchema(_Validator)             # <<<<<<<<<<<<<<
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/extensions.pxi":722
  * 
- * class ParseError(LxmlSyntaxError):
+ * @cython.final
+ * cdef class _ElementUnicodeResult(unicode):             # <<<<<<<<<<<<<<
+ *     cdef _Element _parent
+ *     cdef readonly object attrname
  */
-struct __pyx_obj_4lxml_5etree_XMLSchema {
-  struct __pyx_obj_4lxml_5etree__Validator __pyx_base;
-  xmlSchema *_c_schema;
-  int _has_default_attributes;
-  int _add_attribute_defaults;
+struct __pyx_obj_4lxml_5etree__ElementUnicodeResult {
+  PyUnicodeObject __pyx_base;
+  struct LxmlElement *_parent;
+  PyObject *attrname;
+  int is_tail;
+  int is_text;
+  int is_attribute;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2594
- *         return False
- * 
- * cdef class _ElementMatchIterator:             # <<<<<<<<<<<<<<
- *     cdef _Element _node
- *     cdef _node_to_node_function _next_element
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":52
+ * @cython.final
+ * @cython.internal
+ * cdef class _XPathContext(_BaseContext):             # <<<<<<<<<<<<<<
+ *     cdef object _variables
+ *     def __init__(self, namespaces, extensions, error_log, enable_regexp, variables,
  */
-struct __pyx_obj_4lxml_5etree__ElementMatchIterator {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator *__pyx_vtab;
-  struct LxmlElement *_node;
-  _node_to_node_function _next_element;
-  struct __pyx_obj_4lxml_5etree__MultiTagMatcher *_matcher;
+struct __pyx_obj_4lxml_5etree__XPathContext {
+  struct __pyx_obj_4lxml_5etree__BaseContext __pyx_base;
+  PyObject *_variables;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2658
- *         self._storeNext(node)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":123
+ *     _XPATH_VERSION_WARNING_REQUIRED = 0
  * 
- * cdef class AncestorsIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
- *     u"""AncestorsIterator(self, node, tag=None)
- *     Iterates over the ancestors of an element (from parent to parent).
+ * cdef class _XPathEvaluatorBase:             # <<<<<<<<<<<<<<
+ *     cdef xpath.xmlXPathContext* _xpathCtxt
+ *     cdef _XPathContext _context
  */
-struct __pyx_obj_4lxml_5etree_AncestorsIterator {
-  struct __pyx_obj_4lxml_5etree__ElementMatchIterator __pyx_base;
+struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase *__pyx_vtab;
+  xmlXPathContext *_xpathCtxt;
+  struct __pyx_obj_4lxml_5etree__XPathContext *_context;
+  PyThread_type_lock _eval_lock;
+  struct __pyx_obj_4lxml_5etree__ErrorLog *_error_log;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1494
- *     )
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":249
  * 
- * cdef class HTMLParser(_FeedParser):             # <<<<<<<<<<<<<<
- *     u"""HTMLParser(self, encoding=None, remove_blank_text=False, \
- *                    remove_comments=False, remove_pis=False, strip_cdata=True, \
+ * 
+ * cdef class XPathElementEvaluator(_XPathEvaluatorBase):             # <<<<<<<<<<<<<<
+ *     u"""XPathElementEvaluator(self, element, namespaces=None, extensions=None, regexp=True, smart_strings=True)
+ *     Create an XPath evaluator for an element.
  */
-struct __pyx_obj_4lxml_5etree_HTMLParser {
-  struct __pyx_obj_4lxml_5etree__FeedParser __pyx_base;
+struct __pyx_obj_4lxml_5etree_XPathElementEvaluator {
+  struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase __pyx_base;
+  struct LxmlElement *_element;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1550
- * 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":326
  * 
- * cdef class HTMLPullParser(HTMLParser):             # <<<<<<<<<<<<<<
- *     """HTMLPullParser(self, events=None, *, tag=None, base_url=None, **kwargs)
  * 
+ * cdef class XPathDocumentEvaluator(XPathElementEvaluator):             # <<<<<<<<<<<<<<
+ *     u"""XPathDocumentEvaluator(self, etree, namespaces=None, extensions=None, regexp=True, smart_strings=True)
+ *     Create an XPath evaluator for an ElementTree.
  */
-struct __pyx_obj_4lxml_5etree_HTMLPullParser {
-  struct __pyx_obj_4lxml_5etree_HTMLParser __pyx_base;
+struct __pyx_obj_4lxml_5etree_XPathDocumentEvaluator {
+  struct __pyx_obj_4lxml_5etree_XPathElementEvaluator __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlid.pxi":58
- *     return (_elementTreeFactory(doc, None), _IDDict(doc))
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":405
  * 
- * cdef class _IDDict:             # <<<<<<<<<<<<<<
- *     u"""IDDict(self, etree)
- *     A dictionary-like proxy class that mapps ID attributes to elements.
+ * 
+ * cdef class XPath(_XPathEvaluatorBase):             # <<<<<<<<<<<<<<
+ *     u"""XPath(self, path, namespaces=None, extensions=None, regexp=True, smart_strings=True)
+ *     A compiled XPath expression that can be called on Elements and ElementTrees.
  */
-struct __pyx_obj_4lxml_5etree__IDDict {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__IDDict *__pyx_vtab;
-  struct LxmlDocument *_doc;
-  PyObject *_keys;
-  PyObject *_items;
+struct __pyx_obj_4lxml_5etree_XPath {
+  struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase __pyx_base;
+  xmlXPathCompExpr *_xpath;
+  PyObject *_path;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":101
- * 
- * 
- * cdef class ElementNamespaceClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
- *     u"""ElementNamespaceClassLookup(self, fallback=None)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":481
+ * _find_namespaces = re.compile(b'({[^}]+})').findall
  * 
+ * cdef class ETXPath(XPath):             # <<<<<<<<<<<<<<
+ *     u"""ETXPath(self, path, extensions=None, regexp=True, smart_strings=True)
+ *     Special XPath class that supports the ElementTree {uri} notation for namespaces.
  */
-struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup {
-  struct LxmlFallbackElementClassLookup __pyx_base;
-  PyObject *_namespace_registries;
+struct __pyx_obj_4lxml_5etree_ETXPath {
+  struct __pyx_obj_4lxml_5etree_XPath __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":472
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":52
  * @cython.final
  * @cython.internal
- * cdef class _AppendOnlyElementProxy(_ReadOnlyElementProxy):             # <<<<<<<<<<<<<<
- *     u"""A read-only element that allows adding children and changing the
- *     text content (i.e. everything that adds to the subtree).
+ * cdef class _XSLTResolverContext(_ResolverContext):             # <<<<<<<<<<<<<<
+ *     cdef xmlDoc* _c_style_doc
+ *     cdef _BaseParser _parser
  */
-struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy {
-  struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy __pyx_base;
+struct __pyx_obj_4lxml_5etree__XSLTResolverContext {
+  struct __pyx_obj_4lxml_5etree__ResolverContext __pyx_base;
+  xmlDoc *_c_style_doc;
+  struct __pyx_obj_4lxml_5etree__BaseParser *_parser;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":456
- * @cython.final
- * @cython.internal
- * cdef class _ModifyContentOnlyEntityProxy(_ModifyContentOnlyProxy):             # <<<<<<<<<<<<<<
- *     u"A read-only proxy for entity references (for internal use only!)"
- *     property name:
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":168
+ * # XSLT file/network access control
+ * 
+ * cdef class XSLTAccessControl:             # <<<<<<<<<<<<<<
+ *     u"""XSLTAccessControl(self, read_file=True, write_file=True, create_dir=True, read_network=True, write_network=True)
+ * 
  */
-struct __pyx_obj_4lxml_5etree__ModifyContentOnlyEntityProxy {
-  struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy __pyx_base;
+struct __pyx_obj_4lxml_5etree_XSLTAccessControl {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree_XSLTAccessControl *__pyx_vtab;
+  xsltSecurityPrefs *_prefs;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":257
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":271
  * @cython.final
  * @cython.internal
- * cdef class _ReadOnlyEntityProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
- *     u"A read-only proxy for entity references (for internal use only!)"
- *     property name:
+ * cdef class _XSLTContext(_BaseContext):             # <<<<<<<<<<<<<<
+ *     cdef xslt.xsltTransformContext* _xsltCtxt
+ *     cdef _ReadOnlyElementProxy _extension_element_proxy
  */
-struct __pyx_obj_4lxml_5etree__ReadOnlyEntityProxy {
-  struct __pyx_obj_4lxml_5etree__ReadOnlyProxy __pyx_base;
+struct __pyx_obj_4lxml_5etree__XSLTContext {
+  struct __pyx_obj_4lxml_5etree__BaseContext __pyx_base;
+  xsltTransformContext *_xsltCtxt;
+  struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy *_extension_element_proxy;
+  PyObject *_extension_elements;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":887
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":324
  * @cython.internal
  * @cython.freelist(8)
- * cdef class _FileWriterElement:             # <<<<<<<<<<<<<<
- *     cdef object _element
- *     cdef _IncrementalFileWriter _writer
- */
-struct __pyx_obj_4lxml_5etree__FileWriterElement {
-  PyObject_HEAD
-  PyObject *_element;
-  struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *_writer;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/debug.pxi":4
- * @cython.final
- * @cython.internal
- * cdef class _MemDebug:             # <<<<<<<<<<<<<<
- *     """Debugging support for the memory allocation in libxml2.
- *     """
+ * cdef class _XSLTQuotedStringParam:             # <<<<<<<<<<<<<<
+ *     u"""A wrapper class for literal XSLT string parameters that require
+ *     quote escaping.
  */
-struct __pyx_obj_4lxml_5etree__MemDebug {
+struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam {
   PyObject_HEAD
+  PyObject *strval;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2204
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":334
  * 
- * @cython.freelist(16)
- * cdef class _Attrib:             # <<<<<<<<<<<<<<
- *     u"""A dict-like proxy for the ``Element.attrib`` property.
- *     """
- */
-struct __pyx_obj_4lxml_5etree__Attrib {
-  PyObject_HEAD
-  struct LxmlElement *_element;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":265
- * # default lookup scheme
+ * @cython.no_gc_clear
+ * cdef class XSLT:             # <<<<<<<<<<<<<<
+ *     u"""XSLT(self, xslt_input, extensions=None, regexp=True, access_control=None)
  * 
- * cdef class ElementDefaultClassLookup(ElementClassLookup):             # <<<<<<<<<<<<<<
- *     u"""ElementDefaultClassLookup(self, element=None, comment=None, pi=None, entity=None)
- *     Element class lookup scheme that always returns the default Element
  */
-struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup {
-  struct LxmlElementClassLookup __pyx_base;
-  PyObject *element_class;
-  PyObject *comment_class;
-  PyObject *pi_class;
-  PyObject *entity_class;
+struct __pyx_obj_4lxml_5etree_XSLT {
+  PyObject_HEAD
+  struct __pyx_vtabstruct_4lxml_5etree_XSLT *__pyx_vtab;
+  struct __pyx_obj_4lxml_5etree__XSLTContext *_context;
+  xsltStylesheet *_c_style;
+  struct __pyx_obj_4lxml_5etree__XSLTResolverContext *_xslt_resolver_context;
+  struct __pyx_obj_4lxml_5etree_XSLTAccessControl *_access_control;
+  struct __pyx_obj_4lxml_5etree__ErrorLog *_error_log;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/extensions.pxi":722
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":698
  * 
  * @cython.final
- * cdef class _ElementUnicodeResult(unicode):             # <<<<<<<<<<<<<<
- *     cdef _Element _parent
- *     cdef readonly object attrname
+ * cdef class _XSLTResultTree(_ElementTree):             # <<<<<<<<<<<<<<
+ *     cdef XSLT _xslt
+ *     cdef _Document _profile
  */
-struct __pyx_obj_4lxml_5etree__ElementUnicodeResult {
-  PyUnicodeObject __pyx_base;
-  struct LxmlElement *_parent;
-  PyObject *attrname;
-  int is_tail;
-  int is_text;
-  int is_attribute;
+struct __pyx_obj_4lxml_5etree__XSLTResultTree {
+  struct LxmlElementTree __pyx_base;
+  struct __pyx_obj_4lxml_5etree_XSLT *_xslt;
+  struct LxmlDocument *_profile;
+  xmlChar *_buffer;
+  Py_ssize_t _buffer_len;
+  Py_ssize_t _buffer_refcnt;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/extensions.pxi":26
- * 
- * ctypedef int (*_register_function)(void* ctxt, name_utf, ns_uri_utf)
- * cdef class _ExsltRegExp             # <<<<<<<<<<<<<<
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":849
+ *     return __findStylesheetByID(doc, id=id)
  * 
- * ################################################################################
+ * cdef class _XSLTProcessingInstruction(PIBase):             # <<<<<<<<<<<<<<
+ *     def parseXSL(self, parser=None):
+ *         u"""parseXSL(self, parser=None)
  */
-struct __pyx_obj_4lxml_5etree__ExsltRegExp {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__ExsltRegExp *__pyx_vtab;
-  PyObject *_compile_map;
+struct __pyx_obj_4lxml_5etree__XSLTProcessingInstruction {
+  struct __pyx_obj_4lxml_5etree_PIBase __pyx_base;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":301
- * cdef public class _Element [ type LxmlElementType, object LxmlElement ]
- * cdef class _BaseParser
- * cdef class QName             # <<<<<<<<<<<<<<
- * ctypedef public xmlNode* (*_node_to_node_function)(xmlNode*)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xsltext.pxi":3
+ * # XSLT extension elements
  * 
+ * cdef class XSLTExtension:             # <<<<<<<<<<<<<<
+ *     u"""Base class of an XSLT extension element.
+ *     """
  */
-struct __pyx_obj_4lxml_5etree_QName {
+struct __pyx_obj_4lxml_5etree_XSLTExtension {
   PyObject_HEAD
-  PyObject *text;
-  PyObject *localname;
-  PyObject *namespace;
+  struct __pyx_vtabstruct_4lxml_5etree_XSLTExtension *__pyx_vtab;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":323
- *         return list(self.iterelements())
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":10
+ * cdef class _TargetParserContext(_SaxParserContext)
+ * cdef class _ParserSchemaValidationContext
+ * cdef class _Validator             # <<<<<<<<<<<<<<
+ * cdef class XMLSchema(_Validator)
  * 
- *     def iterentities(self):             # <<<<<<<<<<<<<<
- *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
- *         while c_node is not NULL:
  */
-struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities {
+struct __pyx_obj_4lxml_5etree__Validator {
   PyObject_HEAD
-  xmlNode *__pyx_v_c_node;
-  struct __pyx_obj_4lxml_5etree__DTDEntityDecl *__pyx_v_node;
-  struct __pyx_obj_4lxml_5etree_DTD *__pyx_v_self;
+  struct __pyx_vtabstruct_4lxml_5etree__Validator *__pyx_vtab;
+  struct __pyx_obj_4lxml_5etree__ErrorLog *_error_log;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":257
- * @cython.final
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":26
  * @cython.internal
- * cdef class _TempStore:             # <<<<<<<<<<<<<<
- *     cdef list _storage
- *     def __init__(self):
+ * @cython.freelist(8)
+ * cdef class _DTDElementContentDecl:             # <<<<<<<<<<<<<<
+ *     cdef DTD _dtd
+ *     cdef tree.xmlElementContent* _c_node
  */
-struct __pyx_obj_4lxml_5etree__TempStore {
+struct __pyx_obj_4lxml_5etree__DTDElementContentDecl {
   PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__TempStore *__pyx_vtab;
-  PyObject *_storage;
+  struct __pyx_obj_4lxml_5etree_DTD *_dtd;
+  xmlElementContent *_c_node;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":365
- * 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":96
  * @cython.internal
- * cdef class _OpaqueNodeWrapper:             # <<<<<<<<<<<<<<
- *     cdef tree.xmlNode* _c_node
- *     def __init__(self):
+ * @cython.freelist(8)
+ * cdef class _DTDAttributeDecl:             # <<<<<<<<<<<<<<
+ *     cdef DTD _dtd
+ *     cdef tree.xmlAttribute* _c_node
  */
-struct __pyx_obj_4lxml_5etree__OpaqueNodeWrapper {
+struct __pyx_obj_4lxml_5etree__DTDAttributeDecl {
   PyObject_HEAD
-  xmlNode *_c_node;
+  struct __pyx_obj_4lxml_5etree_DTD *_dtd;
+  xmlAttribute *_c_node;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":369
- * @cython.final
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":179
  * @cython.internal
- * cdef class _FilelikeWriter:             # <<<<<<<<<<<<<<
- *     cdef object _filelike
- *     cdef object _close_filelike
+ * @cython.freelist(8)
+ * cdef class _DTDElementDecl:             # <<<<<<<<<<<<<<
+ *     cdef DTD _dtd
+ *     cdef tree.xmlElement* _c_node
  */
-struct __pyx_obj_4lxml_5etree__FilelikeWriter {
+struct __pyx_obj_4lxml_5etree__DTDElementDecl {
   PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree__FilelikeWriter *__pyx_vtab;
-  PyObject *_filelike;
-  PyObject *_close_filelike;
-  struct __pyx_obj_4lxml_5etree__ExceptionContext *_exc_context;
-  struct __pyx_obj_4lxml_5etree__ErrorLog *error_log;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":372
- * @cython.final
- * @cython.internal
- * cdef class _OpaqueDocumentWrapper(_OpaqueNodeWrapper):             # <<<<<<<<<<<<<<
- *     cdef int _assertNode(self) except -1:
- *         u"""This is our way of saying: this proxy is invalid!
- */
-struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper {
-  struct __pyx_obj_4lxml_5etree__OpaqueNodeWrapper __pyx_base;
-  struct __pyx_vtabstruct_4lxml_5etree__OpaqueDocumentWrapper *__pyx_vtab;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/schematron.pxi":22
- * # Schematron
- * 
- * cdef class Schematron(_Validator):             # <<<<<<<<<<<<<<
- *     u"""Schematron(self, etree=None, file=None)
- *     A Schematron validator.
- */
-struct __pyx_obj_4lxml_5etree_Schematron {
-  struct __pyx_obj_4lxml_5etree__Validator __pyx_base;
-  xmlSchematron *_c_schema;
-  xmlDoc *_c_schema_doc;
+  struct __pyx_obj_4lxml_5etree_DTD *_dtd;
+  xmlElement *_c_node;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":373
- * @cython.final
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":242
  * @cython.internal
- * cdef class _ErrorLogContext:             # <<<<<<<<<<<<<<
- *     """
- *     Error log context for the 'with' statement.
+ * @cython.freelist(8)
+ * cdef class _DTDEntityDecl:             # <<<<<<<<<<<<<<
+ *     cdef DTD _dtd
+ *     cdef tree.xmlEntity* _c_node
  */
-struct __pyx_obj_4lxml_5etree__ErrorLogContext {
+struct __pyx_obj_4lxml_5etree__DTDEntityDecl {
   PyObject_HEAD
-  xmlStructuredErrorFunc old_error_func;
-  void *old_error_context;
+  struct __pyx_obj_4lxml_5etree_DTD *_dtd;
+  xmlEntity *_c_node;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":168
- * # XSLT file/network access control
- * 
- * cdef class XSLTAccessControl:             # <<<<<<<<<<<<<<
- *     u"""XSLTAccessControl(self, read_file=True, write_file=True, create_dir=True, read_network=True, write_network=True)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":267
+ * # DTD
  * 
+ * cdef class DTD(_Validator):             # <<<<<<<<<<<<<<
+ *     u"""DTD(self, file=None, external_id=None)
+ *     A DTD validator.
  */
-struct __pyx_obj_4lxml_5etree_XSLTAccessControl {
-  PyObject_HEAD
-  struct __pyx_vtabstruct_4lxml_5etree_XSLTAccessControl *__pyx_vtab;
-  xsltSecurityPrefs *_prefs;
+struct __pyx_obj_4lxml_5etree_DTD {
+  struct __pyx_obj_4lxml_5etree__Validator __pyx_base;
+  xmlDtd *_c_dtd;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2643
- *         self._node = _elementFactory(node._doc, c_node) if c_node is not NULL else None
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/relaxng.pxi":22
+ * # RelaxNG
  * 
- * cdef class SiblingsIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
- *     u"""SiblingsIterator(self, node, tag=None, preceding=False)
- *     Iterates over the siblings of an element.
- */
-struct __pyx_obj_4lxml_5etree_SiblingsIterator {
-  struct __pyx_obj_4lxml_5etree__ElementMatchIterator __pyx_base;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":439
- * @cython.final
- * @cython.internal
- * cdef class _ModifyContentOnlyPIProxy(_ModifyContentOnlyProxy):             # <<<<<<<<<<<<<<
- *     u"""A read-only proxy that allows changing the text/target content of a
- *     processing instruction.
+ * cdef class RelaxNG(_Validator):             # <<<<<<<<<<<<<<
+ *     u"""RelaxNG(self, etree=None, file=None)
+ *     Turn a document into a Relax NG validator.
  */
-struct __pyx_obj_4lxml_5etree__ModifyContentOnlyPIProxy {
-  struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy __pyx_base;
+struct __pyx_obj_4lxml_5etree_RelaxNG {
+  struct __pyx_obj_4lxml_5etree__Validator __pyx_base;
+  xmlRelaxNG *_c_schema;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":87
- * @cython.final
- * @cython.internal
- * cdef class _ClassNamespaceRegistry(_NamespaceRegistry):             # <<<<<<<<<<<<<<
- *     u"Dictionary-like registry for namespace implementation classes"
- *     def __setitem__(self, name, item):
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":11
+ * cdef class _ParserSchemaValidationContext
+ * cdef class _Validator
+ * cdef class XMLSchema(_Validator)             # <<<<<<<<<<<<<<
+ * 
+ * class ParseError(LxmlSyntaxError):
  */
-struct __pyx_obj_4lxml_5etree__ClassNamespaceRegistry {
-  struct __pyx_obj_4lxml_5etree__NamespaceRegistry __pyx_base;
+struct __pyx_obj_4lxml_5etree_XMLSchema {
+  struct __pyx_obj_4lxml_5etree__Validator __pyx_base;
+  xmlSchema *_c_schema;
+  int _has_default_attributes;
+  int _add_attribute_defaults;
 };
 
 
@@ -2510,73 +2497,109 @@ struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":242
- * @cython.internal
- * @cython.freelist(8)
- * cdef class _DTDEntityDecl:             # <<<<<<<<<<<<<<
- *     cdef DTD _dtd
- *     cdef tree.xmlEntity* _c_node
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/schematron.pxi":22
+ * # Schematron
+ * 
+ * cdef class Schematron(_Validator):             # <<<<<<<<<<<<<<
+ *     u"""Schematron(self, etree=None, file=None)
+ *     A Schematron validator.
  */
-struct __pyx_obj_4lxml_5etree__DTDEntityDecl {
-  PyObject_HEAD
-  struct __pyx_obj_4lxml_5etree_DTD *_dtd;
-  xmlEntity *_c_node;
+struct __pyx_obj_4lxml_5etree_Schematron {
+  struct __pyx_obj_4lxml_5etree__Validator __pyx_base;
+  xmlSchematron *_c_schema;
+  xmlDoc *_c_schema_doc;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2344
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/debug.pxi":4
  * @cython.final
  * @cython.internal
- * cdef class _AttribIterator:             # <<<<<<<<<<<<<<
- *     u"""Attribute iterator - for internal use only!
+ * cdef class _MemDebug:             # <<<<<<<<<<<<<<
+ *     """Debugging support for the memory allocation in libxml2.
  *     """
  */
-struct __pyx_obj_4lxml_5etree__AttribIterator {
+struct __pyx_obj_4lxml_5etree__MemDebug {
   PyObject_HEAD
-  struct LxmlElement *_node;
-  xmlAttr *_c_attr;
-  int _keysvalues;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":468
- * # read-only tree based class lookup
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":165
+ *            return funicode(self._c_node.defaultValue) if self._c_node.defaultValue is not NULL else None
  * 
- * cdef class PythonElementClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
- *     u"""PythonElementClassLookup(self, fallback=None)
- *     Element class lookup based on a subclass method.
+ *     def itervalues(self):             # <<<<<<<<<<<<<<
+ *         _assertValidDTDNode(self, self._c_node)
+ *         cdef tree.xmlEnumeration *c_node = self._c_node.tree
  */
-struct __pyx_obj_4lxml_5etree_PythonElementClassLookup {
-  struct LxmlFallbackElementClassLookup __pyx_base;
+struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues {
+  PyObject_HEAD
+  xmlEnumeration *__pyx_v_c_node;
+  struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *__pyx_v_self;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2623
- *         return current_node
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":225
+ *                return None
  * 
- * cdef class ElementChildIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
- *     u"""ElementChildIterator(self, node, tag=None, reversed=False)
- *     Iterates over the children of an element.
+ *     def iterattributes(self):             # <<<<<<<<<<<<<<
+ *         _assertValidDTDNode(self, self._c_node)
+ *         cdef tree.xmlAttribute *c_node = self._c_node.attributes
  */
-struct __pyx_obj_4lxml_5etree_ElementChildIterator {
-  struct __pyx_obj_4lxml_5etree__ElementMatchIterator __pyx_base;
+struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes {
+  PyObject_HEAD
+  xmlAttribute *__pyx_v_c_node;
+  struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *__pyx_v_node;
+  struct __pyx_obj_4lxml_5etree__DTDElementDecl *__pyx_v_self;
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":448
- *             _ErrorLog.receive(self, entry)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":310
+ *           return funicode(self._c_dtd.SystemID) if (self._c_dtd is not NULL and self._c_dtd.SystemID is not NULL) else None
  * 
- * cdef class _RotatingErrorLog(_ErrorLog):             # <<<<<<<<<<<<<<
- *     cdef int _max_len
- *     def __init__(self, max_len):
+ *     def iterelements(self):             # <<<<<<<<<<<<<<
+ *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
+ *         while c_node is not NULL:
  */
-struct __pyx_obj_4lxml_5etree__RotatingErrorLog {
-  struct __pyx_obj_4lxml_5etree__ErrorLog __pyx_base;
-  int _max_len;
+struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements {
+  PyObject_HEAD
+  xmlNode *__pyx_v_c_node;
+  struct __pyx_obj_4lxml_5etree__DTDElementDecl *__pyx_v_node;
+  struct __pyx_obj_4lxml_5etree_DTD *__pyx_v_self;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":323
+ *         return list(self.iterelements())
+ * 
+ *     def iterentities(self):             # <<<<<<<<<<<<<<
+ *         cdef tree.xmlNode *c_node = self._c_dtd.children if self._c_dtd is not NULL else NULL
+ *         while c_node is not NULL:
+ */
+struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities {
+  PyObject_HEAD
+  xmlNode *__pyx_v_c_node;
+  struct __pyx_obj_4lxml_5etree__DTDEntityDecl *__pyx_v_node;
+  struct __pyx_obj_4lxml_5etree_DTD *__pyx_v_self;
 };
 
 
 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":257
+ * @cython.final
+ * @cython.internal
+ * cdef class _TempStore:             # <<<<<<<<<<<<<<
+ *     cdef list _storage
+ *     def __init__(self):
+ */
+
+struct __pyx_vtabstruct_4lxml_5etree__TempStore {
+  int (*add)(struct __pyx_obj_4lxml_5etree__TempStore *, PyObject *);
+  int (*clear)(struct __pyx_obj_4lxml_5etree__TempStore *);
+};
+static struct __pyx_vtabstruct_4lxml_5etree__TempStore *__pyx_vtabptr_4lxml_5etree__TempStore;
+static int __pyx_f_4lxml_5etree_10_TempStore_add(struct __pyx_obj_4lxml_5etree__TempStore *, PyObject *);
+static int __pyx_f_4lxml_5etree_10_TempStore_clear(struct __pyx_obj_4lxml_5etree__TempStore *);
+
+
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":272
  * # class for temporarily storing exceptions raised in extensions
  * @cython.internal
@@ -2594,35 +2617,78 @@ struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext {
 };
 static struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *__pyx_vtabptr_4lxml_5etree__ExceptionContext;
 
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlDocumentType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/docloader.pxi":161
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":317
+ * @cython.final
+ * @cython.freelist(8)
+ * cdef public class _Document [ type LxmlDocumentType, object LxmlDocument ]:             # <<<<<<<<<<<<<<
+ *     u"""Internal base class to reference a libxml document.
+ * 
+ */
+
+struct __pyx_vtabstruct_4lxml_5etree__Document {
+  PyObject *(*getroot)(struct LxmlDocument *);
+  int (*hasdoctype)(struct LxmlDocument *);
+  PyObject *(*getdoctype)(struct LxmlDocument *);
+  PyObject *(*getxmlinfo)(struct LxmlDocument *);
+  PyObject *(*isstandalone)(struct LxmlDocument *);
+  PyObject *(*buildNewPrefix)(struct LxmlDocument *);
+  xmlNs *(*_findOrBuildNodeNs)(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *, int);
+  int (*_setNodeNs)(struct LxmlDocument *, xmlNode *, const xmlChar *);
+};
+static struct __pyx_vtabstruct_4lxml_5etree__Document *__pyx_vtabptr_4lxml_5etree__Document;
+static PyObject *__pyx_f_4lxml_5etree_9_Document_getroot(struct LxmlDocument *);
+static int __pyx_f_4lxml_5etree_9_Document_hasdoctype(struct LxmlDocument *);
+static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument *);
+static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument *);
+static PyObject *__pyx_f_4lxml_5etree_9_Document_isstandalone(struct LxmlDocument *);
+static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocument *);
+static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *, int);
+static int __pyx_f_4lxml_5etree_9_Document__setNodeNs(struct LxmlDocument *, xmlNode *, const xmlChar *);
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":753
  * 
  * @cython.internal
- * cdef class _ResolverContext(_ExceptionContext):             # <<<<<<<<<<<<<<
+ * cdef class _BaseParser:             # <<<<<<<<<<<<<<
+ *     cdef ElementClassLookup _class_lookup
  *     cdef _ResolverRegistry _resolvers
- *     cdef _TempStore _storage
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ResolverContext {
-  struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__BaseParser {
+  PyObject *(*_setBaseURL)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *);
+  PyObject *(*_collectEvents)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, PyObject *);
+  struct __pyx_obj_4lxml_5etree__ParserContext *(*_getParserContext)(struct __pyx_obj_4lxml_5etree__BaseParser *);
+  struct __pyx_obj_4lxml_5etree__ParserContext *(*_getPushParserContext)(struct __pyx_obj_4lxml_5etree__BaseParser *);
+  struct __pyx_obj_4lxml_5etree__ParserContext *(*_createContext)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, PyObject *);
+  int (*_registerHtmlErrorHandler)(struct __pyx_obj_4lxml_5etree__BaseParser *, xmlParserCtxt *);
+  xmlParserCtxt *(*_newParserCtxt)(struct __pyx_obj_4lxml_5etree__BaseParser *);
+  xmlParserCtxt *(*_newPushParserCtxt)(struct __pyx_obj_4lxml_5etree__BaseParser *);
+  struct __pyx_obj_4lxml_5etree__BaseParser *(*_copy)(struct __pyx_obj_4lxml_5etree__BaseParser *);
+  xmlDoc *(*_parseUnicodeDoc)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, char *);
+  xmlDoc *(*_parseDoc)(struct __pyx_obj_4lxml_5etree__BaseParser *, char *, int, char *);
+  xmlDoc *(*_parseDocFromFile)(struct __pyx_obj_4lxml_5etree__BaseParser *, char *);
+  xmlDoc *(*_parseDocFromFilelike)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, PyObject *, PyObject *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ResolverContext *__pyx_vtabptr_4lxml_5etree__ResolverContext;
+static struct __pyx_vtabstruct_4lxml_5etree__BaseParser *__pyx_vtabptr_4lxml_5etree__BaseParser;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":52
- * @cython.final
- * @cython.internal
- * cdef class _XSLTResolverContext(_ResolverContext):             # <<<<<<<<<<<<<<
- *     cdef xmlDoc* _c_style_doc
- *     cdef _BaseParser _parser
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":39
+ * 
+ * @cython.freelist(16)
+ * cdef class _LogEntry:             # <<<<<<<<<<<<<<
+ *     """A log message entry from an error log.
+ * 
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext {
-  struct __pyx_vtabstruct_4lxml_5etree__ResolverContext __pyx_base;
-  struct __pyx_obj_4lxml_5etree__XSLTResolverContext *(*_copy)(struct __pyx_obj_4lxml_5etree__XSLTResolverContext *);
+struct __pyx_vtabstruct_4lxml_5etree__LogEntry {
+  PyObject *(*_setError)(struct __pyx_obj_4lxml_5etree__LogEntry *, xmlError *);
+  PyObject *(*_setGeneric)(struct __pyx_obj_4lxml_5etree__LogEntry *, int, int, int, int, PyObject *, PyObject *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext *__pyx_vtabptr_4lxml_5etree__XSLTResolverContext;
-static struct __pyx_obj_4lxml_5etree__XSLTResolverContext *__pyx_f_4lxml_5etree_20_XSLTResolverContext__copy(struct __pyx_obj_4lxml_5etree__XSLTResolverContext *);
+static struct __pyx_vtabstruct_4lxml_5etree__LogEntry *__pyx_vtabptr_4lxml_5etree__LogEntry;
+static PyObject *__pyx_f_4lxml_5etree_9_LogEntry__setError(struct __pyx_obj_4lxml_5etree__LogEntry *, xmlError *);
+static PyObject *__pyx_f_4lxml_5etree_9_LogEntry__setGeneric(struct __pyx_obj_4lxml_5etree__LogEntry *, int, int, int, int, PyObject *, PyObject *);
 
 
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":166
@@ -2648,108 +2714,81 @@ static PyObject *__pyx_f_4lxml_5etree_13_BaseErrorLog__buildParseException(struc
 static PyObject *__pyx_f_4lxml_5etree_13_BaseErrorLog__buildExceptionMessage(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, PyObject *);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":4
- * 
- * @cython.internal
- * cdef class _ReadOnlyProxy:             # <<<<<<<<<<<<<<
- *     u"A read-only proxy class suitable for PIs/Comments (for internal use only!)."
- *     cdef bint _free_after_use
- */
-
-struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy {
-  int (*_assertNode)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *);
-  int (*_raise_unsupported_type)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *);
-  void (*free_after_use)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *);
-  PyObject *(*__pyx___copy__)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *, int __pyx_skip_dispatch);
-  PyObject *(*getchildren)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *, int __pyx_skip_dispatch);
-};
-static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy *__pyx_vtabptr_4lxml_5etree__ReadOnlyProxy;
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":416
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":256
+ *         return message
  * 
- * @cython.internal
- * cdef class _ModifyContentOnlyProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
- *     u"""A read-only proxy that allows changing the text content.
- *     """
- */
-
-struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyProxy {
-  struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy __pyx_base;
-};
-static struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyProxy *__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyProxy;
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":439
- * @cython.final
- * @cython.internal
- * cdef class _ModifyContentOnlyPIProxy(_ModifyContentOnlyProxy):             # <<<<<<<<<<<<<<
- *     u"""A read-only proxy that allows changing the text/target content of a
- *     processing instruction.
+ * cdef class _ListErrorLog(_BaseErrorLog):             # <<<<<<<<<<<<<<
+ *     u"Immutable base version of a list based error log."
+ *     cdef list _entries
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyPIProxy {
-  struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyProxy __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__ListErrorLog {
+  struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyPIProxy *__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyPIProxy;
+static struct __pyx_vtabstruct_4lxml_5etree__ListErrorLog *__pyx_vtabptr_4lxml_5etree__ListErrorLog;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":3253
- *     pass
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":382
+ *     cdef void* old_error_context
  * 
- * cdef class _Validator:             # <<<<<<<<<<<<<<
- *     u"Base class for XML validators."
- *     cdef _ErrorLog _error_log
+ * cdef class _ErrorLog(_ListErrorLog):             # <<<<<<<<<<<<<<
+ *     cdef list _logContexts
+ *     def __cinit__(self):
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__Validator {
-  PyObject *(*_append_log_message)(struct __pyx_obj_4lxml_5etree__Validator *, int, int, int, int, PyObject *, PyObject *, int __pyx_skip_dispatch);
-  PyObject *(*_clear_error_log)(struct __pyx_obj_4lxml_5etree__Validator *, int __pyx_skip_dispatch);
+struct __pyx_vtabstruct_4lxml_5etree__ErrorLog {
+  struct __pyx_vtabstruct_4lxml_5etree__ListErrorLog __pyx_base;
+  int (*__pyx___enter__)(struct __pyx_obj_4lxml_5etree__ErrorLog *);
+  int (*connect)(struct __pyx_obj_4lxml_5etree__ErrorLog *);
+  int (*disconnect)(struct __pyx_obj_4lxml_5etree__ErrorLog *);
+  PyObject *(*clear)(struct __pyx_obj_4lxml_5etree__ErrorLog *, int __pyx_skip_dispatch);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__Validator *__pyx_vtabptr_4lxml_5etree__Validator;
+static struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *__pyx_vtabptr_4lxml_5etree__ErrorLog;
+static int __pyx_f_4lxml_5etree_9_ErrorLog___enter__(struct __pyx_obj_4lxml_5etree__ErrorLog *);
+static int __pyx_f_4lxml_5etree_9_ErrorLog_connect(struct __pyx_obj_4lxml_5etree__ErrorLog *);
+static int __pyx_f_4lxml_5etree_9_ErrorLog_disconnect(struct __pyx_obj_4lxml_5etree__ErrorLog *);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/relaxng.pxi":22
- * # RelaxNG
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":439
+ *         self._entries.append(entry)
  * 
- * cdef class RelaxNG(_Validator):             # <<<<<<<<<<<<<<
- *     u"""RelaxNG(self, etree=None, file=None)
- *     Turn a document into a Relax NG validator.
+ * cdef class _DomainErrorLog(_ErrorLog):             # <<<<<<<<<<<<<<
+ *     def __init__(self, domains):
+ *         _ErrorLog.__init__(self)
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_RelaxNG {
-  struct __pyx_vtabstruct_4lxml_5etree__Validator __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__DomainErrorLog {
+  struct __pyx_vtabstruct_4lxml_5etree__ErrorLog __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree_RelaxNG *__pyx_vtabptr_4lxml_5etree_RelaxNG;
+static struct __pyx_vtabstruct_4lxml_5etree__DomainErrorLog *__pyx_vtabptr_4lxml_5etree__DomainErrorLog;
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlFallbackElementClassLookupType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":223
- *         self._lookup_function = NULL # use default lookup
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":448
+ *             _ErrorLog.receive(self, entry)
  * 
- * cdef public class FallbackElementClassLookup(ElementClassLookup) \             # <<<<<<<<<<<<<<
- *          [ type LxmlFallbackElementClassLookupType,
- *            object LxmlFallbackElementClassLookup ]:
+ * cdef class _RotatingErrorLog(_ErrorLog):             # <<<<<<<<<<<<<<
+ *     cdef int _max_len
+ *     def __init__(self, max_len):
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup {
-  void (*_setFallback)(struct LxmlFallbackElementClassLookup *, struct LxmlElementClassLookup *);
+struct __pyx_vtabstruct_4lxml_5etree__RotatingErrorLog {
+  struct __pyx_vtabstruct_4lxml_5etree__ErrorLog __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup *__pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
+static struct __pyx_vtabstruct_4lxml_5etree__RotatingErrorLog *__pyx_vtabptr_4lxml_5etree__RotatingErrorLog;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":413
- * #  custom class lookup based on node type, namespace, name
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":466
+ *                 del self._entries[:offset]
  * 
- * cdef class CustomElementClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
- *     u"""CustomElementClassLookup(self, fallback=None)
- *     Element class lookup based on a subclass method.
+ * cdef class PyErrorLog(_BaseErrorLog):             # <<<<<<<<<<<<<<
+ *     u"""PyErrorLog(self, logger_name=None, logger=None)
+ *     A global error log that connects to the Python stdlib logging package.
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_CustomElementClassLookup {
-  struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree_PyErrorLog {
+  struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree_CustomElementClassLookup *__pyx_vtabptr_4lxml_5etree_CustomElementClassLookup;
+static struct __pyx_vtabstruct_4lxml_5etree_PyErrorLog *__pyx_vtabptr_4lxml_5etree_PyErrorLog;
 
 
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1511
@@ -2766,502 +2805,408 @@ struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement {
 static struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement *__pyx_vtabptr_4lxml_5etree___ContentOnlyElement;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1586
- *         return u"<!--%s-->" % self.text
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1578
+ *         return []
  * 
- * cdef class _ProcessingInstruction(__ContentOnlyElement):             # <<<<<<<<<<<<<<
+ * cdef class _Comment(__ContentOnlyElement):             # <<<<<<<<<<<<<<
  *     property tag:
  *         def __get__(self):
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ProcessingInstruction {
+struct __pyx_vtabstruct_4lxml_5etree__Comment {
   struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ProcessingInstruction *__pyx_vtabptr_4lxml_5etree__ProcessingInstruction;
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":126
- *         self._init()
- * 
- * cdef class PIBase(_ProcessingInstruction):             # <<<<<<<<<<<<<<
- *     u"""All custom Processing Instruction classes must inherit from this one.
- * 
- */
-
-struct __pyx_vtabstruct_4lxml_5etree_PIBase {
-  struct __pyx_vtabstruct_4lxml_5etree__ProcessingInstruction __pyx_base;
-};
-static struct __pyx_vtabstruct_4lxml_5etree_PIBase *__pyx_vtabptr_4lxml_5etree_PIBase;
+static struct __pyx_vtabstruct_4lxml_5etree__Comment *__pyx_vtabptr_4lxml_5etree__Comment;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":15
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1586
+ *         return u"<!--%s-->" % self.text
  * 
- * @cython.internal
- * cdef class _NamespaceRegistry:             # <<<<<<<<<<<<<<
- *     u"Dictionary-like namespace registry"
- *     cdef object _ns_uri
+ * cdef class _ProcessingInstruction(__ContentOnlyElement):             # <<<<<<<<<<<<<<
+ *     property tag:
+ *         def __get__(self):
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry {
-  PyObject *(*_get)(struct __pyx_obj_4lxml_5etree__NamespaceRegistry *, PyObject *);
-  PyObject *(*_getForString)(struct __pyx_obj_4lxml_5etree__NamespaceRegistry *, char *);
+struct __pyx_vtabstruct_4lxml_5etree__ProcessingInstruction {
+  struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry *__pyx_vtabptr_4lxml_5etree__NamespaceRegistry;
+static struct __pyx_vtabstruct_4lxml_5etree__ProcessingInstruction *__pyx_vtabptr_4lxml_5etree__ProcessingInstruction;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":192
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1636
+ * cdef object _FIND_PI_ATTRIBUTES = re.compile(ur'\s+(\w+)\s*=\s*(?:\'([^\']*)\'|"([^"]*)")', re.U).findall
  * 
- * @cython.internal
- * cdef class _FunctionNamespaceRegistry(_NamespaceRegistry):             # <<<<<<<<<<<<<<
- *     def __setitem__(self, name, item):
- *         if not callable(item):
+ * cdef class _Entity(__ContentOnlyElement):             # <<<<<<<<<<<<<<
+ *     property tag:
+ *         def __get__(self):
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__FunctionNamespaceRegistry {
-  struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__Entity {
+  struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__FunctionNamespaceRegistry *__pyx_vtabptr_4lxml_5etree__FunctionNamespaceRegistry;
+static struct __pyx_vtabstruct_4lxml_5etree__Entity *__pyx_vtabptr_4lxml_5etree__Entity;
 
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementTreeType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":123
- *     _XPATH_VERSION_WARNING_REQUIRED = 0
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1735
  * 
- * cdef class _XPathEvaluatorBase:             # <<<<<<<<<<<<<<
- *     cdef xpath.xmlXPathContext* _xpathCtxt
- *     cdef _XPathContext _context
+ * @cython.freelist(8)
+ * cdef public class _ElementTree [ type LxmlElementTreeType,             # <<<<<<<<<<<<<<
+ *                                  object LxmlElementTree ]:
+ *     cdef _Document _doc
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase {
-  PyObject *(*set_context)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *, xmlXPathContext *);
-  int (*_checkAbsolutePath)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *, char *);
-  int (*_lock)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *);
-  void (*_unlock)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *);
-  PyObject *(*_raise_parse_error)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *);
-  PyObject *(*_raise_eval_error)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *);
-  PyObject *(*_handle_result)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *, xmlXPathObject *, struct LxmlDocument *);
+struct __pyx_vtabstruct_4lxml_5etree__ElementTree {
+  int (*_assertHasRoot)(struct LxmlElementTree *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase *__pyx_vtabptr_4lxml_5etree__XPathEvaluatorBase;
-static int __pyx_f_4lxml_5etree_19_XPathEvaluatorBase__lock(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *);
-static void __pyx_f_4lxml_5etree_19_XPathEvaluatorBase__unlock(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *);
+static struct __pyx_vtabstruct_4lxml_5etree__ElementTree *__pyx_vtabptr_4lxml_5etree__ElementTree;
+static int __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(struct LxmlElementTree *);
 
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementTagMatcherType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":405
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2385
  * 
  * 
- * cdef class XPath(_XPathEvaluatorBase):             # <<<<<<<<<<<<<<
- *     u"""XPath(self, path, namespaces=None, extensions=None, regexp=True, smart_strings=True)
- *     A compiled XPath expression that can be called on Elements and ElementTrees.
+ * cdef public class _ElementTagMatcher [ object LxmlElementTagMatcher,             # <<<<<<<<<<<<<<
+ *                                        type LxmlElementTagMatcherType ]:
+ *     """
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_XPath {
-  struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher {
+  PyObject *(*_initTagMatch)(struct LxmlElementTagMatcher *, PyObject *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree_XPath *__pyx_vtabptr_4lxml_5etree_XPath;
+static struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher *__pyx_vtabptr_4lxml_5etree__ElementTagMatcher;
 
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementIteratorType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/extensions.pxi":32
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2416
+ *                 self._name = NULL
  * 
- * @cython.internal
- * cdef class _BaseContext:             # <<<<<<<<<<<<<<
- *     cdef xpath.xmlXPathContext* _xpathCtxt
- *     cdef _Document _doc
+ * cdef public class _ElementIterator(_ElementTagMatcher) [             # <<<<<<<<<<<<<<
+ *     object LxmlElementIterator, type LxmlElementIteratorType ]:
+ *     """
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__BaseContext {
-  struct __pyx_obj_4lxml_5etree__BaseContext *(*_copy)(struct __pyx_obj_4lxml_5etree__BaseContext *);
-  PyObject *(*_to_utf)(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *);
-  void (*_set_xpath_context)(struct __pyx_obj_4lxml_5etree__BaseContext *, xmlXPathContext *);
-  PyObject *(*_register_context)(struct __pyx_obj_4lxml_5etree__BaseContext *, struct LxmlDocument *);
-  PyObject *(*_cleanup_context)(struct __pyx_obj_4lxml_5etree__BaseContext *);
-  PyObject *(*_release_context)(struct __pyx_obj_4lxml_5etree__BaseContext *);
-  PyObject *(*addNamespace)(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *, PyObject *);
-  PyObject *(*registerNamespace)(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *, PyObject *);
-  PyObject *(*registerLocalNamespaces)(struct __pyx_obj_4lxml_5etree__BaseContext *);
-  PyObject *(*registerGlobalNamespaces)(struct __pyx_obj_4lxml_5etree__BaseContext *);
-  PyObject *(*unregisterGlobalNamespaces)(struct __pyx_obj_4lxml_5etree__BaseContext *);
-  void (*_unregisterNamespace)(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *);
-  int (*_addLocalExtensionFunction)(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *, PyObject *, PyObject *);
-  PyObject *(*registerGlobalFunctions)(struct __pyx_obj_4lxml_5etree__BaseContext *, void *, __pyx_t_4lxml_5etree__register_function);
-  PyObject *(*registerLocalFunctions)(struct __pyx_obj_4lxml_5etree__BaseContext *, void *, __pyx_t_4lxml_5etree__register_function);
-  PyObject *(*unregisterAllFunctions)(struct __pyx_obj_4lxml_5etree__BaseContext *, void *, __pyx_t_4lxml_5etree__register_function);
-  PyObject *(*unregisterGlobalFunctions)(struct __pyx_obj_4lxml_5etree__BaseContext *, void *, __pyx_t_4lxml_5etree__register_function);
-  PyObject *(*_find_cached_function)(struct __pyx_obj_4lxml_5etree__BaseContext *, const xmlChar *, const xmlChar *);
-  PyObject *(*_release_temp_refs)(struct __pyx_obj_4lxml_5etree__BaseContext *);
-  PyObject *(*_hold)(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *);
-  struct LxmlDocument *(*_findDocumentForNode)(struct __pyx_obj_4lxml_5etree__BaseContext *, xmlNode *);
+struct __pyx_vtabstruct_4lxml_5etree__ElementIterator {
+  struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher __pyx_base;
+  void (*_storeNext)(struct LxmlElementIterator *, struct LxmlElement *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__BaseContext *__pyx_vtabptr_4lxml_5etree__BaseContext;
-static PyObject *__pyx_f_4lxml_5etree_12_BaseContext__register_context(struct __pyx_obj_4lxml_5etree__BaseContext *, struct LxmlDocument *);
-static PyObject *__pyx_f_4lxml_5etree_12_BaseContext__cleanup_context(struct __pyx_obj_4lxml_5etree__BaseContext *);
-static PyObject *__pyx_f_4lxml_5etree_12_BaseContext__release_context(struct __pyx_obj_4lxml_5etree__BaseContext *);
-static PyObject *__pyx_f_4lxml_5etree_12_BaseContext__find_cached_function(struct __pyx_obj_4lxml_5etree__BaseContext *, const xmlChar *, const xmlChar *);
-static PyObject *__pyx_f_4lxml_5etree_12_BaseContext__release_temp_refs(struct __pyx_obj_4lxml_5etree__BaseContext *);
-static PyObject *__pyx_f_4lxml_5etree_12_BaseContext__hold(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *);
-static struct LxmlDocument *__pyx_f_4lxml_5etree_12_BaseContext__findDocumentForNode(struct __pyx_obj_4lxml_5etree__BaseContext *, xmlNode *);
+static struct __pyx_vtabstruct_4lxml_5etree__ElementIterator *__pyx_vtabptr_4lxml_5etree__ElementIterator;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":271
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2453
  * @cython.final
  * @cython.internal
- * cdef class _XSLTContext(_BaseContext):             # <<<<<<<<<<<<<<
- *     cdef xslt.xsltTransformContext* _xsltCtxt
- *     cdef _ReadOnlyElementProxy _extension_element_proxy
+ * cdef class _MultiTagMatcher:             # <<<<<<<<<<<<<<
+ *     """
+ *     Match an xmlNode against a list of tags.
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__XSLTContext {
-  struct __pyx_vtabstruct_4lxml_5etree__BaseContext __pyx_base;
-  PyObject *(*register_context)(struct __pyx_obj_4lxml_5etree__XSLTContext *, xsltTransformContext *, struct LxmlDocument *);
-  PyObject *(*free_context)(struct __pyx_obj_4lxml_5etree__XSLTContext *);
+struct __pyx_vtabstruct_4lxml_5etree__MultiTagMatcher {
+  int (*rejectsAll)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *);
+  int (*rejectsAllAttributes)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *);
+  int (*matchesType)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, int);
+  void (*_clear)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *);
+  PyObject *(*initTagMatch)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, PyObject *);
+  PyObject *(*_storeTags)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, PyObject *, PyObject *);
+  int (*cacheTags)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, struct LxmlDocument *, struct __pyx_opt_args_4lxml_5etree_16_MultiTagMatcher_cacheTags *__pyx_optional_args);
+  int (*matches)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlNode *);
+  int (*matchesNsTag)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, const xmlChar *, const xmlChar *);
+  int (*matchesAttribute)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlAttr *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__XSLTContext *__pyx_vtabptr_4lxml_5etree__XSLTContext;
-static PyObject *__pyx_f_4lxml_5etree_12_XSLTContext_register_context(struct __pyx_obj_4lxml_5etree__XSLTContext *, xsltTransformContext *, struct LxmlDocument *);
-static PyObject *__pyx_f_4lxml_5etree_12_XSLTContext_free_context(struct __pyx_obj_4lxml_5etree__XSLTContext *);
+static struct __pyx_vtabstruct_4lxml_5etree__MultiTagMatcher *__pyx_vtabptr_4lxml_5etree__MultiTagMatcher;
+static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAll(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *);
+static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAllAttributes(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *);
+static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesType(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, int);
+static void __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *);
+static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, PyObject *);
+static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, PyObject *, PyObject *);
+static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, struct LxmlDocument *, struct __pyx_opt_args_4lxml_5etree_16_MultiTagMatcher_cacheTags *__pyx_optional_args);
+static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlNode *);
+static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, const xmlChar *, const xmlChar *);
+static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesAttribute(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlAttr *);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":101
- * 
- * 
- * cdef class ElementNamespaceClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
- *     u"""ElementNamespaceClassLookup(self, fallback=None)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2594
+ *         return False
  * 
+ * cdef class _ElementMatchIterator:             # <<<<<<<<<<<<<<
+ *     cdef _Element _node
+ *     cdef _node_to_node_function _next_element
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_ElementNamespaceClassLookup {
-  struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator {
+  PyObject *(*_initTagMatcher)(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, PyObject *);
+  int (*_storeNext)(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, struct LxmlElement *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree_ElementNamespaceClassLookup *__pyx_vtabptr_4lxml_5etree_ElementNamespaceClassLookup;
+static struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator *__pyx_vtabptr_4lxml_5etree__ElementMatchIterator;
+static PyObject *__pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, PyObject *);
+static int __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, struct LxmlElement *);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":456
- * @cython.final
- * @cython.internal
- * cdef class _ModifyContentOnlyEntityProxy(_ModifyContentOnlyProxy):             # <<<<<<<<<<<<<<
- *     u"A read-only proxy for entity references (for internal use only!)"
- *     property name:
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2623
+ *         return current_node
+ * 
+ * cdef class ElementChildIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
+ *     u"""ElementChildIterator(self, node, tag=None, reversed=False)
+ *     Iterates over the children of an element.
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyEntityProxy {
-  struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyProxy __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree_ElementChildIterator {
+  struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyEntityProxy *__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyEntityProxy;
+static struct __pyx_vtabstruct_4lxml_5etree_ElementChildIterator *__pyx_vtabptr_4lxml_5etree_ElementChildIterator;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":168
- * # XSLT file/network access control
- * 
- * cdef class XSLTAccessControl:             # <<<<<<<<<<<<<<
- *     u"""XSLTAccessControl(self, read_file=True, write_file=True, create_dir=True, read_network=True, write_network=True)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2643
+ *         self._node = _elementFactory(node._doc, c_node) if c_node is not NULL else None
  * 
+ * cdef class SiblingsIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
+ *     u"""SiblingsIterator(self, node, tag=None, preceding=False)
+ *     Iterates over the siblings of an element.
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_XSLTAccessControl {
-  PyObject *(*_setAccess)(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltSecurityOption, int);
-  void (*_register_in_context)(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltTransformContext *);
-  PyObject *(*_optval)(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltSecurityOption);
+struct __pyx_vtabstruct_4lxml_5etree_SiblingsIterator {
+  struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree_XSLTAccessControl *__pyx_vtabptr_4lxml_5etree_XSLTAccessControl;
-static PyObject *__pyx_f_4lxml_5etree_17XSLTAccessControl__setAccess(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltSecurityOption, int);
-static void __pyx_f_4lxml_5etree_17XSLTAccessControl__register_in_context(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltTransformContext *);
-static PyObject *__pyx_f_4lxml_5etree_17XSLTAccessControl__optval(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltSecurityOption);
+static struct __pyx_vtabstruct_4lxml_5etree_SiblingsIterator *__pyx_vtabptr_4lxml_5etree_SiblingsIterator;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":651
- * @cython.final
- * @cython.internal
- * cdef class _IncrementalFileWriter:             # <<<<<<<<<<<<<<
- *     cdef tree.xmlOutputBuffer* _c_out
- *     cdef bytes _encoding
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2658
+ *         self._storeNext(node)
+ * 
+ * cdef class AncestorsIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
+ *     u"""AncestorsIterator(self, node, tag=None)
+ *     Iterates over the ancestors of an element (from parent to parent).
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__IncrementalFileWriter {
-  PyObject *(*_write_qname)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *);
-  PyObject *(*_write_start_element)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
-  PyObject *(*_write_attributes_and_namespaces)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *, PyObject *);
-  PyObject *(*_write_attributes_list)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
-  PyObject *(*_write_end_element)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
-  PyObject *(*_find_prefix)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *, PyObject *);
-  PyObject *(*_collect_namespaces)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
-  PyObject *(*_close)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, int);
-  PyObject *(*_handle_error)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, int);
+struct __pyx_vtabstruct_4lxml_5etree_AncestorsIterator {
+  struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__IncrementalFileWriter *__pyx_vtabptr_4lxml_5etree__IncrementalFileWriter;
-static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *);
-static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_element(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
-static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_and_namespaces(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *, PyObject *);
-static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_list(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
-static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_element(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
-static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *, PyObject *);
-static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespaces(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
-static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, int);
-static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, int);
+static struct __pyx_vtabstruct_4lxml_5etree_AncestorsIterator *__pyx_vtabptr_4lxml_5etree_AncestorsIterator;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":466
- *                 del self._entries[:offset]
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2668
+ *         self._storeNext(node)
  * 
- * cdef class PyErrorLog(_BaseErrorLog):             # <<<<<<<<<<<<<<
- *     u"""PyErrorLog(self, logger_name=None, logger=None)
- *     A global error log that connects to the Python stdlib logging package.
+ * cdef class ElementDepthFirstIterator:             # <<<<<<<<<<<<<<
+ *     u"""ElementDepthFirstIterator(self, node, tag=None, inclusive=True)
+ *     Iterates over an element and its sub-elements in document order (depth
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_PyErrorLog {
-  struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree_ElementDepthFirstIterator {
+  xmlNode *(*_nextNodeAnyTag)(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *);
+  xmlNode *(*_nextNodeMatchTag)(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree_PyErrorLog *__pyx_vtabptr_4lxml_5etree_PyErrorLog;
+static struct __pyx_vtabstruct_4lxml_5etree_ElementDepthFirstIterator *__pyx_vtabptr_4lxml_5etree_ElementDepthFirstIterator;
+static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *);
+static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeMatchTag(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":207
- * @cython.final
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":4
+ * 
  * @cython.internal
- * cdef class _XPathFunctionNamespaceRegistry(_FunctionNamespaceRegistry):             # <<<<<<<<<<<<<<
- *     cdef object _prefix
- *     cdef bytes _prefix_utf
+ * cdef class _ReadOnlyProxy:             # <<<<<<<<<<<<<<
+ *     u"A read-only proxy class suitable for PIs/Comments (for internal use only!)."
+ *     cdef bint _free_after_use
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__XPathFunctionNamespaceRegistry {
-  struct __pyx_vtabstruct_4lxml_5etree__FunctionNamespaceRegistry __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy {
+  int (*_assertNode)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *);
+  int (*_raise_unsupported_type)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *);
+  void (*free_after_use)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *);
+  PyObject *(*__pyx___copy__)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *, int __pyx_skip_dispatch);
+  PyObject *(*getchildren)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *, int __pyx_skip_dispatch);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__XPathFunctionNamespaceRegistry *__pyx_vtabptr_4lxml_5etree__XPathFunctionNamespaceRegistry;
+static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy *__pyx_vtabptr_4lxml_5etree__ReadOnlyProxy;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":733
- * 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":248
+ * @cython.final
  * @cython.internal
- * cdef class _BaseParser:             # <<<<<<<<<<<<<<
- *     cdef ElementClassLookup _class_lookup
- *     cdef _ResolverRegistry _resolvers
+ * cdef class _ReadOnlyPIProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
+ *     u"A read-only proxy for processing instructions (for internal use only!)"
+ *     property target:
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__BaseParser {
-  PyObject *(*_setBaseURL)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *);
-  PyObject *(*_collectEvents)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, PyObject *);
-  struct __pyx_obj_4lxml_5etree__ParserContext *(*_getParserContext)(struct __pyx_obj_4lxml_5etree__BaseParser *);
-  struct __pyx_obj_4lxml_5etree__ParserContext *(*_getPushParserContext)(struct __pyx_obj_4lxml_5etree__BaseParser *);
-  struct __pyx_obj_4lxml_5etree__ParserContext *(*_createContext)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, PyObject *);
-  int (*_registerHtmlErrorHandler)(struct __pyx_obj_4lxml_5etree__BaseParser *, xmlParserCtxt *);
-  xmlParserCtxt *(*_newParserCtxt)(struct __pyx_obj_4lxml_5etree__BaseParser *);
-  xmlParserCtxt *(*_newPushParserCtxt)(struct __pyx_obj_4lxml_5etree__BaseParser *);
-  struct __pyx_obj_4lxml_5etree__BaseParser *(*_copy)(struct __pyx_obj_4lxml_5etree__BaseParser *);
-  xmlDoc *(*_parseUnicodeDoc)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, char *);
-  xmlDoc *(*_parseDoc)(struct __pyx_obj_4lxml_5etree__BaseParser *, char *, int, char *);
-  xmlDoc *(*_parseDocFromFile)(struct __pyx_obj_4lxml_5etree__BaseParser *, char *);
-  xmlDoc *(*_parseDocFromFilelike)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, PyObject *, PyObject *);
+struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyPIProxy {
+  struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__BaseParser *__pyx_vtabptr_4lxml_5etree__BaseParser;
+static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyPIProxy *__pyx_vtabptr_4lxml_5etree__ReadOnlyPIProxy;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1123
- * ############################################################
- * 
- * cdef class _FeedParser(_BaseParser):             # <<<<<<<<<<<<<<
- *     cdef bint _feed_parser_running
- * 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":257
+ * @cython.final
+ * @cython.internal
+ * cdef class _ReadOnlyEntityProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
+ *     u"A read-only proxy for entity references (for internal use only!)"
+ *     property name:
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__FeedParser {
-  struct __pyx_vtabstruct_4lxml_5etree__BaseParser __pyx_base;
-  PyObject *(*feed)(struct __pyx_obj_4lxml_5etree__FeedParser *, PyObject *, int __pyx_skip_dispatch);
-  PyObject *(*close)(struct __pyx_obj_4lxml_5etree__FeedParser *, int __pyx_skip_dispatch);
+struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyEntityProxy {
+  struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__FeedParser *__pyx_vtabptr_4lxml_5etree__FeedParser;
+static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyEntityProxy *__pyx_vtabptr_4lxml_5etree__ReadOnlyEntityProxy;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1303
- *     )
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":275
  * 
- * cdef class XMLParser(_FeedParser):             # <<<<<<<<<<<<<<
- *     u"""XMLParser(self, encoding=None, attribute_defaults=False, dtd_validation=False, load_dtd=False, no_network=True, ns_clean=False, recover=False, XMLSchema schema=None, remove_blank_text=False, resolve_entities=True, remove_comments=False, remove_pis=False, strip_cdata=True, target=None, compact=True)
+ * @cython.internal
+ * cdef class _ReadOnlyElementProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
+ *     u"The main read-only Element proxy class (for internal use only!)."
  * 
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_XMLParser {
-  struct __pyx_vtabstruct_4lxml_5etree__FeedParser __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyElementProxy {
+  struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree_XMLParser *__pyx_vtabptr_4lxml_5etree_XMLParser;
+static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyElementProxy *__pyx_vtabptr_4lxml_5etree__ReadOnlyElementProxy;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1415
- * 
- * 
- * cdef class ETCompatXMLParser(XMLParser):             # <<<<<<<<<<<<<<
- *     u"""ETCompatXMLParser(self, encoding=None, attribute_defaults=False, \
- *                  dtd_validation=False, load_dtd=False, no_network=True, \
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":372
+ * @cython.final
+ * @cython.internal
+ * cdef class _OpaqueDocumentWrapper(_OpaqueNodeWrapper):             # <<<<<<<<<<<<<<
+ *     cdef int _assertNode(self) except -1:
+ *         u"""This is our way of saying: this proxy is invalid!
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_ETCompatXMLParser {
-  struct __pyx_vtabstruct_4lxml_5etree_XMLParser __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__OpaqueDocumentWrapper {
+  int (*_assertNode)(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *);
+  PyObject *(*append)(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *, PyObject *, int __pyx_skip_dispatch);
 };
-static struct __pyx_vtabstruct_4lxml_5etree_ETCompatXMLParser *__pyx_vtabptr_4lxml_5etree_ETCompatXMLParser;
+static struct __pyx_vtabstruct_4lxml_5etree__OpaqueDocumentWrapper *__pyx_vtabptr_4lxml_5etree__OpaqueDocumentWrapper;
+static int __pyx_f_4lxml_5etree_22_OpaqueDocumentWrapper__assertNode(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *);
+static PyObject *__pyx_f_4lxml_5etree_22_OpaqueDocumentWrapper_append(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *, PyObject *, int __pyx_skip_dispatch);
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementTreeType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1735
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":416
  * 
- * @cython.freelist(8)
- * cdef public class _ElementTree [ type LxmlElementTreeType,             # <<<<<<<<<<<<<<
- *                                  object LxmlElementTree ]:
- *     cdef _Document _doc
+ * @cython.internal
+ * cdef class _ModifyContentOnlyProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
+ *     u"""A read-only proxy that allows changing the text content.
+ *     """
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ElementTree {
-  int (*_assertHasRoot)(struct LxmlElementTree *);
+struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyProxy {
+  struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ElementTree *__pyx_vtabptr_4lxml_5etree__ElementTree;
-static int __pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot(struct LxmlElementTree *);
+static struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyProxy *__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyProxy;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2668
- *         self._storeNext(node)
- * 
- * cdef class ElementDepthFirstIterator:             # <<<<<<<<<<<<<<
- *     u"""ElementDepthFirstIterator(self, node, tag=None, inclusive=True)
- *     Iterates over an element and its sub-elements in document order (depth
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":439
+ * @cython.final
+ * @cython.internal
+ * cdef class _ModifyContentOnlyPIProxy(_ModifyContentOnlyProxy):             # <<<<<<<<<<<<<<
+ *     u"""A read-only proxy that allows changing the text/target content of a
+ *     processing instruction.
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_ElementDepthFirstIterator {
-  xmlNode *(*_nextNodeAnyTag)(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *);
-  xmlNode *(*_nextNodeMatchTag)(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *);
+struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyPIProxy {
+  struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyProxy __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree_ElementDepthFirstIterator *__pyx_vtabptr_4lxml_5etree_ElementDepthFirstIterator;
-static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *);
-static xmlNode *__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeMatchTag(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *);
+static struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyPIProxy *__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyPIProxy;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":344
- * # attribute based lookup scheme
- * 
- * cdef class AttributeBasedElementClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
- *     u"""AttributeBasedElementClassLookup(self, attribute_name, class_mapping, fallback=None)
- *     Checks an attribute of an Element and looks up the value in a
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":456
+ * @cython.final
+ * @cython.internal
+ * cdef class _ModifyContentOnlyEntityProxy(_ModifyContentOnlyProxy):             # <<<<<<<<<<<<<<
+ *     u"A read-only proxy for entity references (for internal use only!)"
+ *     property name:
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_AttributeBasedElementClassLookup {
-  struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyEntityProxy {
+  struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyProxy __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree_AttributeBasedElementClassLookup *__pyx_vtabptr_4lxml_5etree_AttributeBasedElementClassLookup;
+static struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyEntityProxy *__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyEntityProxy;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/iterparse.pxi":5
- * DEF __ITERPARSE_CHUNK_SIZE = 32768
- * 
- * cdef class iterparse:             # <<<<<<<<<<<<<<
- *     u"""iterparse(self, source, events=("end",), tag=None, \
- *                   attribute_defaults=False, dtd_validation=False, \
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":472
+ * @cython.final
+ * @cython.internal
+ * cdef class _AppendOnlyElementProxy(_ReadOnlyElementProxy):             # <<<<<<<<<<<<<<
+ *     u"""A read-only element that allows adding children and changing the
+ *     text content (i.e. everything that adds to the subtree).
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_iterparse {
-  PyObject *(*_close_source)(struct __pyx_obj_4lxml_5etree_iterparse *);
-  int (*_read_more_events)(struct __pyx_obj_4lxml_5etree_iterparse *, struct __pyx_obj_4lxml_5etree__SaxParserContext *);
+struct __pyx_vtabstruct_4lxml_5etree__AppendOnlyElementProxy {
+  struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyElementProxy __pyx_base;
+  PyObject *(*append)(struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy *, PyObject *, int __pyx_skip_dispatch);
 };
-static struct __pyx_vtabstruct_4lxml_5etree_iterparse *__pyx_vtabptr_4lxml_5etree_iterparse;
-static PyObject *__pyx_f_4lxml_5etree_9iterparse__close_source(struct __pyx_obj_4lxml_5etree_iterparse *);
-static int __pyx_f_4lxml_5etree_9iterparse__read_more_events(struct __pyx_obj_4lxml_5etree_iterparse *, struct __pyx_obj_4lxml_5etree__SaxParserContext *);
+static struct __pyx_vtabstruct_4lxml_5etree__AppendOnlyElementProxy *__pyx_vtabptr_4lxml_5etree__AppendOnlyElementProxy;
+static PyObject *__pyx_f_4lxml_5etree_23_AppendOnlyElementProxy_append(struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy *, PyObject *, int __pyx_skip_dispatch);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlid.pxi":58
- *     return (_elementTreeFactory(doc, None), _IDDict(doc))
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":97
+ *                 raise TypeError, "Invalid child type: %r" % type(child)
  * 
- * cdef class _IDDict:             # <<<<<<<<<<<<<<
- *     u"""IDDict(self, etree)
- *     A dictionary-like proxy class that mapps ID attributes to elements.
- */
-
-struct __pyx_vtabstruct_4lxml_5etree__IDDict {
-  PyObject *(*_build_keys)(struct __pyx_obj_4lxml_5etree__IDDict *);
-  PyObject *(*_build_items)(struct __pyx_obj_4lxml_5etree__IDDict *);
-};
-static struct __pyx_vtabstruct_4lxml_5etree__IDDict *__pyx_vtabptr_4lxml_5etree__IDDict;
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":267
- * # DTD
+ * cdef class CommentBase(_Comment):             # <<<<<<<<<<<<<<
+ *     u"""All custom Comment classes must inherit from this one.
  * 
- * cdef class DTD(_Validator):             # <<<<<<<<<<<<<<
- *     u"""DTD(self, file=None, external_id=None)
- *     A DTD validator.
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_DTD {
-  struct __pyx_vtabstruct_4lxml_5etree__Validator __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree_CommentBase {
+  struct __pyx_vtabstruct_4lxml_5etree__Comment __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree_DTD *__pyx_vtabptr_4lxml_5etree_DTD;
+static struct __pyx_vtabstruct_4lxml_5etree_CommentBase *__pyx_vtabptr_4lxml_5etree_CommentBase;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":334
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":126
+ *         self._init()
  * 
- * @cython.no_gc_clear
- * cdef class XSLT:             # <<<<<<<<<<<<<<
- *     u"""XSLT(self, xslt_input, extensions=None, regexp=True, access_control=None)
+ * cdef class PIBase(_ProcessingInstruction):             # <<<<<<<<<<<<<<
+ *     u"""All custom Processing Instruction classes must inherit from this one.
  * 
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_XSLT {
-  xmlDoc *(*_run_transform)(struct __pyx_obj_4lxml_5etree_XSLT *, xmlDoc *, const char **, struct __pyx_obj_4lxml_5etree__XSLTContext *, xsltTransformContext *);
+struct __pyx_vtabstruct_4lxml_5etree_PIBase {
+  struct __pyx_vtabstruct_4lxml_5etree__ProcessingInstruction __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree_XSLT *__pyx_vtabptr_4lxml_5etree_XSLT;
+static struct __pyx_vtabstruct_4lxml_5etree_PIBase *__pyx_vtabptr_4lxml_5etree_PIBase;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":256
- *         return message
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":157
+ *         self._init()
  * 
- * cdef class _ListErrorLog(_BaseErrorLog):             # <<<<<<<<<<<<<<
- *     u"Immutable base version of a list based error log."
- *     cdef list _entries
- */
-
-struct __pyx_vtabstruct_4lxml_5etree__ListErrorLog {
-  struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog __pyx_base;
-};
-static struct __pyx_vtabstruct_4lxml_5etree__ListErrorLog *__pyx_vtabptr_4lxml_5etree__ListErrorLog;
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":382
- *     cdef void* old_error_context
+ * cdef class EntityBase(_Entity):             # <<<<<<<<<<<<<<
+ *     u"""All custom Entity classes must inherit from this one.
  * 
- * cdef class _ErrorLog(_ListErrorLog):             # <<<<<<<<<<<<<<
- *     cdef list _logContexts
- *     def __cinit__(self):
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ErrorLog {
-  struct __pyx_vtabstruct_4lxml_5etree__ListErrorLog __pyx_base;
-  int (*__pyx___enter__)(struct __pyx_obj_4lxml_5etree__ErrorLog *);
-  int (*connect)(struct __pyx_obj_4lxml_5etree__ErrorLog *);
-  int (*disconnect)(struct __pyx_obj_4lxml_5etree__ErrorLog *);
-  PyObject *(*clear)(struct __pyx_obj_4lxml_5etree__ErrorLog *, int __pyx_skip_dispatch);
+struct __pyx_vtabstruct_4lxml_5etree_EntityBase {
+  struct __pyx_vtabstruct_4lxml_5etree__Entity __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *__pyx_vtabptr_4lxml_5etree__ErrorLog;
-static int __pyx_f_4lxml_5etree_9_ErrorLog___enter__(struct __pyx_obj_4lxml_5etree__ErrorLog *);
-static int __pyx_f_4lxml_5etree_9_ErrorLog_connect(struct __pyx_obj_4lxml_5etree__ErrorLog *);
-static int __pyx_f_4lxml_5etree_9_ErrorLog_disconnect(struct __pyx_obj_4lxml_5etree__ErrorLog *);
+static struct __pyx_vtabstruct_4lxml_5etree_EntityBase *__pyx_vtabptr_4lxml_5etree_EntityBase;
 
+__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlFallbackElementClassLookupType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":448
- *             _ErrorLog.receive(self, entry)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":223
+ *         self._lookup_function = NULL # use default lookup
  * 
- * cdef class _RotatingErrorLog(_ErrorLog):             # <<<<<<<<<<<<<<
- *     cdef int _max_len
- *     def __init__(self, max_len):
+ * cdef public class FallbackElementClassLookup(ElementClassLookup) \             # <<<<<<<<<<<<<<
+ *          [ type LxmlFallbackElementClassLookupType,
+ *            object LxmlFallbackElementClassLookup ]:
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__RotatingErrorLog {
-  struct __pyx_vtabstruct_4lxml_5etree__ErrorLog __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup {
+  void (*_setFallback)(struct LxmlFallbackElementClassLookup *, struct LxmlElementClassLookup *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__RotatingErrorLog *__pyx_vtabptr_4lxml_5etree__RotatingErrorLog;
+static struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup *__pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/schematron.pxi":22
- * # Schematron
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":344
+ * # attribute based lookup scheme
  * 
- * cdef class Schematron(_Validator):             # <<<<<<<<<<<<<<
- *     u"""Schematron(self, etree=None, file=None)
- *     A Schematron validator.
+ * cdef class AttributeBasedElementClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
+ *     u"""AttributeBasedElementClassLookup(self, attribute_name, class_mapping, fallback=None)
+ *     Checks an attribute of an Element and looks up the value in a
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_Schematron {
-  struct __pyx_vtabstruct_4lxml_5etree__Validator __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree_AttributeBasedElementClassLookup {
+  struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree_Schematron *__pyx_vtabptr_4lxml_5etree_Schematron;
+static struct __pyx_vtabstruct_4lxml_5etree_AttributeBasedElementClassLookup *__pyx_vtabptr_4lxml_5etree_AttributeBasedElementClassLookup;
 
 
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":396
@@ -3278,210 +3223,135 @@ struct __pyx_vtabstruct_4lxml_5etree_ParserBasedElementClassLookup {
 static struct __pyx_vtabstruct_4lxml_5etree_ParserBasedElementClassLookup *__pyx_vtabptr_4lxml_5etree_ParserBasedElementClassLookup;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":39
- * 
- * @cython.freelist(16)
- * cdef class _LogEntry:             # <<<<<<<<<<<<<<
- *     """A log message entry from an error log.
- * 
- */
-
-struct __pyx_vtabstruct_4lxml_5etree__LogEntry {
-  PyObject *(*_setError)(struct __pyx_obj_4lxml_5etree__LogEntry *, xmlError *);
-  PyObject *(*_setGeneric)(struct __pyx_obj_4lxml_5etree__LogEntry *, int, int, int, int, PyObject *, PyObject *);
-};
-static struct __pyx_vtabstruct_4lxml_5etree__LogEntry *__pyx_vtabptr_4lxml_5etree__LogEntry;
-static PyObject *__pyx_f_4lxml_5etree_9_LogEntry__setError(struct __pyx_obj_4lxml_5etree__LogEntry *, xmlError *);
-static PyObject *__pyx_f_4lxml_5etree_9_LogEntry__setGeneric(struct __pyx_obj_4lxml_5etree__LogEntry *, int, int, int, int, PyObject *, PyObject *);
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/docloader.pxi":113
- * @cython.final
- * @cython.internal
- * cdef class _ResolverRegistry:             # <<<<<<<<<<<<<<
- *     cdef object _resolvers
- *     cdef Resolver _default_resolver
- */
-
-struct __pyx_vtabstruct_4lxml_5etree__ResolverRegistry {
-  struct __pyx_obj_4lxml_5etree__ResolverRegistry *(*_copy)(struct __pyx_obj_4lxml_5etree__ResolverRegistry *);
-};
-static struct __pyx_vtabstruct_4lxml_5etree__ResolverRegistry *__pyx_vtabptr_4lxml_5etree__ResolverRegistry;
-static struct __pyx_obj_4lxml_5etree__ResolverRegistry *__pyx_f_4lxml_5etree_17_ResolverRegistry__copy(struct __pyx_obj_4lxml_5etree__ResolverRegistry *);
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1636
- * cdef object _FIND_PI_ATTRIBUTES = re.compile(ur'\s+(\w+)\s*=\s*(?:\'([^\']*)\'|"([^"]*)")', re.U).findall
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":413
+ * #  custom class lookup based on node type, namespace, name
  * 
- * cdef class _Entity(__ContentOnlyElement):             # <<<<<<<<<<<<<<
- *     property tag:
- *         def __get__(self):
+ * cdef class CustomElementClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
+ *     u"""CustomElementClassLookup(self, fallback=None)
+ *     Element class lookup based on a subclass method.
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__Entity {
-  struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree_CustomElementClassLookup {
+  struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__Entity *__pyx_vtabptr_4lxml_5etree__Entity;
+static struct __pyx_vtabstruct_4lxml_5etree_CustomElementClassLookup *__pyx_vtabptr_4lxml_5etree_CustomElementClassLookup;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":1578
- *         return []
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":468
+ * # read-only tree based class lookup
  * 
- * cdef class _Comment(__ContentOnlyElement):             # <<<<<<<<<<<<<<
- *     property tag:
- *         def __get__(self):
+ * cdef class PythonElementClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
+ *     u"""PythonElementClassLookup(self, fallback=None)
+ *     Element class lookup based on a subclass method.
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__Comment {
-  struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree_PythonElementClassLookup {
+  struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__Comment *__pyx_vtabptr_4lxml_5etree__Comment;
+static struct __pyx_vtabstruct_4lxml_5etree_PythonElementClassLookup *__pyx_vtabptr_4lxml_5etree_PythonElementClassLookup;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":97
- *                 raise TypeError, "Invalid child type: %r" % type(child)
- * 
- * cdef class CommentBase(_Comment):             # <<<<<<<<<<<<<<
- *     u"""All custom Comment classes must inherit from this one.
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":15
  * 
- */
-
-struct __pyx_vtabstruct_4lxml_5etree_CommentBase {
-  struct __pyx_vtabstruct_4lxml_5etree__Comment __pyx_base;
-};
-static struct __pyx_vtabstruct_4lxml_5etree_CommentBase *__pyx_vtabptr_4lxml_5etree_CommentBase;
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlschema.pxi":170
- * @cython.final
  * @cython.internal
- * cdef class _ParserSchemaValidationContext:             # <<<<<<<<<<<<<<
- *     cdef XMLSchema _schema
- *     cdef xmlschema.xmlSchemaValidCtxt* _valid_ctxt
- */
-
-struct __pyx_vtabstruct_4lxml_5etree__ParserSchemaValidationContext {
-  struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *(*copy)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *);
-  void (*inject_default_attributes)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *, xmlDoc *);
-  int (*connect)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *, xmlParserCtxt *, struct __pyx_obj_4lxml_5etree__BaseErrorLog *);
-  void (*disconnect)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *);
-  int (*isvalid)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *);
-};
-static struct __pyx_vtabstruct_4lxml_5etree__ParserSchemaValidationContext *__pyx_vtabptr_4lxml_5etree__ParserSchemaValidationContext;
-static struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_copy(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *);
-static void __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_inject_default_attributes(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *, xmlDoc *);
-static int __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_connect(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *, xmlParserCtxt *, struct __pyx_obj_4lxml_5etree__BaseErrorLog *);
-static void __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_disconnect(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *);
-static int __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_isvalid(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *);
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2594
- *         return False
- * 
- * cdef class _ElementMatchIterator:             # <<<<<<<<<<<<<<
- *     cdef _Element _node
- *     cdef _node_to_node_function _next_element
+ * cdef class _NamespaceRegistry:             # <<<<<<<<<<<<<<
+ *     u"Dictionary-like namespace registry"
+ *     cdef object _ns_uri
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator {
-  PyObject *(*_initTagMatcher)(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, PyObject *);
-  int (*_storeNext)(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, struct LxmlElement *);
+struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry {
+  PyObject *(*_get)(struct __pyx_obj_4lxml_5etree__NamespaceRegistry *, PyObject *);
+  PyObject *(*_getForString)(struct __pyx_obj_4lxml_5etree__NamespaceRegistry *, char *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator *__pyx_vtabptr_4lxml_5etree__ElementMatchIterator;
-static PyObject *__pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, PyObject *);
-static int __pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, struct LxmlElement *);
+static struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry *__pyx_vtabptr_4lxml_5etree__NamespaceRegistry;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2643
- *         self._node = _elementFactory(node._doc, c_node) if c_node is not NULL else None
- * 
- * cdef class SiblingsIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
- *     u"""SiblingsIterator(self, node, tag=None, preceding=False)
- *     Iterates over the siblings of an element.
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":87
+ * @cython.final
+ * @cython.internal
+ * cdef class _ClassNamespaceRegistry(_NamespaceRegistry):             # <<<<<<<<<<<<<<
+ *     u"Dictionary-like registry for namespace implementation classes"
+ *     def __setitem__(self, name, item):
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_SiblingsIterator {
-  struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__ClassNamespaceRegistry {
+  struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree_SiblingsIterator *__pyx_vtabptr_4lxml_5etree_SiblingsIterator;
+static struct __pyx_vtabstruct_4lxml_5etree__ClassNamespaceRegistry *__pyx_vtabptr_4lxml_5etree__ClassNamespaceRegistry;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":275
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":101
  * 
- * @cython.internal
- * cdef class _ReadOnlyElementProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
- *     u"The main read-only Element proxy class (for internal use only!)."
+ * 
+ * cdef class ElementNamespaceClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
+ *     u"""ElementNamespaceClassLookup(self, fallback=None)
  * 
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyElementProxy {
-  struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree_ElementNamespaceClassLookup {
+  struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyElementProxy *__pyx_vtabptr_4lxml_5etree__ReadOnlyElementProxy;
+static struct __pyx_vtabstruct_4lxml_5etree_ElementNamespaceClassLookup *__pyx_vtabptr_4lxml_5etree_ElementNamespaceClassLookup;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":472
- * @cython.final
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":192
+ * 
  * @cython.internal
- * cdef class _AppendOnlyElementProxy(_ReadOnlyElementProxy):             # <<<<<<<<<<<<<<
- *     u"""A read-only element that allows adding children and changing the
- *     text content (i.e. everything that adds to the subtree).
+ * cdef class _FunctionNamespaceRegistry(_NamespaceRegistry):             # <<<<<<<<<<<<<<
+ *     def __setitem__(self, name, item):
+ *         if not callable(item):
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__AppendOnlyElementProxy {
-  struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyElementProxy __pyx_base;
-  PyObject *(*append)(struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy *, PyObject *, int __pyx_skip_dispatch);
+struct __pyx_vtabstruct_4lxml_5etree__FunctionNamespaceRegistry {
+  struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__AppendOnlyElementProxy *__pyx_vtabptr_4lxml_5etree__AppendOnlyElementProxy;
-static PyObject *__pyx_f_4lxml_5etree_23_AppendOnlyElementProxy_append(struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy *, PyObject *, int __pyx_skip_dispatch);
+static struct __pyx_vtabstruct_4lxml_5etree__FunctionNamespaceRegistry *__pyx_vtabptr_4lxml_5etree__FunctionNamespaceRegistry;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":372
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":207
  * @cython.final
  * @cython.internal
- * cdef class _OpaqueDocumentWrapper(_OpaqueNodeWrapper):             # <<<<<<<<<<<<<<
- *     cdef int _assertNode(self) except -1:
- *         u"""This is our way of saying: this proxy is invalid!
+ * cdef class _XPathFunctionNamespaceRegistry(_FunctionNamespaceRegistry):             # <<<<<<<<<<<<<<
+ *     cdef object _prefix
+ *     cdef bytes _prefix_utf
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__OpaqueDocumentWrapper {
-  int (*_assertNode)(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *);
-  PyObject *(*append)(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *, PyObject *, int __pyx_skip_dispatch);
+struct __pyx_vtabstruct_4lxml_5etree__XPathFunctionNamespaceRegistry {
+  struct __pyx_vtabstruct_4lxml_5etree__FunctionNamespaceRegistry __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__OpaqueDocumentWrapper *__pyx_vtabptr_4lxml_5etree__OpaqueDocumentWrapper;
-static int __pyx_f_4lxml_5etree_22_OpaqueDocumentWrapper__assertNode(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *);
-static PyObject *__pyx_f_4lxml_5etree_22_OpaqueDocumentWrapper_append(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *, PyObject *, int __pyx_skip_dispatch);
+static struct __pyx_vtabstruct_4lxml_5etree__XPathFunctionNamespaceRegistry *__pyx_vtabptr_4lxml_5etree__XPathFunctionNamespaceRegistry;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2658
- *         self._storeNext(node)
- * 
- * cdef class AncestorsIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
- *     u"""AncestorsIterator(self, node, tag=None)
- *     Iterates over the ancestors of an element (from parent to parent).
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/docloader.pxi":113
+ * @cython.final
+ * @cython.internal
+ * cdef class _ResolverRegistry:             # <<<<<<<<<<<<<<
+ *     cdef object _resolvers
+ *     cdef Resolver _default_resolver
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_AncestorsIterator {
-  struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__ResolverRegistry {
+  struct __pyx_obj_4lxml_5etree__ResolverRegistry *(*_copy)(struct __pyx_obj_4lxml_5etree__ResolverRegistry *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree_AncestorsIterator *__pyx_vtabptr_4lxml_5etree_AncestorsIterator;
+static struct __pyx_vtabstruct_4lxml_5etree__ResolverRegistry *__pyx_vtabptr_4lxml_5etree__ResolverRegistry;
+static struct __pyx_obj_4lxml_5etree__ResolverRegistry *__pyx_f_4lxml_5etree_17_ResolverRegistry__copy(struct __pyx_obj_4lxml_5etree__ResolverRegistry *);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":257
- * @cython.final
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/docloader.pxi":161
+ * 
  * @cython.internal
- * cdef class _ReadOnlyEntityProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
- *     u"A read-only proxy for entity references (for internal use only!)"
- *     property name:
+ * cdef class _ResolverContext(_ExceptionContext):             # <<<<<<<<<<<<<<
+ *     cdef _ResolverRegistry _resolvers
+ *     cdef _TempStore _storage
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyEntityProxy {
-  struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__ResolverContext {
+  struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyEntityProxy *__pyx_vtabptr_4lxml_5etree__ReadOnlyEntityProxy;
+static struct __pyx_vtabstruct_4lxml_5etree__ResolverContext *__pyx_vtabptr_4lxml_5etree__ResolverContext;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":503
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":504
  * 
  * @cython.internal
  * cdef class _ParserContext(_ResolverContext):             # <<<<<<<<<<<<<<
@@ -3542,18 +3412,42 @@ static int __pyx_f_4lxml_5etree_20_TargetParserContext__setTarget(struct __pyx_o
 static void __pyx_f_4lxml_5etree_20_TargetParserContext__cleanupTargetParserContext(struct __pyx_obj_4lxml_5etree__TargetParserContext *, xmlDoc *);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":157
- *         self._init()
- * 
- * cdef class EntityBase(_Entity):             # <<<<<<<<<<<<<<
- *     u"""All custom Entity classes must inherit from this one.
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlschema.pxi":170
+ * @cython.final
+ * @cython.internal
+ * cdef class _ParserSchemaValidationContext:             # <<<<<<<<<<<<<<
+ *     cdef XMLSchema _schema
+ *     cdef xmlschema.xmlSchemaValidCtxt* _valid_ctxt
+ */
+
+struct __pyx_vtabstruct_4lxml_5etree__ParserSchemaValidationContext {
+  struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *(*copy)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *);
+  void (*inject_default_attributes)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *, xmlDoc *);
+  int (*connect)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *, xmlParserCtxt *, struct __pyx_obj_4lxml_5etree__BaseErrorLog *);
+  void (*disconnect)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *);
+  int (*isvalid)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *);
+};
+static struct __pyx_vtabstruct_4lxml_5etree__ParserSchemaValidationContext *__pyx_vtabptr_4lxml_5etree__ParserSchemaValidationContext;
+static struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_copy(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *);
+static void __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_inject_default_attributes(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *, xmlDoc *);
+static int __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_connect(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *, xmlParserCtxt *, struct __pyx_obj_4lxml_5etree__BaseErrorLog *);
+static void __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_disconnect(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *);
+static int __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_isvalid(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *);
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":3253
+ *     pass
  * 
+ * cdef class _Validator:             # <<<<<<<<<<<<<<
+ *     u"Base class for XML validators."
+ *     cdef _ErrorLog _error_log
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_EntityBase {
-  struct __pyx_vtabstruct_4lxml_5etree__Entity __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__Validator {
+  PyObject *(*_append_log_message)(struct __pyx_obj_4lxml_5etree__Validator *, int, int, int, int, PyObject *, PyObject *, int __pyx_skip_dispatch);
+  PyObject *(*_clear_error_log)(struct __pyx_obj_4lxml_5etree__Validator *, int __pyx_skip_dispatch);
 };
-static struct __pyx_vtabstruct_4lxml_5etree_EntityBase *__pyx_vtabptr_4lxml_5etree_EntityBase;
+static struct __pyx_vtabstruct_4lxml_5etree__Validator *__pyx_vtabptr_4lxml_5etree__Validator;
 
 
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlschema.pxi":26
@@ -3571,22 +3465,129 @@ struct __pyx_vtabstruct_4lxml_5etree_XMLSchema {
 static struct __pyx_vtabstruct_4lxml_5etree_XMLSchema *__pyx_vtabptr_4lxml_5etree_XMLSchema;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/iterparse.pxi":203
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":42
+ * @cython.final
+ * @cython.internal
+ * cdef class _ParserDictionaryContext:             # <<<<<<<<<<<<<<
+ *     # Global parser context to share the string dictionary.
+ *     #
+ */
+
+struct __pyx_vtabstruct_4lxml_5etree__ParserDictionaryContext {
+  void (*initMainParserContext)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
+  struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *(*_findThreadParserContext)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
+  void (*setDefaultParser)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__BaseParser *);
+  struct __pyx_obj_4lxml_5etree__BaseParser *(*getDefaultParser)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
+  xmlDict *(*_getThreadDict)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDict *);
+  void (*initThreadDictRef)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDict **);
+  void (*initParserDict)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlParserCtxt *);
+  void (*initXPathParserDict)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlXPathContext *);
+  void (*initDocDict)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDoc *);
+  struct __pyx_obj_4lxml_5etree__ParserContext *(*findImpliedContext)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
+  void (*pushImpliedContextFromParser)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__BaseParser *);
+  void (*pushImpliedContext)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__ParserContext *);
+  void (*popImpliedContext)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
+};
+static struct __pyx_vtabstruct_4lxml_5etree__ParserDictionaryContext *__pyx_vtabptr_4lxml_5etree__ParserDictionaryContext;
+static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initMainParserContext(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
+static struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *__pyx_f_4lxml_5etree_24_ParserDictionaryContext__findThreadParserContext(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
+static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_setDefaultParser(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__BaseParser *);
+static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
+static xmlDict *__pyx_f_4lxml_5etree_24_ParserDictionaryContext__getThreadDict(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDict *);
+static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initThreadDictRef(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDict **);
+static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlParserCtxt *);
+static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initXPathParserDict(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlXPathContext *);
+static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDoc *);
+static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_24_ParserDictionaryContext_findImpliedContext(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
+static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContextFromParser(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__BaseParser *);
+static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContext(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__ParserContext *);
+static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_popImpliedContext(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":253
+ * @cython.final
+ * @cython.internal
+ * cdef class _FileReaderContext:             # <<<<<<<<<<<<<<
+ *     cdef object _filelike
+ *     cdef object _encoding
+ */
+
+struct __pyx_vtabstruct_4lxml_5etree__FileReaderContext {
+  PyObject *(*_close_file)(struct __pyx_obj_4lxml_5etree__FileReaderContext *);
+  xmlParserInputBuffer *(*_createParserInputBuffer)(struct __pyx_obj_4lxml_5etree__FileReaderContext *);
+  xmlParserInput *(*_createParserInput)(struct __pyx_obj_4lxml_5etree__FileReaderContext *, xmlParserCtxt *);
+  xmlDtd *(*_readDtd)(struct __pyx_obj_4lxml_5etree__FileReaderContext *);
+  xmlDoc *(*_readDoc)(struct __pyx_obj_4lxml_5etree__FileReaderContext *, xmlParserCtxt *, int);
+  int (*copyToBuffer)(struct __pyx_obj_4lxml_5etree__FileReaderContext *, char *, int);
+};
+static struct __pyx_vtabstruct_4lxml_5etree__FileReaderContext *__pyx_vtabptr_4lxml_5etree__FileReaderContext;
+static PyObject *__pyx_f_4lxml_5etree_18_FileReaderContext__close_file(struct __pyx_obj_4lxml_5etree__FileReaderContext *);
+static xmlParserInputBuffer *__pyx_f_4lxml_5etree_18_FileReaderContext__createParserInputBuffer(struct __pyx_obj_4lxml_5etree__FileReaderContext *);
+static xmlParserInput *__pyx_f_4lxml_5etree_18_FileReaderContext__createParserInput(struct __pyx_obj_4lxml_5etree__FileReaderContext *, xmlParserCtxt *);
+static xmlDtd *__pyx_f_4lxml_5etree_18_FileReaderContext__readDtd(struct __pyx_obj_4lxml_5etree__FileReaderContext *);
+static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_obj_4lxml_5etree__FileReaderContext *, xmlParserCtxt *, int);
+static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_obj_4lxml_5etree__FileReaderContext *, char *, int);
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1143
+ * ############################################################
  * 
+ * cdef class _FeedParser(_BaseParser):             # <<<<<<<<<<<<<<
+ *     cdef bint _feed_parser_running
  * 
- * cdef class iterwalk:             # <<<<<<<<<<<<<<
- *     u"""iterwalk(self, element_or_tree, events=("end",), tag=None)
+ */
+
+struct __pyx_vtabstruct_4lxml_5etree__FeedParser {
+  struct __pyx_vtabstruct_4lxml_5etree__BaseParser __pyx_base;
+  PyObject *(*feed)(struct __pyx_obj_4lxml_5etree__FeedParser *, PyObject *, int __pyx_skip_dispatch);
+  PyObject *(*close)(struct __pyx_obj_4lxml_5etree__FeedParser *, int __pyx_skip_dispatch);
+};
+static struct __pyx_vtabstruct_4lxml_5etree__FeedParser *__pyx_vtabptr_4lxml_5etree__FeedParser;
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1359
+ *     )
+ * 
+ * cdef class XMLParser(_FeedParser):             # <<<<<<<<<<<<<<
+ *     u"""XMLParser(self, encoding=None, attribute_defaults=False, dtd_validation=False, load_dtd=False, no_network=True, ns_clean=False, recover=False, XMLSchema schema=None, remove_blank_text=False, resolve_entities=True, remove_comments=False, remove_pis=False, strip_cdata=True, target=None, compact=True)
  * 
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_iterwalk {
-  int (*_start_node)(struct __pyx_obj_4lxml_5etree_iterwalk *, struct LxmlElement *);
-  struct LxmlElement *(*_end_node)(struct __pyx_obj_4lxml_5etree_iterwalk *);
+struct __pyx_vtabstruct_4lxml_5etree_XMLParser {
+  struct __pyx_vtabstruct_4lxml_5etree__FeedParser __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree_iterwalk *__pyx_vtabptr_4lxml_5etree_iterwalk;
+static struct __pyx_vtabstruct_4lxml_5etree_XMLParser *__pyx_vtabptr_4lxml_5etree_XMLParser;
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1442
+ * 
+ * 
+ * cdef class XMLPullParser(XMLParser):             # <<<<<<<<<<<<<<
+ *     """XMLPullParser(self, events=None, *, tag=None, **kwargs)
+ * 
+ */
+
+struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser {
+  struct __pyx_vtabstruct_4lxml_5etree_XMLParser __pyx_base;
+};
+static struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *__pyx_vtabptr_4lxml_5etree_XMLPullParser;
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1471
+ * 
+ * 
+ * cdef class ETCompatXMLParser(XMLParser):             # <<<<<<<<<<<<<<
+ *     u"""ETCompatXMLParser(self, encoding=None, attribute_defaults=False, \
+ *                  dtd_validation=False, load_dtd=False, no_network=True, \
+ */
+
+struct __pyx_vtabstruct_4lxml_5etree_ETCompatXMLParser {
+  struct __pyx_vtabstruct_4lxml_5etree_XMLParser __pyx_base;
+};
+static struct __pyx_vtabstruct_4lxml_5etree_ETCompatXMLParser *__pyx_vtabptr_4lxml_5etree_ETCompatXMLParser;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1494
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1550
  *     )
  * 
  * cdef class HTMLParser(_FeedParser):             # <<<<<<<<<<<<<<
@@ -3600,7 +3601,7 @@ struct __pyx_vtabstruct_4lxml_5etree_HTMLParser {
 static struct __pyx_vtabstruct_4lxml_5etree_HTMLParser *__pyx_vtabptr_4lxml_5etree_HTMLParser;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1550
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1606
  * 
  * 
  * cdef class HTMLPullParser(HTMLParser):             # <<<<<<<<<<<<<<
@@ -3614,42 +3615,6 @@ struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser {
 static struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser *__pyx_vtabptr_4lxml_5etree_HTMLPullParser;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":257
- * @cython.final
- * @cython.internal
- * cdef class _TempStore:             # <<<<<<<<<<<<<<
- *     cdef list _storage
- *     def __init__(self):
- */
-
-struct __pyx_vtabstruct_4lxml_5etree__TempStore {
-  int (*add)(struct __pyx_obj_4lxml_5etree__TempStore *, PyObject *);
-  int (*clear)(struct __pyx_obj_4lxml_5etree__TempStore *);
-};
-static struct __pyx_vtabstruct_4lxml_5etree__TempStore *__pyx_vtabptr_4lxml_5etree__TempStore;
-static int __pyx_f_4lxml_5etree_10_TempStore_add(struct __pyx_obj_4lxml_5etree__TempStore *, PyObject *);
-static int __pyx_f_4lxml_5etree_10_TempStore_clear(struct __pyx_obj_4lxml_5etree__TempStore *);
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":369
- * @cython.final
- * @cython.internal
- * cdef class _FilelikeWriter:             # <<<<<<<<<<<<<<
- *     cdef object _filelike
- *     cdef object _close_filelike
- */
-
-struct __pyx_vtabstruct_4lxml_5etree__FilelikeWriter {
-  xmlOutputBuffer *(*_createOutputBuffer)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, xmlCharEncodingHandler *);
-  int (*write)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, char *, int);
-  int (*close)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *);
-};
-static struct __pyx_vtabstruct_4lxml_5etree__FilelikeWriter *__pyx_vtabptr_4lxml_5etree__FilelikeWriter;
-static xmlOutputBuffer *__pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuffer(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, xmlCharEncodingHandler *);
-static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, char *, int);
-static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5etree__FilelikeWriter *);
-
-
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":41
  * 
  * 
@@ -3669,6 +3634,22 @@ struct __pyx_vtabstruct_4lxml_5etree__SaxParserTarget {
 static struct __pyx_vtabstruct_4lxml_5etree__SaxParserTarget *__pyx_vtabptr_4lxml_5etree__SaxParserTarget;
 
 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":627
+ * ############################################################
+ * 
+ * cdef class TreeBuilder(_SaxParserTarget):             # <<<<<<<<<<<<<<
+ *     u"""TreeBuilder(self, element_factory=None, parser=None)
+ *     Parser target that builds a tree.
+ */
+
+struct __pyx_vtabstruct_4lxml_5etree_TreeBuilder {
+  struct __pyx_vtabstruct_4lxml_5etree__SaxParserTarget __pyx_base;
+  int (*_flush)(struct __pyx_obj_4lxml_5etree_TreeBuilder *);
+};
+static struct __pyx_vtabstruct_4lxml_5etree_TreeBuilder *__pyx_vtabptr_4lxml_5etree_TreeBuilder;
+static int __pyx_f_4lxml_5etree_11TreeBuilder__flush(struct __pyx_obj_4lxml_5etree_TreeBuilder *);
+
+
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parsertarget.pxi":15
  * @cython.final
  * @cython.internal
@@ -3682,119 +3663,210 @@ struct __pyx_vtabstruct_4lxml_5etree__PythonSaxParserTarget {
 };
 static struct __pyx_vtabstruct_4lxml_5etree__PythonSaxParserTarget *__pyx_vtabptr_4lxml_5etree__PythonSaxParserTarget;
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementTagMatcherType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2385
- * 
- * 
- * cdef public class _ElementTagMatcher [ object LxmlElementTagMatcher,             # <<<<<<<<<<<<<<
- *                                        type LxmlElementTagMatcherType ]:
- *     """
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":369
+ * @cython.final
+ * @cython.internal
+ * cdef class _FilelikeWriter:             # <<<<<<<<<<<<<<
+ *     cdef object _filelike
+ *     cdef object _close_filelike
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher {
-  PyObject *(*_initTagMatch)(struct LxmlElementTagMatcher *, PyObject *);
+struct __pyx_vtabstruct_4lxml_5etree__FilelikeWriter {
+  xmlOutputBuffer *(*_createOutputBuffer)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, xmlCharEncodingHandler *);
+  int (*write)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, char *, int);
+  int (*close)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher *__pyx_vtabptr_4lxml_5etree__ElementTagMatcher;
+static struct __pyx_vtabstruct_4lxml_5etree__FilelikeWriter *__pyx_vtabptr_4lxml_5etree__FilelikeWriter;
+static xmlOutputBuffer *__pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuffer(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, xmlCharEncodingHandler *);
+static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, char *, int);
+static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5etree__FilelikeWriter *);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":252
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":651
  * @cython.final
  * @cython.internal
- * cdef class _FileReaderContext:             # <<<<<<<<<<<<<<
- *     cdef object _filelike
- *     cdef object _encoding
+ * cdef class _IncrementalFileWriter:             # <<<<<<<<<<<<<<
+ *     cdef tree.xmlOutputBuffer* _c_out
+ *     cdef bytes _encoding
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__FileReaderContext {
-  PyObject *(*_close_file)(struct __pyx_obj_4lxml_5etree__FileReaderContext *);
-  xmlParserInputBuffer *(*_createParserInputBuffer)(struct __pyx_obj_4lxml_5etree__FileReaderContext *);
-  xmlParserInput *(*_createParserInput)(struct __pyx_obj_4lxml_5etree__FileReaderContext *, xmlParserCtxt *);
-  xmlDtd *(*_readDtd)(struct __pyx_obj_4lxml_5etree__FileReaderContext *);
-  xmlDoc *(*_readDoc)(struct __pyx_obj_4lxml_5etree__FileReaderContext *, xmlParserCtxt *, int);
-  int (*copyToBuffer)(struct __pyx_obj_4lxml_5etree__FileReaderContext *, char *, int);
+struct __pyx_vtabstruct_4lxml_5etree__IncrementalFileWriter {
+  PyObject *(*_write_qname)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *);
+  PyObject *(*_write_start_element)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
+  PyObject *(*_write_attributes_and_namespaces)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *, PyObject *);
+  PyObject *(*_write_attributes_list)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
+  PyObject *(*_write_end_element)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
+  PyObject *(*_find_prefix)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *, PyObject *);
+  PyObject *(*_collect_namespaces)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
+  PyObject *(*_close)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, int);
+  PyObject *(*_handle_error)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, int);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__FileReaderContext *__pyx_vtabptr_4lxml_5etree__FileReaderContext;
-static PyObject *__pyx_f_4lxml_5etree_18_FileReaderContext__close_file(struct __pyx_obj_4lxml_5etree__FileReaderContext *);
-static xmlParserInputBuffer *__pyx_f_4lxml_5etree_18_FileReaderContext__createParserInputBuffer(struct __pyx_obj_4lxml_5etree__FileReaderContext *);
-static xmlParserInput *__pyx_f_4lxml_5etree_18_FileReaderContext__createParserInput(struct __pyx_obj_4lxml_5etree__FileReaderContext *, xmlParserCtxt *);
-static xmlDtd *__pyx_f_4lxml_5etree_18_FileReaderContext__readDtd(struct __pyx_obj_4lxml_5etree__FileReaderContext *);
-static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_obj_4lxml_5etree__FileReaderContext *, xmlParserCtxt *, int);
-static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_obj_4lxml_5etree__FileReaderContext *, char *, int);
+static struct __pyx_vtabstruct_4lxml_5etree__IncrementalFileWriter *__pyx_vtabptr_4lxml_5etree__IncrementalFileWriter;
+static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *);
+static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_element(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
+static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_and_namespaces(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *, PyObject *);
+static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_list(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
+static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_element(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
+static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *, PyObject *);
+static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespaces(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *);
+static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, int);
+static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, int);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2623
- *         return current_node
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/iterparse.pxi":5
+ * DEF __ITERPARSE_CHUNK_SIZE = 32768
  * 
- * cdef class ElementChildIterator(_ElementMatchIterator):             # <<<<<<<<<<<<<<
- *     u"""ElementChildIterator(self, node, tag=None, reversed=False)
- *     Iterates over the children of an element.
+ * cdef class iterparse:             # <<<<<<<<<<<<<<
+ *     u"""iterparse(self, source, events=("end",), tag=None, \
+ *                   attribute_defaults=False, dtd_validation=False, \
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_ElementChildIterator {
-  struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree_iterparse {
+  PyObject *(*_close_source)(struct __pyx_obj_4lxml_5etree_iterparse *);
+  int (*_read_more_events)(struct __pyx_obj_4lxml_5etree_iterparse *, struct __pyx_obj_4lxml_5etree__SaxParserContext *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree_ElementChildIterator *__pyx_vtabptr_4lxml_5etree_ElementChildIterator;
+static struct __pyx_vtabstruct_4lxml_5etree_iterparse *__pyx_vtabptr_4lxml_5etree_iterparse;
+static PyObject *__pyx_f_4lxml_5etree_9iterparse__close_source(struct __pyx_obj_4lxml_5etree_iterparse *);
+static int __pyx_f_4lxml_5etree_9iterparse__read_more_events(struct __pyx_obj_4lxml_5etree_iterparse *, struct __pyx_obj_4lxml_5etree__SaxParserContext *);
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlElementIteratorType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2416
- *                 self._name = NULL
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/iterparse.pxi":203
+ * 
+ * 
+ * cdef class iterwalk:             # <<<<<<<<<<<<<<
+ *     u"""iterwalk(self, element_or_tree, events=("end",), tag=None)
  * 
- * cdef public class _ElementIterator(_ElementTagMatcher) [             # <<<<<<<<<<<<<<
- *     object LxmlElementIterator, type LxmlElementIteratorType ]:
- *     """
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ElementIterator {
-  struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher __pyx_base;
-  void (*_storeNext)(struct LxmlElementIterator *, struct LxmlElement *);
+struct __pyx_vtabstruct_4lxml_5etree_iterwalk {
+  int (*_start_node)(struct __pyx_obj_4lxml_5etree_iterwalk *, struct LxmlElement *);
+  struct LxmlElement *(*_end_node)(struct __pyx_obj_4lxml_5etree_iterwalk *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ElementIterator *__pyx_vtabptr_4lxml_5etree__ElementIterator;
+static struct __pyx_vtabstruct_4lxml_5etree_iterwalk *__pyx_vtabptr_4lxml_5etree_iterwalk;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/nsclasses.pxi":87
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlid.pxi":58
+ *     return (_elementTreeFactory(doc, None), _IDDict(doc))
+ * 
+ * cdef class _IDDict:             # <<<<<<<<<<<<<<
+ *     u"""IDDict(self, etree)
+ *     A dictionary-like proxy class that mapps ID attributes to elements.
+ */
+
+struct __pyx_vtabstruct_4lxml_5etree__IDDict {
+  PyObject *(*_build_keys)(struct __pyx_obj_4lxml_5etree__IDDict *);
+  PyObject *(*_build_items)(struct __pyx_obj_4lxml_5etree__IDDict *);
+};
+static struct __pyx_vtabstruct_4lxml_5etree__IDDict *__pyx_vtabptr_4lxml_5etree__IDDict;
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/extensions.pxi":456
  * @cython.final
  * @cython.internal
- * cdef class _ClassNamespaceRegistry(_NamespaceRegistry):             # <<<<<<<<<<<<<<
- *     u"Dictionary-like registry for namespace implementation classes"
- *     def __setitem__(self, name, item):
+ * cdef class _ExsltRegExp:             # <<<<<<<<<<<<<<
+ *     cdef dict _compile_map
+ *     def __cinit__(self):
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ClassNamespaceRegistry {
-  struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__ExsltRegExp {
+  PyObject *(*_make_string)(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, PyObject *);
+  PyObject *(*_compile)(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, PyObject *, PyObject *);
+  PyObject *(*_register_in_context)(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, struct __pyx_obj_4lxml_5etree__BaseContext *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ClassNamespaceRegistry *__pyx_vtabptr_4lxml_5etree__ClassNamespaceRegistry;
+static struct __pyx_vtabstruct_4lxml_5etree__ExsltRegExp *__pyx_vtabptr_4lxml_5etree__ExsltRegExp;
+static PyObject *__pyx_f_4lxml_5etree_12_ExsltRegExp__make_string(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, PyObject *);
+static PyObject *__pyx_f_4lxml_5etree_12_ExsltRegExp__compile(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, PyObject *, PyObject *);
+static PyObject *__pyx_f_4lxml_5etree_12_ExsltRegExp__register_in_context(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, struct __pyx_obj_4lxml_5etree__BaseContext *);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":698
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/extensions.pxi":32
  * 
+ * @cython.internal
+ * cdef class _BaseContext:             # <<<<<<<<<<<<<<
+ *     cdef xpath.xmlXPathContext* _xpathCtxt
+ *     cdef _Document _doc
+ */
+
+struct __pyx_vtabstruct_4lxml_5etree__BaseContext {
+  struct __pyx_obj_4lxml_5etree__BaseContext *(*_copy)(struct __pyx_obj_4lxml_5etree__BaseContext *);
+  PyObject *(*_to_utf)(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *);
+  void (*_set_xpath_context)(struct __pyx_obj_4lxml_5etree__BaseContext *, xmlXPathContext *);
+  PyObject *(*_register_context)(struct __pyx_obj_4lxml_5etree__BaseContext *, struct LxmlDocument *);
+  PyObject *(*_cleanup_context)(struct __pyx_obj_4lxml_5etree__BaseContext *);
+  PyObject *(*_release_context)(struct __pyx_obj_4lxml_5etree__BaseContext *);
+  PyObject *(*addNamespace)(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *, PyObject *);
+  PyObject *(*registerNamespace)(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *, PyObject *);
+  PyObject *(*registerLocalNamespaces)(struct __pyx_obj_4lxml_5etree__BaseContext *);
+  PyObject *(*registerGlobalNamespaces)(struct __pyx_obj_4lxml_5etree__BaseContext *);
+  PyObject *(*unregisterGlobalNamespaces)(struct __pyx_obj_4lxml_5etree__BaseContext *);
+  void (*_unregisterNamespace)(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *);
+  int (*_addLocalExtensionFunction)(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *, PyObject *, PyObject *);
+  PyObject *(*registerGlobalFunctions)(struct __pyx_obj_4lxml_5etree__BaseContext *, void *, __pyx_t_4lxml_5etree__register_function);
+  PyObject *(*registerLocalFunctions)(struct __pyx_obj_4lxml_5etree__BaseContext *, void *, __pyx_t_4lxml_5etree__register_function);
+  PyObject *(*unregisterAllFunctions)(struct __pyx_obj_4lxml_5etree__BaseContext *, void *, __pyx_t_4lxml_5etree__register_function);
+  PyObject *(*unregisterGlobalFunctions)(struct __pyx_obj_4lxml_5etree__BaseContext *, void *, __pyx_t_4lxml_5etree__register_function);
+  PyObject *(*_find_cached_function)(struct __pyx_obj_4lxml_5etree__BaseContext *, const xmlChar *, const xmlChar *);
+  PyObject *(*_release_temp_refs)(struct __pyx_obj_4lxml_5etree__BaseContext *);
+  PyObject *(*_hold)(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *);
+  struct LxmlDocument *(*_findDocumentForNode)(struct __pyx_obj_4lxml_5etree__BaseContext *, xmlNode *);
+};
+static struct __pyx_vtabstruct_4lxml_5etree__BaseContext *__pyx_vtabptr_4lxml_5etree__BaseContext;
+static PyObject *__pyx_f_4lxml_5etree_12_BaseContext__register_context(struct __pyx_obj_4lxml_5etree__BaseContext *, struct LxmlDocument *);
+static PyObject *__pyx_f_4lxml_5etree_12_BaseContext__cleanup_context(struct __pyx_obj_4lxml_5etree__BaseContext *);
+static PyObject *__pyx_f_4lxml_5etree_12_BaseContext__release_context(struct __pyx_obj_4lxml_5etree__BaseContext *);
+static PyObject *__pyx_f_4lxml_5etree_12_BaseContext__find_cached_function(struct __pyx_obj_4lxml_5etree__BaseContext *, const xmlChar *, const xmlChar *);
+static PyObject *__pyx_f_4lxml_5etree_12_BaseContext__release_temp_refs(struct __pyx_obj_4lxml_5etree__BaseContext *);
+static PyObject *__pyx_f_4lxml_5etree_12_BaseContext__hold(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *);
+static struct LxmlDocument *__pyx_f_4lxml_5etree_12_BaseContext__findDocumentForNode(struct __pyx_obj_4lxml_5etree__BaseContext *, xmlNode *);
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":52
  * @cython.final
- * cdef class _XSLTResultTree(_ElementTree):             # <<<<<<<<<<<<<<
- *     cdef XSLT _xslt
- *     cdef _Document _profile
+ * @cython.internal
+ * cdef class _XPathContext(_BaseContext):             # <<<<<<<<<<<<<<
+ *     cdef object _variables
+ *     def __init__(self, namespaces, extensions, error_log, enable_regexp, variables,
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__XSLTResultTree {
-  struct __pyx_vtabstruct_4lxml_5etree__ElementTree __pyx_base;
-  PyObject *(*_saveToStringAndSize)(struct __pyx_obj_4lxml_5etree__XSLTResultTree *, xmlChar **, int *);
+struct __pyx_vtabstruct_4lxml_5etree__XPathContext {
+  struct __pyx_vtabstruct_4lxml_5etree__BaseContext __pyx_base;
+  PyObject *(*set_context)(struct __pyx_obj_4lxml_5etree__XPathContext *, xmlXPathContext *);
+  PyObject *(*register_context)(struct __pyx_obj_4lxml_5etree__XPathContext *, struct LxmlDocument *);
+  PyObject *(*unregister_context)(struct __pyx_obj_4lxml_5etree__XPathContext *);
+  void (*registerExsltFunctions)(struct __pyx_obj_4lxml_5etree__XPathContext *);
+  PyObject *(*registerVariables)(struct __pyx_obj_4lxml_5etree__XPathContext *, PyObject *);
+  PyObject *(*registerVariable)(struct __pyx_obj_4lxml_5etree__XPathContext *, PyObject *, PyObject *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__XSLTResultTree *__pyx_vtabptr_4lxml_5etree__XSLTResultTree;
-static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(struct __pyx_obj_4lxml_5etree__XSLTResultTree *, xmlChar **, int *);
+static struct __pyx_vtabstruct_4lxml_5etree__XPathContext *__pyx_vtabptr_4lxml_5etree__XPathContext;
+static PyObject *__pyx_f_4lxml_5etree_13_XPathContext_set_context(struct __pyx_obj_4lxml_5etree__XPathContext *, xmlXPathContext *);
+static PyObject *__pyx_f_4lxml_5etree_13_XPathContext_register_context(struct __pyx_obj_4lxml_5etree__XPathContext *, struct LxmlDocument *);
+static PyObject *__pyx_f_4lxml_5etree_13_XPathContext_unregister_context(struct __pyx_obj_4lxml_5etree__XPathContext *);
+static void __pyx_f_4lxml_5etree_13_XPathContext_registerExsltFunctions(struct __pyx_obj_4lxml_5etree__XPathContext *);
+static PyObject *__pyx_f_4lxml_5etree_13_XPathContext_registerVariables(struct __pyx_obj_4lxml_5etree__XPathContext *, PyObject *);
+static PyObject *__pyx_f_4lxml_5etree_13_XPathContext_registerVariable(struct __pyx_obj_4lxml_5etree__XPathContext *, PyObject *, PyObject *);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":468
- * # read-only tree based class lookup
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":123
+ *     _XPATH_VERSION_WARNING_REQUIRED = 0
  * 
- * cdef class PythonElementClassLookup(FallbackElementClassLookup):             # <<<<<<<<<<<<<<
- *     u"""PythonElementClassLookup(self, fallback=None)
- *     Element class lookup based on a subclass method.
+ * cdef class _XPathEvaluatorBase:             # <<<<<<<<<<<<<<
+ *     cdef xpath.xmlXPathContext* _xpathCtxt
+ *     cdef _XPathContext _context
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_PythonElementClassLookup {
-  struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase {
+  PyObject *(*set_context)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *, xmlXPathContext *);
+  int (*_checkAbsolutePath)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *, char *);
+  int (*_lock)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *);
+  void (*_unlock)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *);
+  PyObject *(*_raise_parse_error)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *);
+  PyObject *(*_raise_eval_error)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *);
+  PyObject *(*_handle_result)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *, xmlXPathObject *, struct LxmlDocument *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree_PythonElementClassLookup *__pyx_vtabptr_4lxml_5etree_PythonElementClassLookup;
+static struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase *__pyx_vtabptr_4lxml_5etree__XPathEvaluatorBase;
+static int __pyx_f_4lxml_5etree_19_XPathEvaluatorBase__lock(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *);
+static void __pyx_f_4lxml_5etree_19_XPathEvaluatorBase__unlock(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *);
 
 
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":249
@@ -3825,165 +3897,116 @@ struct __pyx_vtabstruct_4lxml_5etree_XPathDocumentEvaluator {
 static struct __pyx_vtabstruct_4lxml_5etree_XPathDocumentEvaluator *__pyx_vtabptr_4lxml_5etree_XPathDocumentEvaluator;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1386
- * 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":405
  * 
- * cdef class XMLPullParser(XMLParser):             # <<<<<<<<<<<<<<
- *     """XMLPullParser(self, events=None, *, tag=None, **kwargs)
  * 
+ * cdef class XPath(_XPathEvaluatorBase):             # <<<<<<<<<<<<<<
+ *     u"""XPath(self, path, namespaces=None, extensions=None, regexp=True, smart_strings=True)
+ *     A compiled XPath expression that can be called on Elements and ElementTrees.
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser {
-  struct __pyx_vtabstruct_4lxml_5etree_XMLParser __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree_XPath {
+  struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *__pyx_vtabptr_4lxml_5etree_XMLPullParser;
+static struct __pyx_vtabstruct_4lxml_5etree_XPath *__pyx_vtabptr_4lxml_5etree_XPath;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":52
- * @cython.final
- * @cython.internal
- * cdef class _XPathContext(_BaseContext):             # <<<<<<<<<<<<<<
- *     cdef object _variables
- *     def __init__(self, namespaces, extensions, error_log, enable_regexp, variables,
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":481
+ * _find_namespaces = re.compile(b'({[^}]+})').findall
+ * 
+ * cdef class ETXPath(XPath):             # <<<<<<<<<<<<<<
+ *     u"""ETXPath(self, path, extensions=None, regexp=True, smart_strings=True)
+ *     Special XPath class that supports the ElementTree {uri} notation for namespaces.
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__XPathContext {
-  struct __pyx_vtabstruct_4lxml_5etree__BaseContext __pyx_base;
-  PyObject *(*set_context)(struct __pyx_obj_4lxml_5etree__XPathContext *, xmlXPathContext *);
-  PyObject *(*register_context)(struct __pyx_obj_4lxml_5etree__XPathContext *, struct LxmlDocument *);
-  PyObject *(*unregister_context)(struct __pyx_obj_4lxml_5etree__XPathContext *);
-  void (*registerExsltFunctions)(struct __pyx_obj_4lxml_5etree__XPathContext *);
-  PyObject *(*registerVariables)(struct __pyx_obj_4lxml_5etree__XPathContext *, PyObject *);
-  PyObject *(*registerVariable)(struct __pyx_obj_4lxml_5etree__XPathContext *, PyObject *, PyObject *);
+struct __pyx_vtabstruct_4lxml_5etree_ETXPath {
+  struct __pyx_vtabstruct_4lxml_5etree_XPath __pyx_base;
+  PyObject *(*_nsextract_path)(struct __pyx_obj_4lxml_5etree_ETXPath *, PyObject *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__XPathContext *__pyx_vtabptr_4lxml_5etree__XPathContext;
-static PyObject *__pyx_f_4lxml_5etree_13_XPathContext_set_context(struct __pyx_obj_4lxml_5etree__XPathContext *, xmlXPathContext *);
-static PyObject *__pyx_f_4lxml_5etree_13_XPathContext_register_context(struct __pyx_obj_4lxml_5etree__XPathContext *, struct LxmlDocument *);
-static PyObject *__pyx_f_4lxml_5etree_13_XPathContext_unregister_context(struct __pyx_obj_4lxml_5etree__XPathContext *);
-static void __pyx_f_4lxml_5etree_13_XPathContext_registerExsltFunctions(struct __pyx_obj_4lxml_5etree__XPathContext *);
-static PyObject *__pyx_f_4lxml_5etree_13_XPathContext_registerVariables(struct __pyx_obj_4lxml_5etree__XPathContext *, PyObject *);
-static PyObject *__pyx_f_4lxml_5etree_13_XPathContext_registerVariable(struct __pyx_obj_4lxml_5etree__XPathContext *, PyObject *, PyObject *);
+static struct __pyx_vtabstruct_4lxml_5etree_ETXPath *__pyx_vtabptr_4lxml_5etree_ETXPath;
 
-__PYX_EXTERN_C DL_EXPORT(PyTypeObject) LxmlDocumentType;
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":317
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":52
  * @cython.final
- * @cython.freelist(8)
- * cdef public class _Document [ type LxmlDocumentType, object LxmlDocument ]:             # <<<<<<<<<<<<<<
- *     u"""Internal base class to reference a libxml document.
- * 
+ * @cython.internal
+ * cdef class _XSLTResolverContext(_ResolverContext):             # <<<<<<<<<<<<<<
+ *     cdef xmlDoc* _c_style_doc
+ *     cdef _BaseParser _parser
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__Document {
-  PyObject *(*getroot)(struct LxmlDocument *);
-  int (*hasdoctype)(struct LxmlDocument *);
-  PyObject *(*getdoctype)(struct LxmlDocument *);
-  PyObject *(*getxmlinfo)(struct LxmlDocument *);
-  PyObject *(*isstandalone)(struct LxmlDocument *);
-  PyObject *(*buildNewPrefix)(struct LxmlDocument *);
-  xmlNs *(*_findOrBuildNodeNs)(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *, int);
-  int (*_setNodeNs)(struct LxmlDocument *, xmlNode *, const xmlChar *);
+struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext {
+  struct __pyx_vtabstruct_4lxml_5etree__ResolverContext __pyx_base;
+  struct __pyx_obj_4lxml_5etree__XSLTResolverContext *(*_copy)(struct __pyx_obj_4lxml_5etree__XSLTResolverContext *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__Document *__pyx_vtabptr_4lxml_5etree__Document;
-static PyObject *__pyx_f_4lxml_5etree_9_Document_getroot(struct LxmlDocument *);
-static int __pyx_f_4lxml_5etree_9_Document_hasdoctype(struct LxmlDocument *);
-static PyObject *__pyx_f_4lxml_5etree_9_Document_getdoctype(struct LxmlDocument *);
-static PyObject *__pyx_f_4lxml_5etree_9_Document_getxmlinfo(struct LxmlDocument *);
-static PyObject *__pyx_f_4lxml_5etree_9_Document_isstandalone(struct LxmlDocument *);
-static PyObject *__pyx_f_4lxml_5etree_9_Document_buildNewPrefix(struct LxmlDocument *);
-static xmlNs *__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *, int);
-static int __pyx_f_4lxml_5etree_9_Document__setNodeNs(struct LxmlDocument *, xmlNode *, const xmlChar *);
+static struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext *__pyx_vtabptr_4lxml_5etree__XSLTResolverContext;
+static struct __pyx_obj_4lxml_5etree__XSLTResolverContext *__pyx_f_4lxml_5etree_20_XSLTResolverContext__copy(struct __pyx_obj_4lxml_5etree__XSLTResolverContext *);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":439
- *         self._entries.append(entry)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":168
+ * # XSLT file/network access control
  * 
- * cdef class _DomainErrorLog(_ErrorLog):             # <<<<<<<<<<<<<<
- *     def __init__(self, domains):
- *         _ErrorLog.__init__(self)
- */
-
-struct __pyx_vtabstruct_4lxml_5etree__DomainErrorLog {
-  struct __pyx_vtabstruct_4lxml_5etree__ErrorLog __pyx_base;
-};
-static struct __pyx_vtabstruct_4lxml_5etree__DomainErrorLog *__pyx_vtabptr_4lxml_5etree__DomainErrorLog;
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":627
- * ############################################################
+ * cdef class XSLTAccessControl:             # <<<<<<<<<<<<<<
+ *     u"""XSLTAccessControl(self, read_file=True, write_file=True, create_dir=True, read_network=True, write_network=True)
  * 
- * cdef class TreeBuilder(_SaxParserTarget):             # <<<<<<<<<<<<<<
- *     u"""TreeBuilder(self, element_factory=None, parser=None)
- *     Parser target that builds a tree.
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_TreeBuilder {
-  struct __pyx_vtabstruct_4lxml_5etree__SaxParserTarget __pyx_base;
-  int (*_flush)(struct __pyx_obj_4lxml_5etree_TreeBuilder *);
+struct __pyx_vtabstruct_4lxml_5etree_XSLTAccessControl {
+  PyObject *(*_setAccess)(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltSecurityOption, int);
+  void (*_register_in_context)(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltTransformContext *);
+  PyObject *(*_optval)(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltSecurityOption);
 };
-static struct __pyx_vtabstruct_4lxml_5etree_TreeBuilder *__pyx_vtabptr_4lxml_5etree_TreeBuilder;
-static int __pyx_f_4lxml_5etree_11TreeBuilder__flush(struct __pyx_obj_4lxml_5etree_TreeBuilder *);
+static struct __pyx_vtabstruct_4lxml_5etree_XSLTAccessControl *__pyx_vtabptr_4lxml_5etree_XSLTAccessControl;
+static PyObject *__pyx_f_4lxml_5etree_17XSLTAccessControl__setAccess(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltSecurityOption, int);
+static void __pyx_f_4lxml_5etree_17XSLTAccessControl__register_in_context(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltTransformContext *);
+static PyObject *__pyx_f_4lxml_5etree_17XSLTAccessControl__optval(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltSecurityOption);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2453
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":271
  * @cython.final
  * @cython.internal
- * cdef class _MultiTagMatcher:             # <<<<<<<<<<<<<<
- *     """
- *     Match an xmlNode against a list of tags.
+ * cdef class _XSLTContext(_BaseContext):             # <<<<<<<<<<<<<<
+ *     cdef xslt.xsltTransformContext* _xsltCtxt
+ *     cdef _ReadOnlyElementProxy _extension_element_proxy
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__MultiTagMatcher {
-  int (*rejectsAll)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *);
-  int (*rejectsAllAttributes)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *);
-  int (*matchesType)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, int);
-  void (*_clear)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *);
-  PyObject *(*initTagMatch)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, PyObject *);
-  PyObject *(*_storeTags)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, PyObject *, PyObject *);
-  int (*cacheTags)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, struct LxmlDocument *, struct __pyx_opt_args_4lxml_5etree_16_MultiTagMatcher_cacheTags *__pyx_optional_args);
-  int (*matches)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlNode *);
-  int (*matchesNsTag)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, const xmlChar *, const xmlChar *);
-  int (*matchesAttribute)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlAttr *);
+struct __pyx_vtabstruct_4lxml_5etree__XSLTContext {
+  struct __pyx_vtabstruct_4lxml_5etree__BaseContext __pyx_base;
+  PyObject *(*register_context)(struct __pyx_obj_4lxml_5etree__XSLTContext *, xsltTransformContext *, struct LxmlDocument *);
+  PyObject *(*free_context)(struct __pyx_obj_4lxml_5etree__XSLTContext *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__MultiTagMatcher *__pyx_vtabptr_4lxml_5etree__MultiTagMatcher;
-static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAll(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *);
-static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAllAttributes(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *);
-static int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesType(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, int);
-static void __pyx_f_4lxml_5etree_16_MultiTagMatcher__clear(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *);
-static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, PyObject *);
-static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, PyObject *, PyObject *);
-static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, struct LxmlDocument *, struct __pyx_opt_args_4lxml_5etree_16_MultiTagMatcher_cacheTags *__pyx_optional_args);
-static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matches(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlNode *);
-static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, const xmlChar *, const xmlChar *);
-static CYTHON_INLINE int __pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesAttribute(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlAttr *);
+static struct __pyx_vtabstruct_4lxml_5etree__XSLTContext *__pyx_vtabptr_4lxml_5etree__XSLTContext;
+static PyObject *__pyx_f_4lxml_5etree_12_XSLTContext_register_context(struct __pyx_obj_4lxml_5etree__XSLTContext *, xsltTransformContext *, struct LxmlDocument *);
+static PyObject *__pyx_f_4lxml_5etree_12_XSLTContext_free_context(struct __pyx_obj_4lxml_5etree__XSLTContext *);
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xsltext.pxi":3
- * # XSLT extension elements
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":334
+ * 
+ * @cython.no_gc_clear
+ * cdef class XSLT:             # <<<<<<<<<<<<<<
+ *     u"""XSLT(self, xslt_input, extensions=None, regexp=True, access_control=None)
  * 
- * cdef class XSLTExtension:             # <<<<<<<<<<<<<<
- *     u"""Base class of an XSLT extension element.
- *     """
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_XSLTExtension {
-  PyObject *(*_collectXSLTResultContent)(struct __pyx_obj_4lxml_5etree_XSLTExtension *, struct __pyx_obj_4lxml_5etree__XSLTContext *, xmlNode *, int, int);
+struct __pyx_vtabstruct_4lxml_5etree_XSLT {
+  xmlDoc *(*_run_transform)(struct __pyx_obj_4lxml_5etree_XSLT *, xmlDoc *, const char **, struct __pyx_obj_4lxml_5etree__XSLTContext *, xsltTransformContext *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree_XSLTExtension *__pyx_vtabptr_4lxml_5etree_XSLTExtension;
+static struct __pyx_vtabstruct_4lxml_5etree_XSLT *__pyx_vtabptr_4lxml_5etree_XSLT;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/readonlytree.pxi":248
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":698
+ * 
  * @cython.final
- * @cython.internal
- * cdef class _ReadOnlyPIProxy(_ReadOnlyProxy):             # <<<<<<<<<<<<<<
- *     u"A read-only proxy for processing instructions (for internal use only!)"
- *     property target:
+ * cdef class _XSLTResultTree(_ElementTree):             # <<<<<<<<<<<<<<
+ *     cdef XSLT _xslt
+ *     cdef _Document _profile
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyPIProxy {
-  struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy __pyx_base;
+struct __pyx_vtabstruct_4lxml_5etree__XSLTResultTree {
+  struct __pyx_vtabstruct_4lxml_5etree__ElementTree __pyx_base;
+  PyObject *(*_saveToStringAndSize)(struct __pyx_obj_4lxml_5etree__XSLTResultTree *, xmlChar **, int *);
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyPIProxy *__pyx_vtabptr_4lxml_5etree__ReadOnlyPIProxy;
+static struct __pyx_vtabstruct_4lxml_5etree__XSLTResultTree *__pyx_vtabptr_4lxml_5etree__XSLTResultTree;
+static PyObject *__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize(struct __pyx_obj_4lxml_5etree__XSLTResultTree *, xmlChar **, int *);
 
 
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xslt.pxi":849
@@ -4000,77 +4023,52 @@ struct __pyx_vtabstruct_4lxml_5etree__XSLTProcessingInstruction {
 static struct __pyx_vtabstruct_4lxml_5etree__XSLTProcessingInstruction *__pyx_vtabptr_4lxml_5etree__XSLTProcessingInstruction;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":481
- * _find_namespaces = re.compile(b'({[^}]+})').findall
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xsltext.pxi":3
+ * # XSLT extension elements
  * 
- * cdef class ETXPath(XPath):             # <<<<<<<<<<<<<<
- *     u"""ETXPath(self, path, extensions=None, regexp=True, smart_strings=True)
- *     Special XPath class that supports the ElementTree {uri} notation for namespaces.
+ * cdef class XSLTExtension:             # <<<<<<<<<<<<<<
+ *     u"""Base class of an XSLT extension element.
+ *     """
  */
 
-struct __pyx_vtabstruct_4lxml_5etree_ETXPath {
-  struct __pyx_vtabstruct_4lxml_5etree_XPath __pyx_base;
-  PyObject *(*_nsextract_path)(struct __pyx_obj_4lxml_5etree_ETXPath *, PyObject *);
+struct __pyx_vtabstruct_4lxml_5etree_XSLTExtension {
+  PyObject *(*_collectXSLTResultContent)(struct __pyx_obj_4lxml_5etree_XSLTExtension *, struct __pyx_obj_4lxml_5etree__XSLTContext *, xmlNode *, int, int);
 };
-static struct __pyx_vtabstruct_4lxml_5etree_ETXPath *__pyx_vtabptr_4lxml_5etree_ETXPath;
+static struct __pyx_vtabstruct_4lxml_5etree_XSLTExtension *__pyx_vtabptr_4lxml_5etree_XSLTExtension;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/extensions.pxi":456
- * @cython.final
- * @cython.internal
- * cdef class _ExsltRegExp:             # <<<<<<<<<<<<<<
- *     cdef dict _compile_map
- *     def __cinit__(self):
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/dtd.pxi":267
+ * # DTD
+ * 
+ * cdef class DTD(_Validator):             # <<<<<<<<<<<<<<
+ *     u"""DTD(self, file=None, external_id=None)
+ *     A DTD validator.
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ExsltRegExp {
-  PyObject *(*_make_string)(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, PyObject *);
-  PyObject *(*_compile)(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, PyObject *, PyObject *);
-  PyObject *(*_register_in_context)(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, struct __pyx_obj_4lxml_5etree__BaseContext *);
+struct __pyx_vtabstruct_4lxml_5etree_DTD {
+  struct __pyx_vtabstruct_4lxml_5etree__Validator __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ExsltRegExp *__pyx_vtabptr_4lxml_5etree__ExsltRegExp;
-static PyObject *__pyx_f_4lxml_5etree_12_ExsltRegExp__make_string(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, PyObject *);
-static PyObject *__pyx_f_4lxml_5etree_12_ExsltRegExp__compile(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, PyObject *, PyObject *);
-static PyObject *__pyx_f_4lxml_5etree_12_ExsltRegExp__register_in_context(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, struct __pyx_obj_4lxml_5etree__BaseContext *);
+static struct __pyx_vtabstruct_4lxml_5etree_DTD *__pyx_vtabptr_4lxml_5etree_DTD;
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":42
- * @cython.final
- * @cython.internal
- * cdef class _ParserDictionaryContext:             # <<<<<<<<<<<<<<
- *     # Global parser context to share the string dictionary.
- *     #
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/relaxng.pxi":22
+ * # RelaxNG
+ * 
+ * cdef class RelaxNG(_Validator):             # <<<<<<<<<<<<<<
+ *     u"""RelaxNG(self, etree=None, file=None)
+ *     Turn a document into a Relax NG validator.
  */
 
-struct __pyx_vtabstruct_4lxml_5etree__ParserDictionaryContext {
-  void (*initMainParserContext)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
-  struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *(*_findThreadParserContext)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
-  void (*setDefaultParser)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__BaseParser *);
-  struct __pyx_obj_4lxml_5etree__BaseParser *(*getDefaultParser)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
-  xmlDict *(*_getThreadDict)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDict *);
-  void (*initThreadDictRef)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDict **);
-  void (*initParserDict)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlParserCtxt *);
-  void (*initXPathParserDict)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlXPathContext *);
-  void (*initDocDict)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDoc *);
-  struct __pyx_obj_4lxml_5etree__ParserContext *(*findImpliedContext)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
-  void (*pushImpliedContextFromParser)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__BaseParser *);
-  void (*pushImpliedContext)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__ParserContext *);
-  void (*popImpliedContext)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
+struct __pyx_vtabstruct_4lxml_5etree_RelaxNG {
+  struct __pyx_vtabstruct_4lxml_5etree__Validator __pyx_base;
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ParserDictionaryContext *__pyx_vtabptr_4lxml_5etree__ParserDictionaryContext;
-static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initMainParserContext(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
-static struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *__pyx_f_4lxml_5etree_24_ParserDictionaryContext__findThreadParserContext(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
-static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_setDefaultParser(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__BaseParser *);
-static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
-static xmlDict *__pyx_f_4lxml_5etree_24_ParserDictionaryContext__getThreadDict(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDict *);
-static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initThreadDictRef(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDict **);
-static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlParserCtxt *);
-static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initXPathParserDict(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlXPathContext *);
-static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDoc *);
-static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_24_ParserDictionaryContext_findImpliedContext(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
-static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContextFromParser(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__BaseParser *);
-static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContext(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__ParserContext *);
-static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_popImpliedContext(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *);
+static struct __pyx_vtabstruct_4lxml_5etree_RelaxNG *__pyx_vtabptr_4lxml_5etree_RelaxNG;
+
+
+struct __pyx_vtabstruct_4lxml_5etree_Schematron {
+  struct __pyx_vtabstruct_4lxml_5etree__Validator __pyx_base;
+};
+static struct __pyx_vtabstruct_4lxml_5etree_Schematron *__pyx_vtabptr_4lxml_5etree_Schematron;
 #ifndef CYTHON_REFNANNY
   #define CYTHON_REFNANNY 0
 #endif
@@ -4159,6 +4157,12 @@ static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[], \
     PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args, \
     const char* function_name); /*proto*/
 
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/
+#else
+#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
+#endif
+
 static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb); /*proto*/
 static CYTHON_INLINE void __Pyx_ErrFetch(PyObject **type, PyObject **value, PyObject **tb); /*proto*/
 
@@ -4169,7 +4173,7 @@ static PyObject* __Pyx_PyObject_CallMethodTuple(PyObject* obj, PyObject* method_
     if (unlikely(!args)) return NULL;
     method = __Pyx_PyObject_GetAttrStr(obj, method_name);
     if (unlikely(!method)) goto bad;
-    result = PyObject_Call(method, args, NULL);
+    result = __Pyx_PyObject_Call(method, args, NULL);
     Py_DECREF(method);
 bad:
     Py_DECREF(args);
@@ -4447,7 +4451,7 @@ static CYTHON_INLINE PyObject* __Pyx_dict_iterator(PyObject* dict, int is_dict,
 static CYTHON_INLINE int __Pyx_dict_iter_next(PyObject* dict_or_iter, Py_ssize_t orig_length, Py_ssize_t* ppos,
                                               PyObject** pkey, PyObject** pvalue, PyObject** pitem, int is_dict);
 
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON && (PY_VERSION_HEX >= 0x03020000 || PY_MAJOR_VERSION < 3 && PY_VERSION_HEX >= 0x02070000)
 static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name) {
     PyObject *res;
     PyTypeObject *tp = Py_TYPE(obj);
@@ -4469,7 +4473,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObj
     return res;
 }
 #else
-#define __Pyx_PyObject_LookupSpecial(o,n) PyObject_GetAttr(o,n)
+#define __Pyx_PyObject_LookupSpecial(o,n) __Pyx_PyObject_GetAttrStr(o,n)
 #endif
 
 static CYTHON_INLINE PyObject* __Pyx_PyDict_Values(PyObject* d); /*proto*/
@@ -4510,7 +4514,6 @@ static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);
     ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
 typedef struct {
     PyCFunctionObject func;
-    int flags;
     PyObject *func_dict;
     PyObject *func_weakreflist;
     PyObject *func_name;
@@ -4522,6 +4525,7 @@ typedef struct {
     PyObject *func_classobj; /* No-args super() class cell */
     void *defaults;
     int defaults_pyobjects;
+    int flags;
     PyObject *defaults_tuple;   /* Const defaults tuple */
     PyObject *defaults_kwdict;  /* Const kwonly defaults dict */
     PyObject *(*defaults_getter)(PyObject *);
@@ -4693,123 +4697,123 @@ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t); /*proto*/
 /* Module declarations from 'lxml.includes.schematron' */
 
 /* Module declarations from 'lxml.etree' */
-static PyTypeObject *__pyx_ptype_4lxml_5etree__BaseParser = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__FeedParser = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_XMLParser = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_ETCompatXMLParser = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__TempStore = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ExceptionContext = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__Document = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__Element = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__BaseParser = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_QName = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__LogEntry = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__BaseErrorLog = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ListErrorLog = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ErrorLogContext = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ErrorLog = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__DomainErrorLog = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__RotatingErrorLog = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_PyErrorLog = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_DocInfo = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree___ContentOnlyElement = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__Comment = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__ProcessingInstruction = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_PIBase = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__XSLTProcessingInstruction = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_XMLPullParser = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree___pyx_scope_struct__itervalues = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__NamespaceRegistry = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__FunctionNamespaceRegistry = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__XPathFunctionNamespaceRegistry = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__FileReaderContext = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__BaseErrorLog = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__Entity = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ElementTree = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__Attrib = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__AttribIterator = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__ElementTagMatcher = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_XSLT = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementClassLookup = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ResolverRegistry = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__SaxParserTarget = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_TreeBuilder = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__XPathEvaluatorBase = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_XPathElementEvaluator = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_XPathDocumentEvaluator = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree___pyx_scope_struct_1_iterattributes = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__Comment = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ElementIterator = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__MultiTagMatcher = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_XPath = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_ETXPath = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_FallbackElementClassLookup = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_CustomElementClassLookup = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__IncrementalFileWriter = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ElementMatchIterator = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementChildIterator = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_SiblingsIterator = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_AncestorsIterator = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementTextIterator = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_CDATA = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__ReadOnlyProxy = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ReadOnlyPIProxy = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ReadOnlyEntityProxy = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__ReadOnlyElementProxy = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__OpaqueNodeWrapper = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__OpaqueDocumentWrapper = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ModifyContentOnlyProxy = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ModifyContentOnlyPIProxy = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ModifyContentOnlyEntityProxy = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__AppendOnlyElementProxy = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementBase = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree_CommentBase = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__XSLTQuotedStringParam = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__BaseContext = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__XSLTContext = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__DTDElementDecl = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_XSLTExtension = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ExceptionContext = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_PIBase = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_EntityBase = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementClassLookup = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_FallbackElementClassLookup = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementDefaultClassLookup = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_AttributeBasedElementClassLookup = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_ParserBasedElementClassLookup = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_CustomElementClassLookup = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_PythonElementClassLookup = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__NamespaceRegistry = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ClassNamespaceRegistry = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementNamespaceClassLookup = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__FunctionNamespaceRegistry = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__XPathFunctionNamespaceRegistry = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__InputDocument = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_Resolver = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ResolverRegistry = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__ResolverContext = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__ParserContext = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__SaxParserContext = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__TargetParserContext = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_Resolver = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__XPathContext = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ParseEventsIterator = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__Entity = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_EntityBase = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__Document = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__InputDocument = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ElementTree = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ModifyContentOnlyProxy = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_ParserBasedElementClassLookup = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ParserSchemaValidationContext = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__Validator = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_RelaxNG = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__LogEntry = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_XMLSchema = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ParserDictionaryContext = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__FileReaderContext = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__FeedParser = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_XMLParser = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_XMLPullParser = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_ETCompatXMLParser = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_HTMLParser = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_HTMLPullParser = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__SaxParserTarget = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ParseEventsIterator = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_TreeBuilder = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__PythonSaxParserTarget = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_CDATA = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__FilelikeWriter = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree_xmlfile = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__DTDElementContentDecl = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ListErrorLog = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ErrorLog = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ReadOnlyPIProxy = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__XSLTResultTree = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementTextIterator = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ElementIterator = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementBase = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_PyErrorLog = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_DTD = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__IncrementalFileWriter = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__FileWriterElement = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree_iterparse = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree___pyx_scope_struct_2_iterelements = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__XSLTResolverContext = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ParserDictionaryContext = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree_iterwalk = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__DomainErrorLog = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_AttributeBasedElementClassLookup = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_DocInfo = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_XInclude = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__DTDAttributeDecl = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_XMLSchema = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ElementMatchIterator = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_AncestorsIterator = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_HTMLParser = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_HTMLPullParser = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__IDDict = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementNamespaceClassLookup = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__AppendOnlyElementProxy = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ModifyContentOnlyEntityProxy = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ReadOnlyEntityProxy = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__FileWriterElement = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__MemDebug = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__Attrib = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementDefaultClassLookup = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ElementUnicodeResult = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_XInclude = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__ExsltRegExp = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_QName = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree___pyx_scope_struct_3_iterentities = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__TempStore = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__OpaqueNodeWrapper = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__FilelikeWriter = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__OpaqueDocumentWrapper = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_Schematron = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ErrorLogContext = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__BaseContext = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__ElementUnicodeResult = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__XPathContext = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__XPathEvaluatorBase = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_XPathElementEvaluator = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_XPathDocumentEvaluator = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_XPath = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_ETXPath = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__XSLTResolverContext = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree_XSLTAccessControl = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_SiblingsIterator = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ModifyContentOnlyPIProxy = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ClassNamespaceRegistry = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__ParserSchemaValidationContext = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__XSLTContext = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__XSLTQuotedStringParam = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_XSLT = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__XSLTResultTree = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__XSLTProcessingInstruction = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_XSLTExtension = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__DTDElementContentDecl = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__DTDAttributeDecl = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__DTDElementDecl = 0;
 static PyTypeObject *__pyx_ptype_4lxml_5etree__DTDEntityDecl = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__AttribIterator = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_PythonElementClassLookup = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree_ElementChildIterator = 0;
-static PyTypeObject *__pyx_ptype_4lxml_5etree__RotatingErrorLog = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_DTD = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_RelaxNG = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree_Schematron = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree__MemDebug = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree___pyx_scope_struct__itervalues = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree___pyx_scope_struct_1_iterattributes = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree___pyx_scope_struct_2_iterelements = 0;
+static PyTypeObject *__pyx_ptype_4lxml_5etree___pyx_scope_struct_3_iterentities = 0;
 static PyObject *__pyx_v_4lxml_5etree__unicode = 0;
 static PyObject *__pyx_v_4lxml_5etree_os_path_abspath = 0;
 static PyObject *__pyx_v_4lxml_5etree_BytesIO = 0;
@@ -5029,6 +5033,7 @@ static void __pyx_f_4lxml_5etree__receiveParserError(void *, xmlError *); /*prot
 static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *, PyObject *, struct __pyx_obj_4lxml_5etree__ErrorLog *); /*proto*/
 static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5etree__ParserContext *, xmlParserCtxt *, xmlDoc *, PyObject *, int, int); /*proto*/
 static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *, xmlDoc *); /*proto*/
+static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *, xmlDoc *, xmlNode *); /*proto*/
 static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *, xmlNode *); /*proto*/
 static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *, const char *, int, const char *, const char *, int); /*proto*/
 static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *, PyObject *, struct __pyx_obj_4lxml_5etree__BaseParser *); /*proto*/
@@ -5741,123 +5746,123 @@ static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_2blocks_used(CYTHON_UNUSED str
 static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_4dict_size(CYTHON_UNUSED struct __pyx_obj_4lxml_5etree__MemDebug *__pyx_v_self); /* proto */
 static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_6dump(CYTHON_UNUSED struct __pyx_obj_4lxml_5etree__MemDebug *__pyx_v_self, PyObject *__pyx_v_output_file, PyObject *__pyx_v_byte_count); /* proto */
 static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_8show(CYTHON_UNUSED struct __pyx_obj_4lxml_5etree__MemDebug *__pyx_v_self, PyObject *__pyx_v_output_file, PyObject *__pyx_v_block_count); /* proto */
-static PyObject *__pyx_tp_new_4lxml_5etree__BaseParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__FeedParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_XMLParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_ETCompatXMLParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__TempStore(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ExceptionContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__Document(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__Element(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__BaseParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_QName(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__LogEntry(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__BaseErrorLog(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ListErrorLog(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ErrorLogContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ErrorLog(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__DomainErrorLog(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__RotatingErrorLog(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_PyErrorLog(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_DocInfo(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree___ContentOnlyElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__Comment(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__ProcessingInstruction(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_PIBase(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__XSLTProcessingInstruction(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_XMLPullParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct__itervalues(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__NamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__FunctionNamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__XPathFunctionNamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__FileReaderContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__BaseErrorLog(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__Entity(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ElementTree(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__Attrib(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__AttribIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__ElementTagMatcher(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_XSLT(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementDepthFirstIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ResolverRegistry(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__SaxParserTarget(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_TreeBuilder(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__XPathEvaluatorBase(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_XPathElementEvaluator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_XPathDocumentEvaluator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct_1_iterattributes(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__Comment(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ElementIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__MultiTagMatcher(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_XPath(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_ETXPath(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_CustomElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__IncrementalFileWriter(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ElementMatchIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementChildIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_SiblingsIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_AncestorsIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementDepthFirstIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementTextIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_CDATA(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__ReadOnlyProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ReadOnlyPIProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ReadOnlyEntityProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__ReadOnlyElementProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__OpaqueNodeWrapper(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__OpaqueDocumentWrapper(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ModifyContentOnlyProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ModifyContentOnlyPIProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ModifyContentOnlyEntityProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__AppendOnlyElementProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementBase(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree_CommentBase(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__XSLTQuotedStringParam(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__BaseContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__XSLTContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__DTDElementDecl(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_XSLTExtension(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ExceptionContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_PIBase(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_EntityBase(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementDefaultClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_AttributeBasedElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_ParserBasedElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_CustomElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_PythonElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__NamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ClassNamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementNamespaceClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__FunctionNamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__XPathFunctionNamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__InputDocument(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_Resolver(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ResolverRegistry(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__ResolverContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__ParserContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__SaxParserContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__TargetParserContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_Resolver(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__XPathContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ParseEventsIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__Entity(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_EntityBase(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__Document(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__InputDocument(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ElementTree(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ModifyContentOnlyProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_ParserBasedElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ParserSchemaValidationContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__Validator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_RelaxNG(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__LogEntry(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_XMLSchema(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ParserDictionaryContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__FileReaderContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__FeedParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_XMLParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_XMLPullParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_ETCompatXMLParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_HTMLParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_HTMLPullParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__SaxParserTarget(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ParseEventsIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_TreeBuilder(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__PythonSaxParserTarget(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_CDATA(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__FilelikeWriter(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree_xmlfile(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__DTDElementContentDecl(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ListErrorLog(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ErrorLog(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ReadOnlyPIProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__XSLTResultTree(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementTextIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ElementIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementBase(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_PyErrorLog(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_DTD(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__IncrementalFileWriter(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__FileWriterElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree_iterparse(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct_2_iterelements(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__XSLTResolverContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ParserDictionaryContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree_iterwalk(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__DomainErrorLog(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_AttributeBasedElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_DocInfo(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_XInclude(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__DTDAttributeDecl(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_XMLSchema(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ElementMatchIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_AncestorsIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_HTMLParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_HTMLPullParser(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__IDDict(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementNamespaceClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__AppendOnlyElementProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ModifyContentOnlyEntityProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ReadOnlyEntityProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__FileWriterElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__MemDebug(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__Attrib(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementDefaultClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ElementUnicodeResult(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_XInclude(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__ExsltRegExp(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_QName(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct_3_iterentities(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__TempStore(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__OpaqueNodeWrapper(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__FilelikeWriter(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__OpaqueDocumentWrapper(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_Schematron(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ErrorLogContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__BaseContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__ElementUnicodeResult(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__XPathContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__XPathEvaluatorBase(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_XPathElementEvaluator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_XPathDocumentEvaluator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_XPath(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_ETXPath(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__XSLTResolverContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree_XSLTAccessControl(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_SiblingsIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ModifyContentOnlyPIProxy(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ClassNamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__ParserSchemaValidationContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__XSLTContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__XSLTQuotedStringParam(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_XSLT(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__XSLTResultTree(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__XSLTProcessingInstruction(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_XSLTExtension(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__DTDElementContentDecl(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__DTDAttributeDecl(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__DTDElementDecl(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_5etree__DTDEntityDecl(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__AttribIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_PythonElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementChildIterator(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_5etree__RotatingErrorLog(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_DTD(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_RelaxNG(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree_Schematron(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree__MemDebug(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct__itervalues(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct_1_iterattributes(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct_2_iterelements(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct_3_iterentities(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static char __pyx_k_A[] = "A";
 static char __pyx_k_B[] = "B";
 static char __pyx_k_U[] = "U";
@@ -6284,6 +6289,7 @@ static char __pyx_k_encoding_2[] = "' encoding='";
 static char __pyx_k_extensions[] = "extensions";
 static char __pyx_k_fromstring[] = "fromstring";
 static char __pyx_k_getargspec[] = "getargspec";
+static char __pyx_k_has_raised[] = "has_raised";
 static char __pyx_k_input_node[] = "input_node";
 static char __pyx_k_itervalues[] = "itervalues";
 static char __pyx_k_last_error[] = "last_error";
@@ -6427,6 +6433,7 @@ static char __pyx_k_invalid_element[] = "invalid element";
 static char __pyx_k_memory_debugger[] = "memory_debugger";
 static char __pyx_k_no_context_node[] = "no context node";
 static char __pyx_k_remove_comments[] = "remove_comments";
+static char __pyx_k_store_exception[] = "store_exception";
 static char __pyx_k_tree_or_element[] = "tree_or_element";
 static char __pyx_k_unknown_error_d[] = "unknown error %d";
 static char __pyx_k_xml_declaration[] = "xml_declaration";
@@ -7365,6 +7372,7 @@ static PyObject *__pyx_kp_s_got_invalid_input_value_of_type;
 static PyObject *__pyx_n_s_group;
 static PyObject *__pyx_n_s_groups;
 static PyObject *__pyx_n_s_gzip;
+static PyObject *__pyx_n_s_has_raised;
 static PyObject *__pyx_kp_s_home_stefan_source_Python_lxml;
 static PyObject *__pyx_kp_s_home_stefan_source_Python_lxml_10;
 static PyObject *__pyx_kp_s_home_stefan_source_Python_lxml_11;
@@ -7629,6 +7637,7 @@ static PyObject *__pyx_n_s_startswith;
 static PyObject *__pyx_n_s_staticmethod;
 static PyObject *__pyx_n_s_stdout;
 static PyObject *__pyx_n_s_stop;
+static PyObject *__pyx_n_s_store_exception;
 static PyObject *__pyx_n_s_str;
 static PyObject *__pyx_kp_u_string;
 static PyObject *__pyx_n_s_string_2;
@@ -8034,7 +8043,7 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
   __Pyx_INCREF(__pyx_v_prefix_utf);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_prefix_utf);
   __Pyx_GIVEREF(__pyx_v_prefix_utf);
-  __pyx_t_1 = PyObject_Call(__pyx_v_4lxml_5etree__check_internal_prefix, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree__check_internal_prefix, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -8048,7 +8057,7 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
  *     _tagValidOrRaise(prefix_utf)
  *     _uriValidOrRaise(uri_utf)
  */
-    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -8091,7 +8100,7 @@ static PyObject *__pyx_pf_4lxml_5etree_register_namespace(CYTHON_UNUSED PyObject
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0;
@@ -8354,7 +8363,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9LxmlError___init__(CYTHON_UNUSED PyObjec
     __Pyx_INCREF(__pyx_v_self);
     PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self);
     __Pyx_GIVEREF(__pyx_v_self);
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -8365,7 +8374,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9LxmlError___init__(CYTHON_UNUSED PyObjec
     __Pyx_INCREF(__pyx_v_message);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_message);
     __Pyx_GIVEREF(__pyx_v_message);
-    __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -8389,7 +8398,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9LxmlError___init__(CYTHON_UNUSED PyObjec
     __Pyx_INCREF(__pyx_v_message);
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_message);
     __Pyx_GIVEREF(__pyx_v_message);
-    __pyx_t_3 = PyObject_Call(__pyx_v_4lxml_5etree_error_super_init, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_error_super_init, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -8431,7 +8440,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9LxmlError___init__(CYTHON_UNUSED PyObjec
  */
     __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_error_log, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__Pyx_PyObject_SetAttrStr(__pyx_v_self, __pyx_n_s_error_log, __pyx_t_4) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -8517,19 +8526,19 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_version, __pyx_n_s_decode); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_replace); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = PyList_New(1 * 4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -8654,7 +8663,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
  */
         __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_startswith); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
         __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = PyObject_Call(__pyx_t_11, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_13 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 215; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
@@ -8694,7 +8703,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
  */
         __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_startswith); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
         __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_11 = PyObject_Call(__pyx_t_12, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
         __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_13 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
@@ -8734,7 +8743,7 @@ static PyObject *__pyx_f_4lxml_5etree___unpackDottedVersion(PyObject *__pyx_v_ve
  */
         __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_startswith); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
         __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = PyObject_Call(__pyx_t_11, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         __pyx_t_13 = __Pyx_PyObject_IsTrue(__pyx_t_12); if (unlikely(__pyx_t_13 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
@@ -9225,7 +9234,7 @@ static void __pyx_f_4lxml_5etree_17_ExceptionContext__store_raised(struct __pyx_
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_exc_info); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_2);
@@ -9748,7 +9757,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_hasProxy(xmlNode *__pyx_v_c_node)
 
 static int __pyx_f_4lxml_5etree__isProxyAliveInPypy(xmlNode *__pyx_v_c_node) {
   int __pyx_v_retval;
-  PyObject *__pyx_v_obj_ptr;
+  PyObject *__pyx_v_weakref_ptr;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -9773,7 +9782,7 @@ static int __pyx_f_4lxml_5etree__isProxyAliveInPypy(xmlNode *__pyx_v_c_node) {
  *     retval = True
  *     if python.PyWeakref_LockObject(<python.PyObject*>c_node._private) is None:             # <<<<<<<<<<<<<<
  *         # proxy has already died => remove weak reference
- *         obj_ptr = <python.PyObject*>c_node._private
+ *         weakref_ptr = <python.PyObject*>c_node._private
  */
   __pyx_t_1 = PyWeakref_LockObject(((PyObject *)__pyx_v_c_node->_private)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
@@ -9785,33 +9794,33 @@ static int __pyx_f_4lxml_5etree__isProxyAliveInPypy(xmlNode *__pyx_v_c_node) {
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":37
  *     if python.PyWeakref_LockObject(<python.PyObject*>c_node._private) is None:
  *         # proxy has already died => remove weak reference
- *         obj_ptr = <python.PyObject*>c_node._private             # <<<<<<<<<<<<<<
+ *         weakref_ptr = <python.PyObject*>c_node._private             # <<<<<<<<<<<<<<
  *         c_node._private = NULL
- *         python.Py_XDECREF(obj_ptr)
+ *         python.Py_XDECREF(weakref_ptr)
  */
-    __pyx_v_obj_ptr = ((PyObject *)__pyx_v_c_node->_private);
+    __pyx_v_weakref_ptr = ((PyObject *)__pyx_v_c_node->_private);
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":38
  *         # proxy has already died => remove weak reference
- *         obj_ptr = <python.PyObject*>c_node._private
+ *         weakref_ptr = <python.PyObject*>c_node._private
  *         c_node._private = NULL             # <<<<<<<<<<<<<<
- *         python.Py_XDECREF(obj_ptr)
+ *         python.Py_XDECREF(weakref_ptr)
  *         retval = False
  */
     __pyx_v_c_node->_private = NULL;
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":39
- *         obj_ptr = <python.PyObject*>c_node._private
+ *         weakref_ptr = <python.PyObject*>c_node._private
  *         c_node._private = NULL
- *         python.Py_XDECREF(obj_ptr)             # <<<<<<<<<<<<<<
+ *         python.Py_XDECREF(weakref_ptr)             # <<<<<<<<<<<<<<
  *         retval = False
  *     return retval
  */
-    Py_XDECREF(__pyx_v_obj_ptr);
+    Py_XDECREF(__pyx_v_weakref_ptr);
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":40
  *         c_node._private = NULL
- *         python.Py_XDECREF(obj_ptr)
+ *         python.Py_XDECREF(weakref_ptr)
  *         retval = False             # <<<<<<<<<<<<<<
  *     return retval
  * 
@@ -9822,7 +9831,7 @@ static int __pyx_f_4lxml_5etree__isProxyAliveInPypy(xmlNode *__pyx_v_c_node) {
   __pyx_L3:;
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":41
- *         python.Py_XDECREF(obj_ptr)
+ *         python.Py_XDECREF(weakref_ptr)
  *         retval = False
  *     return retval             # <<<<<<<<<<<<<<
  * 
@@ -9861,6 +9870,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__registerProxy(struct LxmlElement
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
+  PyObject *__pyx_t_2;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -9909,7 +9919,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__registerProxy(struct LxmlElement
  *     proxy._c_node = c_node
  *     if python.IS_PYPY:             # <<<<<<<<<<<<<<
  *         c_node._private = <void*>python.PyWeakref_NewRef(proxy, NULL)
- *         if c_node._private is NULL:
+ *     else:
  */
   __pyx_t_1 = (IS_PYPY != 0);
   if (__pyx_t_1) {
@@ -9918,37 +9928,17 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__registerProxy(struct LxmlElement
  *     proxy._c_node = c_node
  *     if python.IS_PYPY:
  *         c_node._private = <void*>python.PyWeakref_NewRef(proxy, NULL)             # <<<<<<<<<<<<<<
- *         if c_node._private is NULL:
- *             return -1 # manual exception propagation
- */
-    __pyx_v_c_node->_private = ((void *)PyWeakref_NewRef(((PyObject *)__pyx_v_proxy), NULL));
-
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":53
- *     if python.IS_PYPY:
- *         c_node._private = <void*>python.PyWeakref_NewRef(proxy, NULL)
- *         if c_node._private is NULL:             # <<<<<<<<<<<<<<
- *             return -1 # manual exception propagation
- *     else:
- */
-    __pyx_t_1 = ((__pyx_v_c_node->_private == NULL) != 0);
-    if (__pyx_t_1) {
-
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":54
- *         c_node._private = <void*>python.PyWeakref_NewRef(proxy, NULL)
- *         if c_node._private is NULL:
- *             return -1 # manual exception propagation             # <<<<<<<<<<<<<<
  *     else:
  *         c_node._private = <void*>proxy
  */
-      __pyx_r = -1;
-      goto __pyx_L0;
-    }
+    __pyx_t_2 = PyWeakref_NewRef(((PyObject *)__pyx_v_proxy), NULL); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_v_c_node->_private = ((void *)__pyx_t_2);
     goto __pyx_L3;
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":56
- *             return -1 # manual exception propagation
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":54
+ *         c_node._private = <void*>python.PyWeakref_NewRef(proxy, NULL)
  *     else:
  *         c_node._private = <void*>proxy             # <<<<<<<<<<<<<<
  *     return 0
@@ -9958,7 +9948,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__registerProxy(struct LxmlElement
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":57
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":55
  *     else:
  *         c_node._private = <void*>proxy
  *     return 0             # <<<<<<<<<<<<<<
@@ -9985,7 +9975,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__registerProxy(struct LxmlElement
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":59
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":57
  *     return 0
  * 
  * cdef inline int _unregisterProxy(_Element proxy) except -1:             # <<<<<<<<<<<<<<
@@ -9995,7 +9985,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__registerProxy(struct LxmlElement
 
 static CYTHON_INLINE int __pyx_f_4lxml_5etree__unregisterProxy(struct LxmlElement *__pyx_v_proxy) {
   xmlNode *__pyx_v_c_node;
-  PyObject *__pyx_v_obj_ptr;
+  PyObject *__pyx_v_weakref_ptr;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   xmlNode *__pyx_t_1;
@@ -10005,58 +9995,58 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__unregisterProxy(struct LxmlElemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_unregisterProxy", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":63
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":60
+ *     u"""Unregister a proxy for the node it's proxying for.
  *     """
- *     cdef xmlNode* c_node
- *     c_node = proxy._c_node             # <<<<<<<<<<<<<<
+ *     cdef xmlNode* c_node = proxy._c_node             # <<<<<<<<<<<<<<
  *     if python.IS_PYPY:
- *         obj_ptr = <python.PyObject*>c_node._private
+ *         weakref_ptr = <python.PyObject*>c_node._private
  */
   __pyx_t_1 = __pyx_v_proxy->_c_node;
   __pyx_v_c_node = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":64
- *     cdef xmlNode* c_node
- *     c_node = proxy._c_node
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":61
+ *     """
+ *     cdef xmlNode* c_node = proxy._c_node
  *     if python.IS_PYPY:             # <<<<<<<<<<<<<<
- *         obj_ptr = <python.PyObject*>c_node._private
+ *         weakref_ptr = <python.PyObject*>c_node._private
  *         c_node._private = NULL
  */
   __pyx_t_2 = (IS_PYPY != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":65
- *     c_node = proxy._c_node
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":62
+ *     cdef xmlNode* c_node = proxy._c_node
  *     if python.IS_PYPY:
- *         obj_ptr = <python.PyObject*>c_node._private             # <<<<<<<<<<<<<<
+ *         weakref_ptr = <python.PyObject*>c_node._private             # <<<<<<<<<<<<<<
  *         c_node._private = NULL
- *         python.Py_XDECREF(obj_ptr)
+ *         python.Py_XDECREF(weakref_ptr)
  */
-    __pyx_v_obj_ptr = ((PyObject *)__pyx_v_c_node->_private);
+    __pyx_v_weakref_ptr = ((PyObject *)__pyx_v_c_node->_private);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":66
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":63
  *     if python.IS_PYPY:
- *         obj_ptr = <python.PyObject*>c_node._private
+ *         weakref_ptr = <python.PyObject*>c_node._private
  *         c_node._private = NULL             # <<<<<<<<<<<<<<
- *         python.Py_XDECREF(obj_ptr)
+ *         python.Py_XDECREF(weakref_ptr)
  *     else:
  */
     __pyx_v_c_node->_private = NULL;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":67
- *         obj_ptr = <python.PyObject*>c_node._private
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":64
+ *         weakref_ptr = <python.PyObject*>c_node._private
  *         c_node._private = NULL
- *         python.Py_XDECREF(obj_ptr)             # <<<<<<<<<<<<<<
+ *         python.Py_XDECREF(weakref_ptr)             # <<<<<<<<<<<<<<
  *     else:
  *         assert c_node._private is <void*>proxy, u"Tried to unregister unknown proxy"
  */
-    Py_XDECREF(__pyx_v_obj_ptr);
+    Py_XDECREF(__pyx_v_weakref_ptr);
     goto __pyx_L3;
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":69
- *         python.Py_XDECREF(obj_ptr)
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":66
+ *         python.Py_XDECREF(weakref_ptr)
  *     else:
  *         assert c_node._private is <void*>proxy, u"Tried to unregister unknown proxy"             # <<<<<<<<<<<<<<
  *         c_node._private = NULL
@@ -10066,12 +10056,12 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__unregisterProxy(struct LxmlElemen
     if (unlikely(!Py_OptimizeFlag)) {
       if (unlikely(!((__pyx_v_c_node->_private == ((void *)__pyx_v_proxy)) != 0))) {
         PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Tried_to_unregister_unknown_prox);
-        {__pyx_filename = __pyx_f[3]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[3]; __pyx_lineno = 66; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
     }
     #endif
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":70
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":67
  *     else:
  *         assert c_node._private is <void*>proxy, u"Tried to unregister unknown proxy"
  *         c_node._private = NULL             # <<<<<<<<<<<<<<
@@ -10082,7 +10072,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__unregisterProxy(struct LxmlElemen
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":71
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":68
  *         assert c_node._private is <void*>proxy, u"Tried to unregister unknown proxy"
  *         c_node._private = NULL
  *     return 0             # <<<<<<<<<<<<<<
@@ -10092,7 +10082,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__unregisterProxy(struct LxmlElemen
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":59
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":57
  *     return 0
  * 
  * cdef inline int _unregisterProxy(_Element proxy) except -1:             # <<<<<<<<<<<<<<
@@ -10109,7 +10099,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__unregisterProxy(struct LxmlElemen
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":76
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":73
  * # temporarily make a node the root node of its document
  * 
  * cdef xmlDoc* _fakeRootDoc(xmlDoc* c_base_doc, xmlNode* c_node) except NULL:             # <<<<<<<<<<<<<<
@@ -10126,18 +10116,18 @@ static xmlDoc *__pyx_f_4lxml_5etree__fakeRootDoc(xmlDoc *__pyx_v_c_base_doc, xml
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_fakeRootDoc", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":77
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":74
  * 
  * cdef xmlDoc* _fakeRootDoc(xmlDoc* c_base_doc, xmlNode* c_node) except NULL:
  *     return _plainFakeRootDoc(c_base_doc, c_node, 1)             # <<<<<<<<<<<<<<
  * 
  * cdef xmlDoc* _plainFakeRootDoc(xmlDoc* c_base_doc, xmlNode* c_node,
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__plainFakeRootDoc(__pyx_v_c_base_doc, __pyx_v_c_node, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_4lxml_5etree__plainFakeRootDoc(__pyx_v_c_base_doc, __pyx_v_c_node, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":76
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":73
  * # temporarily make a node the root node of its document
  * 
  * cdef xmlDoc* _fakeRootDoc(xmlDoc* c_base_doc, xmlNode* c_node) except NULL:             # <<<<<<<<<<<<<<
@@ -10154,7 +10144,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__fakeRootDoc(xmlDoc *__pyx_v_c_base_doc, xml
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":79
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":76
  *     return _plainFakeRootDoc(c_base_doc, c_node, 1)
  * 
  * cdef xmlDoc* _plainFakeRootDoc(xmlDoc* c_base_doc, xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -10179,7 +10169,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_plainFakeRootDoc", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":88
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":85
  *     cdef xmlNode* c_new_root
  *     cdef xmlDoc*  c_doc
  *     if with_siblings or (c_node.prev is NULL and c_node.next is NULL):             # <<<<<<<<<<<<<<
@@ -10200,7 +10190,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
   }
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":89
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":86
  *     cdef xmlDoc*  c_doc
  *     if with_siblings or (c_node.prev is NULL and c_node.next is NULL):
  *         c_root = tree.xmlDocGetRootElement(c_base_doc)             # <<<<<<<<<<<<<<
@@ -10209,7 +10199,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
  */
     __pyx_v_c_root = xmlDocGetRootElement(__pyx_v_c_base_doc);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":90
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":87
  *     if with_siblings or (c_node.prev is NULL and c_node.next is NULL):
  *         c_root = tree.xmlDocGetRootElement(c_base_doc)
  *         if c_root is c_node:             # <<<<<<<<<<<<<<
@@ -10219,7 +10209,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
     __pyx_t_1 = ((__pyx_v_c_root == __pyx_v_c_node) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":92
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":89
  *         if c_root is c_node:
  *             # already the root node, no siblings
  *             return c_base_doc             # <<<<<<<<<<<<<<
@@ -10233,17 +10223,17 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":94
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":91
  *             return c_base_doc
  * 
  *     c_doc  = _copyDoc(c_base_doc, 0)                   # non recursive!             # <<<<<<<<<<<<<<
  *     c_new_root = tree.xmlDocCopyNode(c_node, c_doc, 2) # non recursive!
  *     tree.xmlDocSetRootElement(c_doc, c_new_root)
  */
-  __pyx_t_4 = __pyx_f_4lxml_5etree__copyDoc(__pyx_v_c_base_doc, 0); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_4lxml_5etree__copyDoc(__pyx_v_c_base_doc, 0); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_c_doc = __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":95
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":92
  * 
  *     c_doc  = _copyDoc(c_base_doc, 0)                   # non recursive!
  *     c_new_root = tree.xmlDocCopyNode(c_node, c_doc, 2) # non recursive!             # <<<<<<<<<<<<<<
@@ -10252,7 +10242,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
  */
   __pyx_v_c_new_root = xmlDocCopyNode(__pyx_v_c_node, __pyx_v_c_doc, 2);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":96
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":93
  *     c_doc  = _copyDoc(c_base_doc, 0)                   # non recursive!
  *     c_new_root = tree.xmlDocCopyNode(c_node, c_doc, 2) # non recursive!
  *     tree.xmlDocSetRootElement(c_doc, c_new_root)             # <<<<<<<<<<<<<<
@@ -10261,7 +10251,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
  */
   xmlDocSetRootElement(__pyx_v_c_doc, __pyx_v_c_new_root);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":97
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":94
  *     c_new_root = tree.xmlDocCopyNode(c_node, c_doc, 2) # non recursive!
  *     tree.xmlDocSetRootElement(c_doc, c_new_root)
  *     _copyParentNamespaces(c_node, c_new_root)             # <<<<<<<<<<<<<<
@@ -10270,7 +10260,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
  */
   __pyx_f_4lxml_5etree__copyParentNamespaces(__pyx_v_c_node, __pyx_v_c_new_root);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":99
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":96
  *     _copyParentNamespaces(c_node, c_new_root)
  * 
  *     c_new_root.children = c_node.children             # <<<<<<<<<<<<<<
@@ -10280,7 +10270,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
   __pyx_t_5 = __pyx_v_c_node->children;
   __pyx_v_c_new_root->children = __pyx_t_5;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":100
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":97
  * 
  *     c_new_root.children = c_node.children
  *     c_new_root.last = c_node.last             # <<<<<<<<<<<<<<
@@ -10290,7 +10280,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
   __pyx_t_5 = __pyx_v_c_node->last;
   __pyx_v_c_new_root->last = __pyx_t_5;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":101
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":98
  *     c_new_root.children = c_node.children
  *     c_new_root.last = c_node.last
  *     c_new_root.next = c_new_root.prev = NULL             # <<<<<<<<<<<<<<
@@ -10300,7 +10290,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
   __pyx_v_c_new_root->next = NULL;
   __pyx_v_c_new_root->prev = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":104
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":101
  * 
  *     # store original node
  *     c_doc._private = c_node             # <<<<<<<<<<<<<<
@@ -10309,7 +10299,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
  */
   __pyx_v_c_doc->_private = __pyx_v_c_node;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":107
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":104
  * 
  *     # divert parent pointers of children
  *     c_child = c_new_root.children             # <<<<<<<<<<<<<<
@@ -10319,7 +10309,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
   __pyx_t_5 = __pyx_v_c_new_root->children;
   __pyx_v_c_child = __pyx_t_5;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":108
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":105
  *     # divert parent pointers of children
  *     c_child = c_new_root.children
  *     while c_child is not NULL:             # <<<<<<<<<<<<<<
@@ -10330,7 +10320,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
     __pyx_t_1 = ((__pyx_v_c_child != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":109
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":106
  *     c_child = c_new_root.children
  *     while c_child is not NULL:
  *         c_child.parent = c_new_root             # <<<<<<<<<<<<<<
@@ -10339,7 +10329,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
  */
     __pyx_v_c_child->parent = __pyx_v_c_new_root;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":110
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":107
  *     while c_child is not NULL:
  *         c_child.parent = c_new_root
  *         c_child = c_child.next             # <<<<<<<<<<<<<<
@@ -10350,7 +10340,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
     __pyx_v_c_child = __pyx_t_5;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":112
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":109
  *         c_child = c_child.next
  * 
  *     c_doc.children = c_new_root             # <<<<<<<<<<<<<<
@@ -10359,7 +10349,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
  */
   __pyx_v_c_doc->children = __pyx_v_c_new_root;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":113
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":110
  * 
  *     c_doc.children = c_new_root
  *     return c_doc             # <<<<<<<<<<<<<<
@@ -10369,7 +10359,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
   __pyx_r = __pyx_v_c_doc;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":79
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":76
  *     return _plainFakeRootDoc(c_base_doc, c_node, 1)
  * 
  * cdef xmlDoc* _plainFakeRootDoc(xmlDoc* c_base_doc, xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -10386,7 +10376,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__plainFakeRootDoc(xmlDoc *__pyx_v_c_base_doc
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":115
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":112
  *     return c_doc
  * 
  * cdef void _destroyFakeDoc(xmlDoc* c_base_doc, xmlDoc* c_doc):             # <<<<<<<<<<<<<<
@@ -10403,7 +10393,7 @@ static void __pyx_f_4lxml_5etree__destroyFakeDoc(xmlDoc *__pyx_v_c_base_doc, xml
   xmlNode *__pyx_t_2;
   __Pyx_RefNannySetupContext("_destroyFakeDoc", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":120
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":117
  *     cdef xmlNode* c_parent
  *     cdef xmlNode* c_root
  *     if c_doc is c_base_doc:             # <<<<<<<<<<<<<<
@@ -10413,7 +10403,7 @@ static void __pyx_f_4lxml_5etree__destroyFakeDoc(xmlDoc *__pyx_v_c_base_doc, xml
   __pyx_t_1 = ((__pyx_v_c_doc == __pyx_v_c_base_doc) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":121
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":118
  *     cdef xmlNode* c_root
  *     if c_doc is c_base_doc:
  *         return             # <<<<<<<<<<<<<<
@@ -10423,7 +10413,7 @@ static void __pyx_f_4lxml_5etree__destroyFakeDoc(xmlDoc *__pyx_v_c_base_doc, xml
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":122
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":119
  *     if c_doc is c_base_doc:
  *         return
  *     c_root = tree.xmlDocGetRootElement(c_doc)             # <<<<<<<<<<<<<<
@@ -10432,7 +10422,7 @@ static void __pyx_f_4lxml_5etree__destroyFakeDoc(xmlDoc *__pyx_v_c_base_doc, xml
  */
   __pyx_v_c_root = xmlDocGetRootElement(__pyx_v_c_doc);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":125
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":122
  * 
  *     # restore parent pointers of children
  *     c_parent = <xmlNode*>c_doc._private             # <<<<<<<<<<<<<<
@@ -10441,7 +10431,7 @@ static void __pyx_f_4lxml_5etree__destroyFakeDoc(xmlDoc *__pyx_v_c_base_doc, xml
  */
   __pyx_v_c_parent = ((xmlNode *)__pyx_v_c_doc->_private);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":126
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":123
  *     # restore parent pointers of children
  *     c_parent = <xmlNode*>c_doc._private
  *     c_child = c_root.children             # <<<<<<<<<<<<<<
@@ -10451,7 +10441,7 @@ static void __pyx_f_4lxml_5etree__destroyFakeDoc(xmlDoc *__pyx_v_c_base_doc, xml
   __pyx_t_2 = __pyx_v_c_root->children;
   __pyx_v_c_child = __pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":127
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":124
  *     c_parent = <xmlNode*>c_doc._private
  *     c_child = c_root.children
  *     while c_child is not NULL:             # <<<<<<<<<<<<<<
@@ -10462,7 +10452,7 @@ static void __pyx_f_4lxml_5etree__destroyFakeDoc(xmlDoc *__pyx_v_c_base_doc, xml
     __pyx_t_1 = ((__pyx_v_c_child != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":128
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":125
  *     c_child = c_root.children
  *     while c_child is not NULL:
  *         c_child.parent = c_parent             # <<<<<<<<<<<<<<
@@ -10471,7 +10461,7 @@ static void __pyx_f_4lxml_5etree__destroyFakeDoc(xmlDoc *__pyx_v_c_base_doc, xml
  */
     __pyx_v_c_child->parent = __pyx_v_c_parent;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":129
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":126
  *     while c_child is not NULL:
  *         c_child.parent = c_parent
  *         c_child = c_child.next             # <<<<<<<<<<<<<<
@@ -10482,7 +10472,7 @@ static void __pyx_f_4lxml_5etree__destroyFakeDoc(xmlDoc *__pyx_v_c_base_doc, xml
     __pyx_v_c_child = __pyx_t_2;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":132
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":129
  * 
  *     # prevent recursive removal of children
  *     c_root.children = c_root.last = NULL             # <<<<<<<<<<<<<<
@@ -10492,7 +10482,7 @@ static void __pyx_f_4lxml_5etree__destroyFakeDoc(xmlDoc *__pyx_v_c_base_doc, xml
   __pyx_v_c_root->children = NULL;
   __pyx_v_c_root->last = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":133
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":130
  *     # prevent recursive removal of children
  *     c_root.children = c_root.last = NULL
  *     tree.xmlFreeDoc(c_doc)             # <<<<<<<<<<<<<<
@@ -10501,7 +10491,7 @@ static void __pyx_f_4lxml_5etree__destroyFakeDoc(xmlDoc *__pyx_v_c_base_doc, xml
  */
   xmlFreeDoc(__pyx_v_c_doc);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":115
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":112
  *     return c_doc
  * 
  * cdef void _destroyFakeDoc(xmlDoc* c_base_doc, xmlDoc* c_doc):             # <<<<<<<<<<<<<<
@@ -10514,7 +10504,7 @@ static void __pyx_f_4lxml_5etree__destroyFakeDoc(xmlDoc *__pyx_v_c_base_doc, xml
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":135
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":132
  *     tree.xmlFreeDoc(c_doc)
  * 
  * cdef _Element _fakeDocElementFactory(_Document doc, xmlNode* c_element):             # <<<<<<<<<<<<<<
@@ -10532,7 +10522,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__fakeDocElementFactory(struct Lx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_fakeDocElementFactory", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":144
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":141
  *     instantiate the original node instead.
  *     """
  *     if c_element.doc is not doc._c_doc:             # <<<<<<<<<<<<<<
@@ -10542,7 +10532,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__fakeDocElementFactory(struct Lx
   __pyx_t_1 = ((__pyx_v_c_element->doc != __pyx_v_doc->_c_doc) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":145
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":142
  *     """
  *     if c_element.doc is not doc._c_doc:
  *         if c_element.doc._private is not NULL:             # <<<<<<<<<<<<<<
@@ -10552,7 +10542,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__fakeDocElementFactory(struct Lx
     __pyx_t_1 = ((__pyx_v_c_element->doc->_private != NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":146
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":143
  *     if c_element.doc is not doc._c_doc:
  *         if c_element.doc._private is not NULL:
  *             if c_element is c_element.doc.children:             # <<<<<<<<<<<<<<
@@ -10562,7 +10552,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__fakeDocElementFactory(struct Lx
       __pyx_t_1 = ((__pyx_v_c_element == __pyx_v_c_element->doc->children) != 0);
       if (__pyx_t_1) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":147
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":144
  *         if c_element.doc._private is not NULL:
  *             if c_element is c_element.doc.children:
  *                 c_element = <xmlNode*>c_element.doc._private             # <<<<<<<<<<<<<<
@@ -10580,7 +10570,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__fakeDocElementFactory(struct Lx
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":149
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":146
  *                 c_element = <xmlNode*>c_element.doc._private
  *                 #assert c_element.type == tree.XML_ELEMENT_NODE
  *     return _elementFactory(doc, c_element)             # <<<<<<<<<<<<<<
@@ -10588,13 +10578,13 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__fakeDocElementFactory(struct Lx
  * ################################################################################
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_doc, __pyx_v_c_element)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_doc, __pyx_v_c_element)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = ((struct LxmlElement *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":135
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":132
  *     tree.xmlFreeDoc(c_doc)
  * 
  * cdef _Element _fakeDocElementFactory(_Document doc, xmlNode* c_element):             # <<<<<<<<<<<<<<
@@ -10613,7 +10603,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__fakeDocElementFactory(struct Lx
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":154
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":151
  * # support for freeing tree elements when proxy objects are destroyed
  * 
  * cdef int attemptDeallocation(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -10628,7 +10618,7 @@ static int __pyx_f_4lxml_5etree_attemptDeallocation(xmlNode *__pyx_v_c_node) {
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("attemptDeallocation", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":159
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":156
  *     cdef xmlNode* c_top
  *     # could be we actually aren't referring to the tree at all
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -10638,7 +10628,7 @@ static int __pyx_f_4lxml_5etree_attemptDeallocation(xmlNode *__pyx_v_c_node) {
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":161
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":158
  *     if c_node is NULL:
  *         #print "not freeing, node is NULL"
  *         return 0             # <<<<<<<<<<<<<<
@@ -10649,7 +10639,7 @@ static int __pyx_f_4lxml_5etree_attemptDeallocation(xmlNode *__pyx_v_c_node) {
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":162
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":159
  *         #print "not freeing, node is NULL"
  *         return 0
  *     c_top = getDeallocationTop(c_node)             # <<<<<<<<<<<<<<
@@ -10658,7 +10648,7 @@ static int __pyx_f_4lxml_5etree_attemptDeallocation(xmlNode *__pyx_v_c_node) {
  */
   __pyx_v_c_top = __pyx_f_4lxml_5etree_getDeallocationTop(__pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":163
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":160
  *         return 0
  *     c_top = getDeallocationTop(c_node)
  *     if c_top is not NULL:             # <<<<<<<<<<<<<<
@@ -10668,7 +10658,7 @@ static int __pyx_f_4lxml_5etree_attemptDeallocation(xmlNode *__pyx_v_c_node) {
   __pyx_t_1 = ((__pyx_v_c_top != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":165
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":162
  *     if c_top is not NULL:
  *         #print "freeing:", c_top.name
  *         _removeText(c_top.next) # tail             # <<<<<<<<<<<<<<
@@ -10677,7 +10667,7 @@ static int __pyx_f_4lxml_5etree_attemptDeallocation(xmlNode *__pyx_v_c_node) {
  */
     __pyx_f_4lxml_5etree__removeText(__pyx_v_c_top->next);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":166
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":163
  *         #print "freeing:", c_top.name
  *         _removeText(c_top.next) # tail
  *         tree.xmlFreeNode(c_top)             # <<<<<<<<<<<<<<
@@ -10686,7 +10676,7 @@ static int __pyx_f_4lxml_5etree_attemptDeallocation(xmlNode *__pyx_v_c_node) {
  */
     xmlFreeNode(__pyx_v_c_top);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":167
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":164
  *         _removeText(c_top.next) # tail
  *         tree.xmlFreeNode(c_top)
  *         return 1             # <<<<<<<<<<<<<<
@@ -10697,7 +10687,7 @@ static int __pyx_f_4lxml_5etree_attemptDeallocation(xmlNode *__pyx_v_c_node) {
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":168
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":165
  *         tree.xmlFreeNode(c_top)
  *         return 1
  *     return 0             # <<<<<<<<<<<<<<
@@ -10707,7 +10697,7 @@ static int __pyx_f_4lxml_5etree_attemptDeallocation(xmlNode *__pyx_v_c_node) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":154
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":151
  * # support for freeing tree elements when proxy objects are destroyed
  * 
  * cdef int attemptDeallocation(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -10721,7 +10711,7 @@ static int __pyx_f_4lxml_5etree_attemptDeallocation(xmlNode *__pyx_v_c_node) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":170
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":167
  *     return 0
  * 
  * cdef xmlNode* getDeallocationTop(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -10736,7 +10726,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
   xmlNode *__pyx_t_2;
   __Pyx_RefNannySetupContext("getDeallocationTop", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":174
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":171
  *     """
  *     #print "trying to do deallocating:", c_node.type
  *     if hasProxy(c_node):             # <<<<<<<<<<<<<<
@@ -10746,7 +10736,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
   __pyx_t_1 = (__pyx_f_4lxml_5etree_hasProxy(__pyx_v_c_node) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":176
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":173
  *     if hasProxy(c_node):
  *         #print "Not freeing: proxies still exist"
  *         return NULL             # <<<<<<<<<<<<<<
@@ -10757,7 +10747,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":177
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":174
  *         #print "Not freeing: proxies still exist"
  *         return NULL
  *     while c_node.parent is not NULL:             # <<<<<<<<<<<<<<
@@ -10768,7 +10758,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
     __pyx_t_1 = ((__pyx_v_c_node->parent != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":178
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":175
  *         return NULL
  *     while c_node.parent is not NULL:
  *         c_node = c_node.parent             # <<<<<<<<<<<<<<
@@ -10778,7 +10768,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
     __pyx_t_2 = __pyx_v_c_node->parent;
     __pyx_v_c_node = __pyx_t_2;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":180
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":177
  *         c_node = c_node.parent
  *         #print "checking:", c_current.type
  *         if c_node.type == tree.XML_DOCUMENT_NODE or \             # <<<<<<<<<<<<<<
@@ -10788,7 +10778,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
     switch (__pyx_v_c_node->type) {
       case XML_DOCUMENT_NODE:
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":181
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":178
  *         #print "checking:", c_current.type
  *         if c_node.type == tree.XML_DOCUMENT_NODE or \
  *                c_node.type == tree.XML_HTML_DOCUMENT_NODE:             # <<<<<<<<<<<<<<
@@ -10797,7 +10787,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
  */
       case XML_HTML_DOCUMENT_NODE:
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":183
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":180
  *                c_node.type == tree.XML_HTML_DOCUMENT_NODE:
  *             #print "not freeing: still in doc"
  *             return NULL             # <<<<<<<<<<<<<<
@@ -10810,7 +10800,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
       default: break;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":185
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":182
  *             return NULL
  *         # if we're still attached to the document, don't deallocate
  *         if hasProxy(c_node):             # <<<<<<<<<<<<<<
@@ -10820,7 +10810,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
     __pyx_t_1 = (__pyx_f_4lxml_5etree_hasProxy(__pyx_v_c_node) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":187
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":184
  *         if hasProxy(c_node):
  *             #print "Not freeing: proxies still exist"
  *             return NULL             # <<<<<<<<<<<<<<
@@ -10832,7 +10822,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
     }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":189
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":186
  *             return NULL
  *     # see whether we have children to deallocate
  *     if canDeallocateChildNodes(c_node):             # <<<<<<<<<<<<<<
@@ -10842,7 +10832,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
   __pyx_t_1 = (__pyx_f_4lxml_5etree_canDeallocateChildNodes(__pyx_v_c_node) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":190
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":187
  *     # see whether we have children to deallocate
  *     if canDeallocateChildNodes(c_node):
  *         return c_node             # <<<<<<<<<<<<<<
@@ -10854,7 +10844,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":192
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":189
  *         return c_node
  *     else:
  *         return NULL             # <<<<<<<<<<<<<<
@@ -10865,7 +10855,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":170
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":167
  *     return 0
  * 
  * cdef xmlNode* getDeallocationTop(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -10879,7 +10869,7 @@ static xmlNode *__pyx_f_4lxml_5etree_getDeallocationTop(xmlNode *__pyx_v_c_node)
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":194
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":191
  *         return NULL
  * 
  * cdef int canDeallocateChildNodes(xmlNode* c_parent):             # <<<<<<<<<<<<<<
@@ -10895,7 +10885,7 @@ static int __pyx_f_4lxml_5etree_canDeallocateChildNodes(xmlNode *__pyx_v_c_paren
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("canDeallocateChildNodes", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":196
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":193
  * cdef int canDeallocateChildNodes(xmlNode* c_parent):
  *     cdef xmlNode* c_node
  *     c_node = c_parent.children             # <<<<<<<<<<<<<<
@@ -10905,7 +10895,7 @@ static int __pyx_f_4lxml_5etree_canDeallocateChildNodes(xmlNode *__pyx_v_c_paren
   __pyx_t_1 = __pyx_v_c_parent->children;
   __pyx_v_c_node = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":197
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":194
  *     cdef xmlNode* c_node
  *     c_node = c_parent.children
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(c_parent, c_node, 1)             # <<<<<<<<<<<<<<
@@ -10914,7 +10904,7 @@ static int __pyx_f_4lxml_5etree_canDeallocateChildNodes(xmlNode *__pyx_v_c_paren
  */
   BEGIN_FOR_EACH_ELEMENT_FROM(__pyx_v_c_parent, __pyx_v_c_node, 1);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":198
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":195
  *     c_node = c_parent.children
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(c_parent, c_node, 1)
  *     if hasProxy(c_node):             # <<<<<<<<<<<<<<
@@ -10924,7 +10914,7 @@ static int __pyx_f_4lxml_5etree_canDeallocateChildNodes(xmlNode *__pyx_v_c_paren
   __pyx_t_2 = (__pyx_f_4lxml_5etree_hasProxy(__pyx_v_c_node) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":199
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":196
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(c_parent, c_node, 1)
  *     if hasProxy(c_node):
  *         return 0             # <<<<<<<<<<<<<<
@@ -10935,7 +10925,7 @@ static int __pyx_f_4lxml_5etree_canDeallocateChildNodes(xmlNode *__pyx_v_c_paren
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":200
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":197
  *     if hasProxy(c_node):
  *         return 0
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)             # <<<<<<<<<<<<<<
@@ -10944,7 +10934,7 @@ static int __pyx_f_4lxml_5etree_canDeallocateChildNodes(xmlNode *__pyx_v_c_paren
  */
   END_FOR_EACH_ELEMENT_FROM(__pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":201
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":198
  *         return 0
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)
  *     return 1             # <<<<<<<<<<<<<<
@@ -10954,7 +10944,7 @@ static int __pyx_f_4lxml_5etree_canDeallocateChildNodes(xmlNode *__pyx_v_c_paren
   __pyx_r = 1;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":194
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":191
  *         return NULL
  * 
  * cdef int canDeallocateChildNodes(xmlNode* c_parent):             # <<<<<<<<<<<<<<
@@ -10968,7 +10958,7 @@ static int __pyx_f_4lxml_5etree_canDeallocateChildNodes(xmlNode *__pyx_v_c_paren
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":206
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":203
  * # fix _Document references and namespaces when a node changes documents
  * 
  * cdef void _copyParentNamespaces(xmlNode* c_from_node, xmlNode* c_to_node) nogil:             # <<<<<<<<<<<<<<
@@ -10985,7 +10975,7 @@ static void __pyx_f_4lxml_5etree__copyParentNamespaces(xmlNode *__pyx_v_c_from_n
   int __pyx_t_4;
   xmlNs *__pyx_t_5;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":213
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":210
  *     cdef xmlNs* c_new_ns
  *     cdef int prefix_known
  *     c_parent = c_from_node.parent             # <<<<<<<<<<<<<<
@@ -10995,7 +10985,7 @@ static void __pyx_f_4lxml_5etree__copyParentNamespaces(xmlNode *__pyx_v_c_from_n
   __pyx_t_1 = __pyx_v_c_from_node->parent;
   __pyx_v_c_parent = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":214
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":211
  *     cdef int prefix_known
  *     c_parent = c_from_node.parent
  *     while c_parent and (tree._isElementOrXInclude(c_parent) or             # <<<<<<<<<<<<<<
@@ -11007,7 +10997,7 @@ static void __pyx_f_4lxml_5etree__copyParentNamespaces(xmlNode *__pyx_v_c_from_n
       __pyx_t_2 = (_isElementOrXInclude(__pyx_v_c_parent) != 0);
       if (!__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":215
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":212
  *     c_parent = c_from_node.parent
  *     while c_parent and (tree._isElementOrXInclude(c_parent) or
  *                         c_parent.type == tree.XML_DOCUMENT_NODE):             # <<<<<<<<<<<<<<
@@ -11025,7 +11015,7 @@ static void __pyx_f_4lxml_5etree__copyParentNamespaces(xmlNode *__pyx_v_c_from_n
     }
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":216
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":213
  *     while c_parent and (tree._isElementOrXInclude(c_parent) or
  *                         c_parent.type == tree.XML_DOCUMENT_NODE):
  *         c_new_ns = c_parent.nsDef             # <<<<<<<<<<<<<<
@@ -11035,7 +11025,7 @@ static void __pyx_f_4lxml_5etree__copyParentNamespaces(xmlNode *__pyx_v_c_from_n
     __pyx_t_5 = __pyx_v_c_parent->nsDef;
     __pyx_v_c_new_ns = __pyx_t_5;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":217
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":214
  *                         c_parent.type == tree.XML_DOCUMENT_NODE):
  *         c_new_ns = c_parent.nsDef
  *         while c_new_ns:             # <<<<<<<<<<<<<<
@@ -11046,7 +11036,7 @@ static void __pyx_f_4lxml_5etree__copyParentNamespaces(xmlNode *__pyx_v_c_from_n
       __pyx_t_2 = (__pyx_v_c_new_ns != 0);
       if (!__pyx_t_2) break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":219
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":216
  *         while c_new_ns:
  *             # libxml2 will check if the prefix is already defined
  *             tree.xmlNewNs(c_to_node, c_new_ns.href, c_new_ns.prefix)             # <<<<<<<<<<<<<<
@@ -11055,7 +11045,7 @@ static void __pyx_f_4lxml_5etree__copyParentNamespaces(xmlNode *__pyx_v_c_from_n
  */
       xmlNewNs(__pyx_v_c_to_node, __pyx_v_c_new_ns->href, __pyx_v_c_new_ns->prefix);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":220
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":217
  *             # libxml2 will check if the prefix is already defined
  *             tree.xmlNewNs(c_to_node, c_new_ns.href, c_new_ns.prefix)
  *             c_new_ns = c_new_ns.next             # <<<<<<<<<<<<<<
@@ -11066,7 +11056,7 @@ static void __pyx_f_4lxml_5etree__copyParentNamespaces(xmlNode *__pyx_v_c_from_n
       __pyx_v_c_new_ns = __pyx_t_5;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":221
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":218
  *             tree.xmlNewNs(c_to_node, c_new_ns.href, c_new_ns.prefix)
  *             c_new_ns = c_new_ns.next
  *         c_parent = c_parent.parent             # <<<<<<<<<<<<<<
@@ -11077,7 +11067,7 @@ static void __pyx_f_4lxml_5etree__copyParentNamespaces(xmlNode *__pyx_v_c_from_n
     __pyx_v_c_parent = __pyx_t_1;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":206
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":203
  * # fix _Document references and namespaces when a node changes documents
  * 
  * cdef void _copyParentNamespaces(xmlNode* c_from_node, xmlNode* c_to_node) nogil:             # <<<<<<<<<<<<<<
@@ -11088,7 +11078,7 @@ static void __pyx_f_4lxml_5etree__copyParentNamespaces(xmlNode *__pyx_v_c_from_n
   /* function exit code */
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":229
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":226
  *     size_t last
  * 
  * cdef int _growNsCache(_nscache* c_ns_cache) except -1:             # <<<<<<<<<<<<<<
@@ -11106,7 +11096,7 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_growNsCache", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":231
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":228
  * cdef int _growNsCache(_nscache* c_ns_cache) except -1:
  *     cdef xmlNs** c_ns_ptr
  *     if c_ns_cache.size == 0:             # <<<<<<<<<<<<<<
@@ -11116,7 +11106,7 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
   __pyx_t_1 = ((__pyx_v_c_ns_cache->size == 0) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":232
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":229
  *     cdef xmlNs** c_ns_ptr
  *     if c_ns_cache.size == 0:
  *         c_ns_cache.size = 20             # <<<<<<<<<<<<<<
@@ -11128,7 +11118,7 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":234
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":231
  *         c_ns_cache.size = 20
  *     else:
  *         c_ns_cache.size *= 2             # <<<<<<<<<<<<<<
@@ -11139,7 +11129,7 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":235
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":232
  *     else:
  *         c_ns_cache.size *= 2
  *     c_ns_ptr = <xmlNs**> stdlib.realloc(             # <<<<<<<<<<<<<<
@@ -11148,7 +11138,7 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
  */
   __pyx_v_c_ns_ptr = ((xmlNs **)realloc(__pyx_v_c_ns_cache->new, (__pyx_v_c_ns_cache->size * (sizeof(xmlNs *)))));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":237
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":234
  *     c_ns_ptr = <xmlNs**> stdlib.realloc(
  *         c_ns_cache.new, c_ns_cache.size * sizeof(xmlNs*))
  *     if c_ns_ptr is not NULL:             # <<<<<<<<<<<<<<
@@ -11158,7 +11148,7 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
   __pyx_t_1 = ((__pyx_v_c_ns_ptr != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":238
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":235
  *         c_ns_cache.new, c_ns_cache.size * sizeof(xmlNs*))
  *     if c_ns_ptr is not NULL:
  *         c_ns_cache.new = c_ns_ptr             # <<<<<<<<<<<<<<
@@ -11167,7 +11157,7 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
  */
     __pyx_v_c_ns_cache->new = __pyx_v_c_ns_ptr;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":239
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":236
  *     if c_ns_ptr is not NULL:
  *         c_ns_cache.new = c_ns_ptr
  *         c_ns_ptr = <xmlNs**> stdlib.realloc(             # <<<<<<<<<<<<<<
@@ -11179,7 +11169,7 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":241
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":238
  *         c_ns_ptr = <xmlNs**> stdlib.realloc(
  *             c_ns_cache.old, c_ns_cache.size * sizeof(xmlNs*))
  *     if c_ns_ptr is not NULL:             # <<<<<<<<<<<<<<
@@ -11189,7 +11179,7 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
   __pyx_t_1 = ((__pyx_v_c_ns_ptr != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":242
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":239
  *             c_ns_cache.old, c_ns_cache.size * sizeof(xmlNs*))
  *     if c_ns_ptr is not NULL:
  *         c_ns_cache.old = c_ns_ptr             # <<<<<<<<<<<<<<
@@ -11201,7 +11191,7 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":244
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":241
  *         c_ns_cache.old = c_ns_ptr
  *     else:
  *         stdlib.free(c_ns_cache.new)             # <<<<<<<<<<<<<<
@@ -11210,7 +11200,7 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
  */
     free(__pyx_v_c_ns_cache->new);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":245
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":242
  *     else:
  *         stdlib.free(c_ns_cache.new)
  *         stdlib.free(c_ns_cache.old)             # <<<<<<<<<<<<<<
@@ -11219,18 +11209,18 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
  */
     free(__pyx_v_c_ns_cache->old);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":246
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":243
  *         stdlib.free(c_ns_cache.new)
  *         stdlib.free(c_ns_cache.old)
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    PyErr_NoMemory(); {__pyx_filename = __pyx_f[3]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_NoMemory(); {__pyx_filename = __pyx_f[3]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":247
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":244
  *         stdlib.free(c_ns_cache.old)
  *         raise MemoryError()
  *     return 0             # <<<<<<<<<<<<<<
@@ -11240,7 +11230,7 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":229
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":226
  *     size_t last
  * 
  * cdef int _growNsCache(_nscache* c_ns_cache) except -1:             # <<<<<<<<<<<<<<
@@ -11257,7 +11247,7 @@ static int __pyx_f_4lxml_5etree__growNsCache(__pyx_t_4lxml_5etree__nscache *__py
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":249
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":246
  *     return 0
  * 
  * cdef inline int _appendToNsCache(_nscache* c_ns_cache,             # <<<<<<<<<<<<<<
@@ -11275,7 +11265,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__appendToNsCache(__pyx_t_4lxml_5et
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_appendToNsCache", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":251
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":248
  * cdef inline int _appendToNsCache(_nscache* c_ns_cache,
  *                                  xmlNs* c_old_ns, xmlNs* c_new_ns) except -1:
  *     if c_ns_cache.last >= c_ns_cache.size:             # <<<<<<<<<<<<<<
@@ -11285,19 +11275,19 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__appendToNsCache(__pyx_t_4lxml_5et
   __pyx_t_1 = ((__pyx_v_c_ns_cache->last >= __pyx_v_c_ns_cache->size) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":252
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":249
  *                                  xmlNs* c_old_ns, xmlNs* c_new_ns) except -1:
  *     if c_ns_cache.last >= c_ns_cache.size:
  *         _growNsCache(c_ns_cache)             # <<<<<<<<<<<<<<
  *     c_ns_cache.old[c_ns_cache.last] = c_old_ns
  *     c_ns_cache.new[c_ns_cache.last] = c_new_ns
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree__growNsCache(__pyx_v_c_ns_cache); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_4lxml_5etree__growNsCache(__pyx_v_c_ns_cache); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":253
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":250
  *     if c_ns_cache.last >= c_ns_cache.size:
  *         _growNsCache(c_ns_cache)
  *     c_ns_cache.old[c_ns_cache.last] = c_old_ns             # <<<<<<<<<<<<<<
@@ -11306,7 +11296,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__appendToNsCache(__pyx_t_4lxml_5et
  */
   (__pyx_v_c_ns_cache->old[__pyx_v_c_ns_cache->last]) = __pyx_v_c_old_ns;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":254
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":251
  *         _growNsCache(c_ns_cache)
  *     c_ns_cache.old[c_ns_cache.last] = c_old_ns
  *     c_ns_cache.new[c_ns_cache.last] = c_new_ns             # <<<<<<<<<<<<<<
@@ -11315,7 +11305,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__appendToNsCache(__pyx_t_4lxml_5et
  */
   (__pyx_v_c_ns_cache->new[__pyx_v_c_ns_cache->last]) = __pyx_v_c_new_ns;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":255
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":252
  *     c_ns_cache.old[c_ns_cache.last] = c_old_ns
  *     c_ns_cache.new[c_ns_cache.last] = c_new_ns
  *     c_ns_cache.last += 1             # <<<<<<<<<<<<<<
@@ -11324,7 +11314,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__appendToNsCache(__pyx_t_4lxml_5et
  */
   __pyx_v_c_ns_cache->last = (__pyx_v_c_ns_cache->last + 1);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":249
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":246
  *     return 0
  * 
  * cdef inline int _appendToNsCache(_nscache* c_ns_cache,             # <<<<<<<<<<<<<<
@@ -11343,7 +11333,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__appendToNsCache(__pyx_t_4lxml_5et
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":257
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":254
  *     c_ns_cache.last += 1
  * 
  * cdef int _stripRedundantNamespaceDeclarations(             # <<<<<<<<<<<<<<
@@ -11365,7 +11355,7 @@ static int __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(xmlNode *__
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_stripRedundantNamespaceDeclarations", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":267
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":264
  *     cdef xmlNs** c_nsdef
  *     # use a xmlNs** to handle assignments to "c_element.nsDef" correctly
  *     c_nsdef = &c_element.nsDef             # <<<<<<<<<<<<<<
@@ -11374,7 +11364,7 @@ static int __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(xmlNode *__
  */
   __pyx_v_c_nsdef = (&__pyx_v_c_element->nsDef);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":268
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":265
  *     # use a xmlNs** to handle assignments to "c_element.nsDef" correctly
  *     c_nsdef = &c_element.nsDef
  *     while c_nsdef[0] is not NULL:             # <<<<<<<<<<<<<<
@@ -11385,7 +11375,7 @@ static int __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(xmlNode *__
     __pyx_t_1 = (((__pyx_v_c_nsdef[0]) != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":269
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":266
  *     c_nsdef = &c_element.nsDef
  *     while c_nsdef[0] is not NULL:
  *         c_ns = tree.xmlSearchNsByHref(             # <<<<<<<<<<<<<<
@@ -11394,7 +11384,7 @@ static int __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(xmlNode *__
  */
     __pyx_v_c_ns = xmlSearchNsByHref(__pyx_v_c_element->doc, __pyx_v_c_element->parent, (__pyx_v_c_nsdef[0])->href);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":271
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":268
  *         c_ns = tree.xmlSearchNsByHref(
  *             c_element.doc, c_element.parent, c_nsdef[0].href)
  *         if c_ns is NULL:             # <<<<<<<<<<<<<<
@@ -11404,16 +11394,16 @@ static int __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(xmlNode *__
     __pyx_t_1 = ((__pyx_v_c_ns == NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":273
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":270
  *         if c_ns is NULL:
  *             # new namespace href => keep and cache the ns declaration
  *             _appendToNsCache(c_ns_cache, c_nsdef[0], c_nsdef[0])             # <<<<<<<<<<<<<<
  *             c_nsdef = &c_nsdef[0].next
  *         else:
  */
-      __pyx_t_2 = __pyx_f_4lxml_5etree__appendToNsCache(__pyx_v_c_ns_cache, (__pyx_v_c_nsdef[0]), (__pyx_v_c_nsdef[0])); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __pyx_f_4lxml_5etree__appendToNsCache(__pyx_v_c_ns_cache, (__pyx_v_c_nsdef[0]), (__pyx_v_c_nsdef[0])); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":274
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":271
  *             # new namespace href => keep and cache the ns declaration
  *             _appendToNsCache(c_ns_cache, c_nsdef[0], c_nsdef[0])
  *             c_nsdef = &c_nsdef[0].next             # <<<<<<<<<<<<<<
@@ -11425,16 +11415,16 @@ static int __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(xmlNode *__
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":277
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":274
  *         else:
  *             # known namespace href => cache mapping and strip old ns
  *             _appendToNsCache(c_ns_cache, c_nsdef[0], c_ns)             # <<<<<<<<<<<<<<
  *             # cut out c_nsdef.next and prepend it to garbage chain
  *             c_ns_next = c_nsdef[0].next
  */
-      __pyx_t_2 = __pyx_f_4lxml_5etree__appendToNsCache(__pyx_v_c_ns_cache, (__pyx_v_c_nsdef[0]), __pyx_v_c_ns); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __pyx_f_4lxml_5etree__appendToNsCache(__pyx_v_c_ns_cache, (__pyx_v_c_nsdef[0]), __pyx_v_c_ns); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":279
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":276
  *             _appendToNsCache(c_ns_cache, c_nsdef[0], c_ns)
  *             # cut out c_nsdef.next and prepend it to garbage chain
  *             c_ns_next = c_nsdef[0].next             # <<<<<<<<<<<<<<
@@ -11444,7 +11434,7 @@ static int __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(xmlNode *__
       __pyx_t_3 = (__pyx_v_c_nsdef[0])->next;
       __pyx_v_c_ns_next = __pyx_t_3;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":280
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":277
  *             # cut out c_nsdef.next and prepend it to garbage chain
  *             c_ns_next = c_nsdef[0].next
  *             c_nsdef[0].next = c_del_ns_list[0]             # <<<<<<<<<<<<<<
@@ -11453,7 +11443,7 @@ static int __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(xmlNode *__
  */
       (__pyx_v_c_nsdef[0])->next = (__pyx_v_c_del_ns_list[0]);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":281
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":278
  *             c_ns_next = c_nsdef[0].next
  *             c_nsdef[0].next = c_del_ns_list[0]
  *             c_del_ns_list[0] = c_nsdef[0]             # <<<<<<<<<<<<<<
@@ -11462,7 +11452,7 @@ static int __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(xmlNode *__
  */
       (__pyx_v_c_del_ns_list[0]) = (__pyx_v_c_nsdef[0]);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":282
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":279
  *             c_nsdef[0].next = c_del_ns_list[0]
  *             c_del_ns_list[0] = c_nsdef[0]
  *             c_nsdef[0] = c_ns_next             # <<<<<<<<<<<<<<
@@ -11474,7 +11464,7 @@ static int __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(xmlNode *__
     __pyx_L5:;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":283
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":280
  *             c_del_ns_list[0] = c_nsdef[0]
  *             c_nsdef[0] = c_ns_next
  *     return 0             # <<<<<<<<<<<<<<
@@ -11484,7 +11474,7 @@ static int __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(xmlNode *__
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":257
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":254
  *     c_ns_cache.last += 1
  * 
  * cdef int _stripRedundantNamespaceDeclarations(             # <<<<<<<<<<<<<<
@@ -11501,7 +11491,7 @@ static int __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(xmlNode *__
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":285
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":282
  *     return 0
  * 
  * cdef int moveNodeToDocument(_Document doc, xmlDoc* c_source_doc,             # <<<<<<<<<<<<<<
@@ -11534,7 +11524,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("moveNodeToDocument", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":324
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":321
  *     cdef xmlNs* c_nsdef
  *     cdef xmlNs* c_del_ns_list
  *     cdef size_t i, proxy_count = 0             # <<<<<<<<<<<<<<
@@ -11543,7 +11533,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
  */
   __pyx_v_proxy_count = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":326
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":323
  *     cdef size_t i, proxy_count = 0
  * 
  *     if not tree._isElementOrXInclude(c_element):             # <<<<<<<<<<<<<<
@@ -11553,7 +11543,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   __pyx_t_1 = ((!(_isElementOrXInclude(__pyx_v_c_element) != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":327
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":324
  * 
  *     if not tree._isElementOrXInclude(c_element):
  *         return 0             # <<<<<<<<<<<<<<
@@ -11564,7 +11554,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":329
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":326
  *         return 0
  * 
  *     c_start_node = c_element             # <<<<<<<<<<<<<<
@@ -11573,7 +11563,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
  */
   __pyx_v_c_start_node = __pyx_v_c_element;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":330
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":327
  * 
  *     c_start_node = c_element
  *     c_del_ns_list = NULL             # <<<<<<<<<<<<<<
@@ -11582,7 +11572,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
  */
   __pyx_v_c_del_ns_list = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":332
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":329
  *     c_del_ns_list = NULL
  * 
  *     c_ns_cache.new = NULL             # <<<<<<<<<<<<<<
@@ -11591,7 +11581,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
  */
   __pyx_v_c_ns_cache.new = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":333
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":330
  * 
  *     c_ns_cache.new = NULL
  *     c_ns_cache.old = NULL             # <<<<<<<<<<<<<<
@@ -11600,7 +11590,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
  */
   __pyx_v_c_ns_cache.old = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":334
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":331
  *     c_ns_cache.new = NULL
  *     c_ns_cache.old = NULL
  *     c_ns_cache.size = 0             # <<<<<<<<<<<<<<
@@ -11609,7 +11599,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
  */
   __pyx_v_c_ns_cache.size = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":335
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":332
  *     c_ns_cache.old = NULL
  *     c_ns_cache.size = 0
  *     c_ns_cache.last = 0             # <<<<<<<<<<<<<<
@@ -11618,7 +11608,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
  */
   __pyx_v_c_ns_cache.last = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":337
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":334
  *     c_ns_cache.last = 0
  * 
  *     tree.BEGIN_FOR_EACH_FROM(c_element, c_element, 1)             # <<<<<<<<<<<<<<
@@ -11627,7 +11617,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
  */
   BEGIN_FOR_EACH_FROM(__pyx_v_c_element, __pyx_v_c_element, 1);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":338
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":335
  * 
  *     tree.BEGIN_FOR_EACH_FROM(c_element, c_element, 1)
  *     if tree._isElementOrXInclude(c_element):             # <<<<<<<<<<<<<<
@@ -11637,7 +11627,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   __pyx_t_1 = (_isElementOrXInclude(__pyx_v_c_element) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":339
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":336
  *     tree.BEGIN_FOR_EACH_FROM(c_element, c_element, 1)
  *     if tree._isElementOrXInclude(c_element):
  *         if hasProxy(c_element):             # <<<<<<<<<<<<<<
@@ -11647,7 +11637,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
     __pyx_t_1 = (__pyx_f_4lxml_5etree_hasProxy(__pyx_v_c_element) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":340
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":337
  *     if tree._isElementOrXInclude(c_element):
  *         if hasProxy(c_element):
  *             proxy_count += 1             # <<<<<<<<<<<<<<
@@ -11659,7 +11649,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":344
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":341
  *         # 1) cut out namespaces defined here that are already known by
  *         #    the ancestors
  *         if c_element.nsDef is not NULL:             # <<<<<<<<<<<<<<
@@ -11669,19 +11659,19 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
     __pyx_t_1 = ((__pyx_v_c_element->nsDef != NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":345
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":342
  *         #    the ancestors
  *         if c_element.nsDef is not NULL:
  *             _stripRedundantNamespaceDeclarations(             # <<<<<<<<<<<<<<
  *                 c_element, &c_ns_cache, &c_del_ns_list)
  * 
  */
-      __pyx_t_2 = __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(__pyx_v_c_element, (&__pyx_v_c_ns_cache), (&__pyx_v_c_del_ns_list)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __pyx_f_4lxml_5etree__stripRedundantNamespaceDeclarations(__pyx_v_c_element, (&__pyx_v_c_ns_cache), (&__pyx_v_c_del_ns_list)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L6;
     }
     __pyx_L6:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":350
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":347
  *         # 2) make sure the namespaces of an element and its attributes
  *         #    are declared in this document (i.e. on the node or its parents)
  *         c_node = c_element             # <<<<<<<<<<<<<<
@@ -11690,7 +11680,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
  */
     __pyx_v_c_node = __pyx_v_c_element;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":351
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":348
  *         #    are declared in this document (i.e. on the node or its parents)
  *         c_node = c_element
  *         while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -11701,7 +11691,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
       __pyx_t_1 = ((__pyx_v_c_node != NULL) != 0);
       if (!__pyx_t_1) break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":352
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":349
  *         c_node = c_element
  *         while c_node is not NULL:
  *             if c_node.ns is not NULL:             # <<<<<<<<<<<<<<
@@ -11711,7 +11701,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
       __pyx_t_1 = ((__pyx_v_c_node->ns != NULL) != 0);
       if (__pyx_t_1) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":353
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":350
  *         while c_node is not NULL:
  *             if c_node.ns is not NULL:
  *                 c_ns = NULL             # <<<<<<<<<<<<<<
@@ -11720,7 +11710,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
  */
         __pyx_v_c_ns = NULL;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":354
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":351
  *             if c_node.ns is not NULL:
  *                 c_ns = NULL
  *                 for i in range(c_ns_cache.last):             # <<<<<<<<<<<<<<
@@ -11731,7 +11721,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
         for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
           __pyx_v_i = __pyx_t_4;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":355
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":352
  *                 c_ns = NULL
  *                 for i in range(c_ns_cache.last):
  *                     if c_node.ns is c_ns_cache.old[i]:             # <<<<<<<<<<<<<<
@@ -11741,7 +11731,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
           __pyx_t_1 = ((__pyx_v_c_node->ns == (__pyx_v_c_ns_cache.old[__pyx_v_i])) != 0);
           if (__pyx_t_1) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":356
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":353
  *                 for i in range(c_ns_cache.last):
  *                     if c_node.ns is c_ns_cache.old[i]:
  *                         if (c_node.type == tree.XML_ATTRIBUTE_NODE             # <<<<<<<<<<<<<<
@@ -11751,7 +11741,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
             __pyx_t_1 = ((__pyx_v_c_node->type == XML_ATTRIBUTE_NODE) != 0);
             if (__pyx_t_1) {
 
-              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":357
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":354
  *                     if c_node.ns is c_ns_cache.old[i]:
  *                         if (c_node.type == tree.XML_ATTRIBUTE_NODE
  *                                 and c_node.ns.prefix             # <<<<<<<<<<<<<<
@@ -11760,7 +11750,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
  */
               if ((__pyx_v_c_node->ns->prefix != 0)) {
 
-                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":358
+                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":355
  *                         if (c_node.type == tree.XML_ATTRIBUTE_NODE
  *                                 and c_node.ns.prefix
  *                                 and not c_ns_cache.new[i].prefix):             # <<<<<<<<<<<<<<
@@ -11778,7 +11768,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
             }
             if (__pyx_t_5) {
 
-              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":360
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":357
  *                                 and not c_ns_cache.new[i].prefix):
  *                             # avoid dropping prefix from attributes
  *                             continue             # <<<<<<<<<<<<<<
@@ -11788,7 +11778,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
               goto __pyx_L10_continue;
             }
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":361
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":358
  *                             # avoid dropping prefix from attributes
  *                             continue
  *                         c_ns = c_ns_cache.new[i]             # <<<<<<<<<<<<<<
@@ -11797,7 +11787,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
  */
             __pyx_v_c_ns = (__pyx_v_c_ns_cache.new[__pyx_v_i]);
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":362
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":359
  *                             continue
  *                         c_ns = c_ns_cache.new[i]
  *                         break             # <<<<<<<<<<<<<<
@@ -11810,7 +11800,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
         }
         __pyx_L11_break:;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":364
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":361
  *                         break
  * 
  *                 if not c_ns:             # <<<<<<<<<<<<<<
@@ -11820,29 +11810,29 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
         __pyx_t_5 = ((!(__pyx_v_c_ns != 0)) != 0);
         if (__pyx_t_5) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":367
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":364
  *                     # not in cache or not acceptable
  *                     # => find a replacement from this document
  *                     c_ns = doc._findOrBuildNodeNs(             # <<<<<<<<<<<<<<
  *                         c_start_node, c_node.ns.href, c_node.ns.prefix,
  *                         c_node.type == tree.XML_ATTRIBUTE_NODE)
  */
-          __pyx_t_7 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_doc, __pyx_v_c_start_node, __pyx_v_c_node->ns->href, __pyx_v_c_node->ns->prefix, (__pyx_v_c_node->type == XML_ATTRIBUTE_NODE)); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_7 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_doc, __pyx_v_c_start_node, __pyx_v_c_node->ns->href, __pyx_v_c_node->ns->prefix, (__pyx_v_c_node->type == XML_ATTRIBUTE_NODE)); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __pyx_v_c_ns = __pyx_t_7;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":370
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":367
  *                         c_start_node, c_node.ns.href, c_node.ns.prefix,
  *                         c_node.type == tree.XML_ATTRIBUTE_NODE)
  *                     _appendToNsCache(&c_ns_cache, c_node.ns, c_ns)             # <<<<<<<<<<<<<<
  *                 c_node.ns = c_ns
  * 
  */
-          __pyx_t_2 = __pyx_f_4lxml_5etree__appendToNsCache((&__pyx_v_c_ns_cache), __pyx_v_c_node->ns, __pyx_v_c_ns); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_2 = __pyx_f_4lxml_5etree__appendToNsCache((&__pyx_v_c_ns_cache), __pyx_v_c_node->ns, __pyx_v_c_ns); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 367; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           goto __pyx_L14;
         }
         __pyx_L14:;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":371
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":368
  *                         c_node.type == tree.XML_ATTRIBUTE_NODE)
  *                     _appendToNsCache(&c_ns_cache, c_node.ns, c_ns)
  *                 c_node.ns = c_ns             # <<<<<<<<<<<<<<
@@ -11854,7 +11844,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
       }
       __pyx_L9:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":373
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":370
  *                 c_node.ns = c_ns
  * 
  *             if c_node is c_element:             # <<<<<<<<<<<<<<
@@ -11864,7 +11854,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
       __pyx_t_5 = ((__pyx_v_c_node == __pyx_v_c_element) != 0);
       if (__pyx_t_5) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":375
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":372
  *             if c_node is c_element:
  *                 # after the element, continue with its attributes
  *                 c_node = <xmlNode*>c_element.properties             # <<<<<<<<<<<<<<
@@ -11876,7 +11866,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
       }
       /*else*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":377
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":374
  *                 c_node = <xmlNode*>c_element.properties
  *             else:
  *                 c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -11892,7 +11882,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":378
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":375
  *             else:
  *                 c_node = c_node.next
  *     tree.END_FOR_EACH_FROM(c_element)             # <<<<<<<<<<<<<<
@@ -11901,7 +11891,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
  */
   END_FOR_EACH_FROM(__pyx_v_c_element);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":381
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":378
  * 
  *     # free now unused namespace declarations
  *     if c_del_ns_list is not NULL:             # <<<<<<<<<<<<<<
@@ -11911,7 +11901,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   __pyx_t_5 = ((__pyx_v_c_del_ns_list != NULL) != 0);
   if (__pyx_t_5) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":382
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":379
  *     # free now unused namespace declarations
  *     if c_del_ns_list is not NULL:
  *         tree.xmlFreeNsList(c_del_ns_list)             # <<<<<<<<<<<<<<
@@ -11923,7 +11913,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   }
   __pyx_L16:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":385
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":382
  * 
  *     # cleanup
  *     if c_ns_cache.new is not NULL:             # <<<<<<<<<<<<<<
@@ -11933,7 +11923,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   __pyx_t_5 = ((__pyx_v_c_ns_cache.new != NULL) != 0);
   if (__pyx_t_5) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":386
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":383
  *     # cleanup
  *     if c_ns_cache.new is not NULL:
  *         stdlib.free(c_ns_cache.new)             # <<<<<<<<<<<<<<
@@ -11945,7 +11935,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   }
   __pyx_L17:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":387
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":384
  *     if c_ns_cache.new is not NULL:
  *         stdlib.free(c_ns_cache.new)
  *     if c_ns_cache.old is not NULL:             # <<<<<<<<<<<<<<
@@ -11955,7 +11945,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   __pyx_t_5 = ((__pyx_v_c_ns_cache.old != NULL) != 0);
   if (__pyx_t_5) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":388
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":385
  *         stdlib.free(c_ns_cache.new)
  *     if c_ns_cache.old is not NULL:
  *         stdlib.free(c_ns_cache.old)             # <<<<<<<<<<<<<<
@@ -11967,7 +11957,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   }
   __pyx_L18:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":391
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":388
  * 
  *     # 3) fix the names in the tree if we moved it from a different thread
  *     if doc._c_doc.dict is not c_source_doc.dict:             # <<<<<<<<<<<<<<
@@ -11977,7 +11967,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   __pyx_t_5 = ((__pyx_v_doc->_c_doc->dict != __pyx_v_c_source_doc->dict) != 0);
   if (__pyx_t_5) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":392
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":389
  *     # 3) fix the names in the tree if we moved it from a different thread
  *     if doc._c_doc.dict is not c_source_doc.dict:
  *         fixThreadDictNames(c_start_node, c_source_doc.dict, doc._c_doc.dict)             # <<<<<<<<<<<<<<
@@ -11989,7 +11979,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   }
   __pyx_L19:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":396
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":393
  *     # 4) fix _Document references
  *     #    (and potentially deallocate the source document)
  *     if proxy_count > 0:             # <<<<<<<<<<<<<<
@@ -11999,7 +11989,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   __pyx_t_5 = ((__pyx_v_proxy_count > 0) != 0);
   if (__pyx_t_5) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":397
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":394
  *     #    (and potentially deallocate the source document)
  *     if proxy_count > 0:
  *         if proxy_count == 1 and c_start_node._private is not NULL:             # <<<<<<<<<<<<<<
@@ -12015,19 +12005,19 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
     }
     if (__pyx_t_6) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":398
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":395
  *     if proxy_count > 0:
  *         if proxy_count == 1 and c_start_node._private is not NULL:
  *             proxy = getProxy(c_start_node)             # <<<<<<<<<<<<<<
  *             if proxy is not None:
  *                 if proxy._doc is not doc:
  */
-      __pyx_t_9 = ((PyObject *)__pyx_f_4lxml_5etree_getProxy(__pyx_v_c_start_node)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = ((PyObject *)__pyx_f_4lxml_5etree_getProxy(__pyx_v_c_start_node)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_9);
       __pyx_v_proxy = ((struct LxmlElement *)__pyx_t_9);
       __pyx_t_9 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":399
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":396
  *         if proxy_count == 1 and c_start_node._private is not NULL:
  *             proxy = getProxy(c_start_node)
  *             if proxy is not None:             # <<<<<<<<<<<<<<
@@ -12038,7 +12028,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
       __pyx_t_5 = (__pyx_t_6 != 0);
       if (__pyx_t_5) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":400
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":397
  *             proxy = getProxy(c_start_node)
  *             if proxy is not None:
  *                 if proxy._doc is not doc:             # <<<<<<<<<<<<<<
@@ -12049,7 +12039,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
         __pyx_t_6 = (__pyx_t_5 != 0);
         if (__pyx_t_6) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":401
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":398
  *             if proxy is not None:
  *                 if proxy._doc is not doc:
  *                     proxy._doc = doc             # <<<<<<<<<<<<<<
@@ -12068,7 +12058,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
       }
       /*else*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":403
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":400
  *                     proxy._doc = doc
  *             else:
  *                 fixElementDocument(c_start_node, doc, proxy_count)             # <<<<<<<<<<<<<<
@@ -12082,7 +12072,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":405
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":402
  *                 fixElementDocument(c_start_node, doc, proxy_count)
  *         else:
  *             fixElementDocument(c_start_node, doc, proxy_count)             # <<<<<<<<<<<<<<
@@ -12096,7 +12086,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   }
   __pyx_L20:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":407
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":404
  *             fixElementDocument(c_start_node, doc, proxy_count)
  * 
  *     return 0             # <<<<<<<<<<<<<<
@@ -12106,7 +12096,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":285
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":282
  *     return 0
  * 
  * cdef int moveNodeToDocument(_Document doc, xmlDoc* c_source_doc,             # <<<<<<<<<<<<<<
@@ -12125,7 +12115,7 @@ static int __pyx_f_4lxml_5etree_moveNodeToDocument(struct LxmlDocument *__pyx_v_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":410
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":407
  * 
  * 
  * cdef void fixElementDocument(xmlNode* c_element, _Document doc,             # <<<<<<<<<<<<<<
@@ -12145,7 +12135,7 @@ static void __pyx_f_4lxml_5etree_fixElementDocument(xmlNode *__pyx_v_c_element,
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("fixElementDocument", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":412
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":409
  * cdef void fixElementDocument(xmlNode* c_element, _Document doc,
  *                              size_t proxy_count):
  *     cdef xmlNode* c_node = c_element             # <<<<<<<<<<<<<<
@@ -12154,7 +12144,7 @@ static void __pyx_f_4lxml_5etree_fixElementDocument(xmlNode *__pyx_v_c_element,
  */
   __pyx_v_c_node = __pyx_v_c_element;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":413
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":410
  *                              size_t proxy_count):
  *     cdef xmlNode* c_node = c_element
  *     cdef _Element proxy = None # init-to-None required due to fake-loop below             # <<<<<<<<<<<<<<
@@ -12164,7 +12154,7 @@ static void __pyx_f_4lxml_5etree_fixElementDocument(xmlNode *__pyx_v_c_element,
   __Pyx_INCREF(Py_None);
   __pyx_v_proxy = ((struct LxmlElement *)Py_None);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":414
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":411
  *     cdef xmlNode* c_node = c_element
  *     cdef _Element proxy = None # init-to-None required due to fake-loop below
  *     tree.BEGIN_FOR_EACH_FROM(c_element, c_node, 1)             # <<<<<<<<<<<<<<
@@ -12173,7 +12163,7 @@ static void __pyx_f_4lxml_5etree_fixElementDocument(xmlNode *__pyx_v_c_element,
  */
   BEGIN_FOR_EACH_FROM(__pyx_v_c_element, __pyx_v_c_node, 1);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":415
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":412
  *     cdef _Element proxy = None # init-to-None required due to fake-loop below
  *     tree.BEGIN_FOR_EACH_FROM(c_element, c_node, 1)
  *     if c_node._private is not NULL:             # <<<<<<<<<<<<<<
@@ -12183,19 +12173,19 @@ static void __pyx_f_4lxml_5etree_fixElementDocument(xmlNode *__pyx_v_c_element,
   __pyx_t_1 = ((__pyx_v_c_node->_private != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":416
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":413
  *     tree.BEGIN_FOR_EACH_FROM(c_element, c_node, 1)
  *     if c_node._private is not NULL:
  *         proxy = getProxy(c_node)             # <<<<<<<<<<<<<<
  *         if proxy is not None:
  *             if proxy._doc is not doc:
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree_getProxy(__pyx_v_c_node)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree_getProxy(__pyx_v_c_node)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_proxy, ((struct LxmlElement *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":417
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":414
  *     if c_node._private is not NULL:
  *         proxy = getProxy(c_node)
  *         if proxy is not None:             # <<<<<<<<<<<<<<
@@ -12206,7 +12196,7 @@ static void __pyx_f_4lxml_5etree_fixElementDocument(xmlNode *__pyx_v_c_element,
     __pyx_t_3 = (__pyx_t_1 != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":418
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":415
  *         proxy = getProxy(c_node)
  *         if proxy is not None:
  *             if proxy._doc is not doc:             # <<<<<<<<<<<<<<
@@ -12217,7 +12207,7 @@ static void __pyx_f_4lxml_5etree_fixElementDocument(xmlNode *__pyx_v_c_element,
       __pyx_t_1 = (__pyx_t_3 != 0);
       if (__pyx_t_1) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":419
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":416
  *         if proxy is not None:
  *             if proxy._doc is not doc:
  *                 proxy._doc = doc             # <<<<<<<<<<<<<<
@@ -12233,7 +12223,7 @@ static void __pyx_f_4lxml_5etree_fixElementDocument(xmlNode *__pyx_v_c_element,
       }
       __pyx_L5:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":420
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":417
  *             if proxy._doc is not doc:
  *                 proxy._doc = doc
  *             proxy_count -= 1             # <<<<<<<<<<<<<<
@@ -12242,7 +12232,7 @@ static void __pyx_f_4lxml_5etree_fixElementDocument(xmlNode *__pyx_v_c_element,
  */
       __pyx_v_proxy_count = (__pyx_v_proxy_count - 1);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":421
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":418
  *                 proxy._doc = doc
  *             proxy_count -= 1
  *             if proxy_count == 0:             # <<<<<<<<<<<<<<
@@ -12252,7 +12242,7 @@ static void __pyx_f_4lxml_5etree_fixElementDocument(xmlNode *__pyx_v_c_element,
       __pyx_t_1 = ((__pyx_v_proxy_count == 0) != 0);
       if (__pyx_t_1) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":422
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":419
  *             proxy_count -= 1
  *             if proxy_count == 0:
  *                 return             # <<<<<<<<<<<<<<
@@ -12268,7 +12258,7 @@ static void __pyx_f_4lxml_5etree_fixElementDocument(xmlNode *__pyx_v_c_element,
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":423
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":420
  *             if proxy_count == 0:
  *                 return
  *     tree.END_FOR_EACH_FROM(c_node)             # <<<<<<<<<<<<<<
@@ -12277,7 +12267,7 @@ static void __pyx_f_4lxml_5etree_fixElementDocument(xmlNode *__pyx_v_c_element,
  */
   END_FOR_EACH_FROM(__pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":410
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":407
  * 
  * 
  * cdef void fixElementDocument(xmlNode* c_element, _Document doc,             # <<<<<<<<<<<<<<
@@ -12295,7 +12285,7 @@ static void __pyx_f_4lxml_5etree_fixElementDocument(xmlNode *__pyx_v_c_element,
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":425
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":422
  *     tree.END_FOR_EACH_FROM(c_node)
  * 
  * cdef void fixThreadDictNames(xmlNode* c_element,             # <<<<<<<<<<<<<<
@@ -12307,7 +12297,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNames(xmlNode *__pyx_v_c_element,
   int __pyx_t_1;
   xmlNode *__pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":432
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":429
  *     # this should only be called when the element is based on a
  *     # different libxml2 tag name dictionary
  *     if c_element.type == tree.XML_DOCUMENT_NODE or \             # <<<<<<<<<<<<<<
@@ -12317,7 +12307,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNames(xmlNode *__pyx_v_c_element,
   switch (__pyx_v_c_element->type) {
     case XML_DOCUMENT_NODE:
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":433
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":430
  *     # different libxml2 tag name dictionary
  *     if c_element.type == tree.XML_DOCUMENT_NODE or \
  *             c_element.type == tree.XML_HTML_DOCUMENT_NODE:             # <<<<<<<<<<<<<<
@@ -12326,7 +12316,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNames(xmlNode *__pyx_v_c_element,
  */
     case XML_HTML_DOCUMENT_NODE:
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":432
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":429
  *     # this should only be called when the element is based on a
  *     # different libxml2 tag name dictionary
  *     if c_element.type == tree.XML_DOCUMENT_NODE or \             # <<<<<<<<<<<<<<
@@ -12341,7 +12331,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNames(xmlNode *__pyx_v_c_element,
   }
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":435
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":432
  *             c_element.type == tree.XML_HTML_DOCUMENT_NODE:
  *         # may define "xml" namespace
  *         fixThreadDictNsForNode(c_element, c_src_dict, c_dict)             # <<<<<<<<<<<<<<
@@ -12350,7 +12340,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNames(xmlNode *__pyx_v_c_element,
  */
     __pyx_f_4lxml_5etree_fixThreadDictNsForNode(__pyx_v_c_element, __pyx_v_c_src_dict, __pyx_v_c_dict);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":436
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":433
  *         # may define "xml" namespace
  *         fixThreadDictNsForNode(c_element, c_src_dict, c_dict)
  *         c_element = c_element.children             # <<<<<<<<<<<<<<
@@ -12360,7 +12350,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNames(xmlNode *__pyx_v_c_element,
     __pyx_t_2 = __pyx_v_c_element->children;
     __pyx_v_c_element = __pyx_t_2;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":437
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":434
  *         fixThreadDictNsForNode(c_element, c_src_dict, c_dict)
  *         c_element = c_element.children
  *         while c_element is not NULL:             # <<<<<<<<<<<<<<
@@ -12371,7 +12361,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNames(xmlNode *__pyx_v_c_element,
       __pyx_t_1 = ((__pyx_v_c_element != NULL) != 0);
       if (!__pyx_t_1) break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":438
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":435
  *         c_element = c_element.children
  *         while c_element is not NULL:
  *             fixThreadDictNamesForNode(c_element, c_src_dict, c_dict)             # <<<<<<<<<<<<<<
@@ -12380,7 +12370,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNames(xmlNode *__pyx_v_c_element,
  */
       __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(__pyx_v_c_element, __pyx_v_c_src_dict, __pyx_v_c_dict);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":439
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":436
  *         while c_element is not NULL:
  *             fixThreadDictNamesForNode(c_element, c_src_dict, c_dict)
  *             c_element = c_element.next             # <<<<<<<<<<<<<<
@@ -12393,7 +12383,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNames(xmlNode *__pyx_v_c_element,
     goto __pyx_L3;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":440
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":437
  *             fixThreadDictNamesForNode(c_element, c_src_dict, c_dict)
  *             c_element = c_element.next
  *     elif tree._isElementOrXInclude(c_element):             # <<<<<<<<<<<<<<
@@ -12403,7 +12393,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNames(xmlNode *__pyx_v_c_element,
   __pyx_t_1 = (_isElementOrXInclude(__pyx_v_c_element) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":441
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":438
  *             c_element = c_element.next
  *     elif tree._isElementOrXInclude(c_element):
  *         fixThreadDictNamesForNode(c_element, c_src_dict, c_dict)             # <<<<<<<<<<<<<<
@@ -12415,7 +12405,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNames(xmlNode *__pyx_v_c_element,
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":425
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":422
  *     tree.END_FOR_EACH_FROM(c_node)
  * 
  * cdef void fixThreadDictNames(xmlNode* c_element,             # <<<<<<<<<<<<<<
@@ -12426,7 +12416,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNames(xmlNode *__pyx_v_c_element,
   /* function exit code */
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":443
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":440
  *         fixThreadDictNamesForNode(c_element, c_src_dict, c_dict)
  * 
  * cdef void fixThreadDictNamesForNode(xmlNode* c_element,             # <<<<<<<<<<<<<<
@@ -12438,7 +12428,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(xmlNode *__pyx_v_c_el
   xmlNode *__pyx_v_c_node;
   int __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":446
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":443
  *                                     tree.xmlDict* c_src_dict,
  *                                     tree.xmlDict* c_dict) nogil:
  *     cdef xmlNode* c_node = c_element             # <<<<<<<<<<<<<<
@@ -12447,7 +12437,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(xmlNode *__pyx_v_c_el
  */
   __pyx_v_c_node = __pyx_v_c_element;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":447
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":444
  *                                     tree.xmlDict* c_dict) nogil:
  *     cdef xmlNode* c_node = c_element
  *     tree.BEGIN_FOR_EACH_FROM(c_element, c_node, 1)             # <<<<<<<<<<<<<<
@@ -12456,7 +12446,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(xmlNode *__pyx_v_c_el
  */
   BEGIN_FOR_EACH_FROM(__pyx_v_c_element, __pyx_v_c_node, 1);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":448
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":445
  *     cdef xmlNode* c_node = c_element
  *     tree.BEGIN_FOR_EACH_FROM(c_element, c_node, 1)
  *     if c_node.name is not NULL:             # <<<<<<<<<<<<<<
@@ -12466,7 +12456,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(xmlNode *__pyx_v_c_el
   __pyx_t_1 = ((__pyx_v_c_node->name != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":449
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":446
  *     tree.BEGIN_FOR_EACH_FROM(c_element, c_node, 1)
  *     if c_node.name is not NULL:
  *         fixThreadDictNameForNode(c_node, c_src_dict, c_dict)             # <<<<<<<<<<<<<<
@@ -12478,7 +12468,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(xmlNode *__pyx_v_c_el
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":454
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":451
  *             c_node.properties, c_src_dict, c_dict)
  *         fixThreadDictNsForNode(c_node, c_src_dict, c_dict)
  *     elif c_node.type == tree.XML_TEXT_NODE:             # <<<<<<<<<<<<<<
@@ -12487,7 +12477,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(xmlNode *__pyx_v_c_el
  */
   switch (__pyx_v_c_node->type) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":450
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":447
  *     if c_node.name is not NULL:
  *         fixThreadDictNameForNode(c_node, c_src_dict, c_dict)
  *     if c_node.type in (tree.XML_ELEMENT_NODE, tree.XML_XINCLUDE_START):             # <<<<<<<<<<<<<<
@@ -12497,7 +12487,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(xmlNode *__pyx_v_c_el
     case XML_ELEMENT_NODE:
     case XML_XINCLUDE_START:
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":451
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":448
  *         fixThreadDictNameForNode(c_node, c_src_dict, c_dict)
  *     if c_node.type in (tree.XML_ELEMENT_NODE, tree.XML_XINCLUDE_START):
  *         fixThreadDictNamesForAttributes(             # <<<<<<<<<<<<<<
@@ -12506,7 +12496,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(xmlNode *__pyx_v_c_el
  */
     __pyx_f_4lxml_5etree_fixThreadDictNamesForAttributes(__pyx_v_c_node->properties, __pyx_v_c_src_dict, __pyx_v_c_dict);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":453
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":450
  *         fixThreadDictNamesForAttributes(
  *             c_node.properties, c_src_dict, c_dict)
  *         fixThreadDictNsForNode(c_node, c_src_dict, c_dict)             # <<<<<<<<<<<<<<
@@ -12516,7 +12506,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(xmlNode *__pyx_v_c_el
     __pyx_f_4lxml_5etree_fixThreadDictNsForNode(__pyx_v_c_node, __pyx_v_c_src_dict, __pyx_v_c_dict);
     break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":454
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":451
  *             c_node.properties, c_src_dict, c_dict)
  *         fixThreadDictNsForNode(c_node, c_src_dict, c_dict)
  *     elif c_node.type == tree.XML_TEXT_NODE:             # <<<<<<<<<<<<<<
@@ -12525,7 +12515,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(xmlNode *__pyx_v_c_el
  */
     case XML_TEXT_NODE:
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":456
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":453
  *     elif c_node.type == tree.XML_TEXT_NODE:
  *         # libxml2's SAX2 parser interns some indentation space
  *         fixThreadDictContentForNode(c_node, c_src_dict, c_dict)             # <<<<<<<<<<<<<<
@@ -12537,7 +12527,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(xmlNode *__pyx_v_c_el
     default: break;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":457
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":454
  *         # libxml2's SAX2 parser interns some indentation space
  *         fixThreadDictContentForNode(c_node, c_src_dict, c_dict)
  *     tree.END_FOR_EACH_FROM(c_node)             # <<<<<<<<<<<<<<
@@ -12546,7 +12536,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(xmlNode *__pyx_v_c_el
  */
   END_FOR_EACH_FROM(__pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":443
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":440
  *         fixThreadDictNamesForNode(c_element, c_src_dict, c_dict)
  * 
  * cdef void fixThreadDictNamesForNode(xmlNode* c_element,             # <<<<<<<<<<<<<<
@@ -12557,7 +12547,7 @@ static void __pyx_f_4lxml_5etree_fixThreadDictNamesForNode(xmlNode *__pyx_v_c_el
   /* function exit code */
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":459
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":456
  *     tree.END_FOR_EACH_FROM(c_node)
  * 
  * cdef inline void fixThreadDictNamesForAttributes(tree.xmlAttr* c_attr,             # <<<<<<<<<<<<<<
@@ -12571,7 +12561,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNamesForAttributes(x
   int __pyx_t_1;
   xmlNode *__pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":463
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":460
  *                                                  tree.xmlDict* c_dict) nogil:
  *     cdef xmlNode* c_child
  *     cdef xmlNode* c_node = <xmlNode*>c_attr             # <<<<<<<<<<<<<<
@@ -12580,7 +12570,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNamesForAttributes(x
  */
   __pyx_v_c_node = ((xmlNode *)__pyx_v_c_attr);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":464
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":461
  *     cdef xmlNode* c_child
  *     cdef xmlNode* c_node = <xmlNode*>c_attr
  *     while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -12591,7 +12581,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNamesForAttributes(x
     __pyx_t_1 = ((__pyx_v_c_node != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":465
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":462
  *     cdef xmlNode* c_node = <xmlNode*>c_attr
  *     while c_node is not NULL:
  *         fixThreadDictNameForNode(c_node, c_src_dict, c_dict)             # <<<<<<<<<<<<<<
@@ -12600,7 +12590,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNamesForAttributes(x
  */
     __pyx_f_4lxml_5etree_fixThreadDictNameForNode(__pyx_v_c_node, __pyx_v_c_src_dict, __pyx_v_c_dict);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":467
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":464
  *         fixThreadDictNameForNode(c_node, c_src_dict, c_dict)
  *         # libxml2 keeps some (!) attribute values in the dict
  *         c_child = c_node.children             # <<<<<<<<<<<<<<
@@ -12610,7 +12600,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNamesForAttributes(x
     __pyx_t_2 = __pyx_v_c_node->children;
     __pyx_v_c_child = __pyx_t_2;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":468
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":465
  *         # libxml2 keeps some (!) attribute values in the dict
  *         c_child = c_node.children
  *         while c_child is not NULL:             # <<<<<<<<<<<<<<
@@ -12621,7 +12611,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNamesForAttributes(x
       __pyx_t_1 = ((__pyx_v_c_child != NULL) != 0);
       if (!__pyx_t_1) break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":469
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":466
  *         c_child = c_node.children
  *         while c_child is not NULL:
  *             fixThreadDictContentForNode(c_child, c_src_dict, c_dict)             # <<<<<<<<<<<<<<
@@ -12630,7 +12620,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNamesForAttributes(x
  */
       __pyx_f_4lxml_5etree_fixThreadDictContentForNode(__pyx_v_c_child, __pyx_v_c_src_dict, __pyx_v_c_dict);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":470
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":467
  *         while c_child is not NULL:
  *             fixThreadDictContentForNode(c_child, c_src_dict, c_dict)
  *             c_child = c_child.next             # <<<<<<<<<<<<<<
@@ -12641,7 +12631,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNamesForAttributes(x
       __pyx_v_c_child = __pyx_t_2;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":471
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":468
  *             fixThreadDictContentForNode(c_child, c_src_dict, c_dict)
  *             c_child = c_child.next
  *         c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -12652,7 +12642,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNamesForAttributes(x
     __pyx_v_c_node = __pyx_t_2;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":459
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":456
  *     tree.END_FOR_EACH_FROM(c_node)
  * 
  * cdef inline void fixThreadDictNamesForAttributes(tree.xmlAttr* c_attr,             # <<<<<<<<<<<<<<
@@ -12663,7 +12653,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNamesForAttributes(x
   /* function exit code */
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":473
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":470
  *         c_node = c_node.next
  * 
  * cdef inline void fixThreadDictNameForNode(xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -12678,7 +12668,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNameForNode(xmlNode
   int __pyx_t_3;
   int __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":476
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":473
  *                                           tree.xmlDict* c_src_dict,
  *                                           tree.xmlDict* c_dict) nogil:
  *     cdef const_xmlChar* c_name = c_node.name             # <<<<<<<<<<<<<<
@@ -12688,7 +12678,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNameForNode(xmlNode
   __pyx_t_1 = __pyx_v_c_node->name;
   __pyx_v_c_name = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":477
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":474
  *                                           tree.xmlDict* c_dict) nogil:
  *     cdef const_xmlChar* c_name = c_node.name
  *     if c_name is not NULL and \             # <<<<<<<<<<<<<<
@@ -12698,7 +12688,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNameForNode(xmlNode
   __pyx_t_2 = ((__pyx_v_c_name != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":478
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":475
  *     cdef const_xmlChar* c_name = c_node.name
  *     if c_name is not NULL and \
  *            c_node.type != tree.XML_TEXT_NODE and \             # <<<<<<<<<<<<<<
@@ -12708,7 +12698,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNameForNode(xmlNode
     switch (__pyx_v_c_node->type) {
       case XML_TEXT_NODE:
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":479
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":476
  *     if c_name is not NULL and \
  *            c_node.type != tree.XML_TEXT_NODE and \
  *            c_node.type != tree.XML_COMMENT_NODE:             # <<<<<<<<<<<<<<
@@ -12717,7 +12707,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNameForNode(xmlNode
  */
       case XML_COMMENT_NODE:
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":478
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":475
  *     cdef const_xmlChar* c_name = c_node.name
  *     if c_name is not NULL and \
  *            c_node.type != tree.XML_TEXT_NODE and \             # <<<<<<<<<<<<<<
@@ -12736,7 +12726,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNameForNode(xmlNode
   }
   if (__pyx_t_4) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":480
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":477
  *            c_node.type != tree.XML_TEXT_NODE and \
  *            c_node.type != tree.XML_COMMENT_NODE:
  *         if tree.xmlDictOwns(c_src_dict, c_node.name):             # <<<<<<<<<<<<<<
@@ -12746,7 +12736,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNameForNode(xmlNode
     __pyx_t_4 = (xmlDictOwns(__pyx_v_c_src_dict, __pyx_v_c_node->name) != 0);
     if (__pyx_t_4) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":482
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":479
  *         if tree.xmlDictOwns(c_src_dict, c_node.name):
  *             # c_name can be NULL on memory error, but we don't handle that here
  *             c_name = tree.xmlDictLookup(c_dict, c_name, -1)             # <<<<<<<<<<<<<<
@@ -12755,7 +12745,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNameForNode(xmlNode
  */
       __pyx_v_c_name = xmlDictLookup(__pyx_v_c_dict, __pyx_v_c_name, -1);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":483
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":480
  *             # c_name can be NULL on memory error, but we don't handle that here
  *             c_name = tree.xmlDictLookup(c_dict, c_name, -1)
  *             if c_name is not NULL:             # <<<<<<<<<<<<<<
@@ -12765,7 +12755,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNameForNode(xmlNode
       __pyx_t_4 = ((__pyx_v_c_name != NULL) != 0);
       if (__pyx_t_4) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":484
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":481
  *             c_name = tree.xmlDictLookup(c_dict, c_name, -1)
  *             if c_name is not NULL:
  *                 c_node.name = c_name             # <<<<<<<<<<<<<<
@@ -12783,7 +12773,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNameForNode(xmlNode
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":473
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":470
  *         c_node = c_node.next
  * 
  * cdef inline void fixThreadDictNameForNode(xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -12794,7 +12784,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNameForNode(xmlNode
   /* function exit code */
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":486
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":483
  *                 c_node.name = c_name
  * 
  * cdef inline void fixThreadDictContentForNode(xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -12807,7 +12797,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictContentForNode(xmlNo
   int __pyx_t_2;
   int __pyx_t_3;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":489
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":486
  *                                              tree.xmlDict* c_src_dict,
  *                                              tree.xmlDict* c_dict) nogil:
  *     if c_node.content is not NULL and \             # <<<<<<<<<<<<<<
@@ -12817,7 +12807,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictContentForNode(xmlNo
   __pyx_t_1 = ((__pyx_v_c_node->content != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":490
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":487
  *                                              tree.xmlDict* c_dict) nogil:
  *     if c_node.content is not NULL and \
  *            c_node.content is not <xmlChar*>&c_node.properties:             # <<<<<<<<<<<<<<
@@ -12831,7 +12821,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictContentForNode(xmlNo
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":491
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":488
  *     if c_node.content is not NULL and \
  *            c_node.content is not <xmlChar*>&c_node.properties:
  *         if tree.xmlDictOwns(c_src_dict, c_node.content):             # <<<<<<<<<<<<<<
@@ -12841,7 +12831,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictContentForNode(xmlNo
     __pyx_t_3 = (xmlDictOwns(__pyx_v_c_src_dict, __pyx_v_c_node->content) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":493
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":490
  *         if tree.xmlDictOwns(c_src_dict, c_node.content):
  *             # result can be NULL on memory error, but we don't handle that here
  *             c_node.content = <xmlChar*>tree.xmlDictLookup(c_dict, c_node.content, -1)             # <<<<<<<<<<<<<<
@@ -12856,7 +12846,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictContentForNode(xmlNo
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":486
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":483
  *                 c_node.name = c_name
  * 
  * cdef inline void fixThreadDictContentForNode(xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -12867,7 +12857,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictContentForNode(xmlNo
   /* function exit code */
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":495
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":492
  *             c_node.content = <xmlChar*>tree.xmlDictLookup(c_dict, c_node.content, -1)
  * 
  * cdef inline void fixThreadDictNsForNode(xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -12880,7 +12870,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNsForNode(xmlNode *_
   xmlNs *__pyx_t_1;
   int __pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":498
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":495
  *                                         tree.xmlDict* c_src_dict,
  *                                         tree.xmlDict* c_dict) nogil:
  *     cdef xmlNs* c_ns = c_node.nsDef             # <<<<<<<<<<<<<<
@@ -12890,7 +12880,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNsForNode(xmlNode *_
   __pyx_t_1 = __pyx_v_c_node->nsDef;
   __pyx_v_c_ns = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":499
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":496
  *                                         tree.xmlDict* c_dict) nogil:
  *     cdef xmlNs* c_ns = c_node.nsDef
  *     while c_ns is not NULL:             # <<<<<<<<<<<<<<
@@ -12901,7 +12891,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNsForNode(xmlNode *_
     __pyx_t_2 = ((__pyx_v_c_ns != NULL) != 0);
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":500
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":497
  *     cdef xmlNs* c_ns = c_node.nsDef
  *     while c_ns is not NULL:
  *         if c_ns.href is not NULL:             # <<<<<<<<<<<<<<
@@ -12911,7 +12901,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNsForNode(xmlNode *_
     __pyx_t_2 = ((__pyx_v_c_ns->href != NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":501
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":498
  *     while c_ns is not NULL:
  *         if c_ns.href is not NULL:
  *             if tree.xmlDictOwns(c_src_dict, c_ns.href):             # <<<<<<<<<<<<<<
@@ -12921,7 +12911,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNsForNode(xmlNode *_
       __pyx_t_2 = (xmlDictOwns(__pyx_v_c_src_dict, __pyx_v_c_ns->href) != 0);
       if (__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":502
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":499
  *         if c_ns.href is not NULL:
  *             if tree.xmlDictOwns(c_src_dict, c_ns.href):
  *                 c_ns.href = tree.xmlDictLookup(c_dict, c_ns.href, -1)             # <<<<<<<<<<<<<<
@@ -12936,7 +12926,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNsForNode(xmlNode *_
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":503
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":500
  *             if tree.xmlDictOwns(c_src_dict, c_ns.href):
  *                 c_ns.href = tree.xmlDictLookup(c_dict, c_ns.href, -1)
  *         if c_ns.prefix is not NULL:             # <<<<<<<<<<<<<<
@@ -12946,7 +12936,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNsForNode(xmlNode *_
     __pyx_t_2 = ((__pyx_v_c_ns->prefix != NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":504
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":501
  *                 c_ns.href = tree.xmlDictLookup(c_dict, c_ns.href, -1)
  *         if c_ns.prefix is not NULL:
  *             if tree.xmlDictOwns(c_src_dict, c_ns.prefix):             # <<<<<<<<<<<<<<
@@ -12956,7 +12946,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNsForNode(xmlNode *_
       __pyx_t_2 = (xmlDictOwns(__pyx_v_c_src_dict, __pyx_v_c_ns->prefix) != 0);
       if (__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":505
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":502
  *         if c_ns.prefix is not NULL:
  *             if tree.xmlDictOwns(c_src_dict, c_ns.prefix):
  *                 c_ns.prefix = tree.xmlDictLookup(c_dict, c_ns.prefix, -1)             # <<<<<<<<<<<<<<
@@ -12970,7 +12960,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNsForNode(xmlNode *_
     }
     __pyx_L7:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":506
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":503
  *             if tree.xmlDictOwns(c_src_dict, c_ns.prefix):
  *                 c_ns.prefix = tree.xmlDictLookup(c_dict, c_ns.prefix, -1)
  *         c_ns = c_ns.next             # <<<<<<<<<<<<<<
@@ -12979,7 +12969,7 @@ static CYTHON_INLINE void __pyx_f_4lxml_5etree_fixThreadDictNsForNode(xmlNode *_
     __pyx_v_c_ns = __pyx_t_1;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":495
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/proxy.pxi":492
  *             c_node.content = <xmlChar*>tree.xmlDictLookup(c_dict, c_node.content, -1)
  * 
  * cdef inline void fixThreadDictNsForNode(xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -13182,7 +13172,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__assertValidNode(struct LxmlElemen
       __Pyx_INCREF(((PyObject *)__pyx_v_element));
       PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_element));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_element));
-      __pyx_t_2 = PyObject_Call(__pyx_builtin_id, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_id, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_invalid_Element_proxy_at_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -13249,7 +13239,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__assertValidDoc(struct LxmlDocumen
       __Pyx_INCREF(((PyObject *)__pyx_v_doc));
       PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_doc));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_doc));
-      __pyx_t_2 = PyObject_Call(__pyx_builtin_id, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_id, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_invalid_Document_proxy_at_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 27; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -14451,7 +14441,7 @@ static int __pyx_f_4lxml_5etree__initNewElement(struct LxmlElement *__pyx_v_elem
  */
   __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_init_2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -14987,7 +14977,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
  */
   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_nsmap, __pyx_n_s_items); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -14995,7 +14985,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_nsdefs = ((PyObject*)__pyx_t_5);
@@ -15052,7 +15042,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
     __Pyx_INCREF(__pyx_v_item);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_item);
     __Pyx_GIVEREF(__pyx_v_item);
-    __pyx_t_8 = PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -15538,7 +15528,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_6);
     __pyx_t_6 = 0;
-    __pyx_t_6 = PyObject_Call(__pyx_builtin_sorted, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_sorted, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if (PyList_CheckExact(__pyx_t_6) || PyTuple_CheckExact(__pyx_t_6)) {
@@ -15676,7 +15666,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
  */
       __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_items); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -15684,7 +15674,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
       PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
       __Pyx_GIVEREF(__pyx_t_6);
       __pyx_t_6 = 0;
-      __pyx_t_6 = PyObject_Call(__pyx_builtin_sorted, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_sorted, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF_SET(__pyx_v_attrib, __pyx_t_6);
@@ -15734,7 +15724,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
  */
       __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_items); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_5 = PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF_SET(__pyx_v_attrib, __pyx_t_5);
@@ -15752,7 +15742,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
  */
       __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_items); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -15760,7 +15750,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
       PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
       __Pyx_GIVEREF(__pyx_t_6);
       __pyx_t_6 = 0;
-      __pyx_t_6 = PyObject_Call(__pyx_builtin_sorted, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_sorted, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF_SET(__pyx_v_attrib, __pyx_t_6);
@@ -19039,7 +19029,7 @@ static PyObject *__pyx_f_4lxml_5etree__stripEncodingDeclaration(PyObject *__pyx_
   __Pyx_INCREF(__pyx_v_xml_string);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_xml_string);
   __Pyx_GIVEREF(__pyx_v_xml_string);
-  __pyx_t_2 = PyObject_Call(__pyx_v_4lxml_5etree___REPLACE_XML_ENCODING, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree___REPLACE_XML_ENCODING, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -19097,7 +19087,7 @@ static int __pyx_f_4lxml_5etree__hasEncodingDeclaration(PyObject *__pyx_v_xml_st
   __Pyx_INCREF(__pyx_v_xml_string);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_xml_string);
   __Pyx_GIVEREF(__pyx_v_xml_string);
-  __pyx_t_2 = PyObject_Call(__pyx_v_4lxml_5etree___HAS_XML_ENCODING, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree___HAS_XML_ENCODING, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != Py_None);
@@ -23258,9 +23248,9 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_t_4;
+  PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   Py_ssize_t __pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
@@ -23332,17 +23322,14 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *         elements = list(elements)
  * 
  */
-  __Pyx_INCREF(__pyx_v_elements);
-  __pyx_t_2 = __pyx_v_elements;
-  __pyx_t_1 = PyList_Check(__pyx_t_2); 
+  __pyx_t_1 = PyList_Check(__pyx_v_elements); 
   if (!__pyx_t_1) {
-    __pyx_t_3 = PyTuple_Check(__pyx_t_2); 
-    __pyx_t_4 = __pyx_t_3;
+    __pyx_t_2 = PyTuple_Check(__pyx_v_elements); 
+    __pyx_t_3 = __pyx_t_2;
   } else {
-    __pyx_t_4 = __pyx_t_1;
+    __pyx_t_3 = __pyx_t_1;
   }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_1 = ((!(__pyx_t_4 != 0)) != 0);
+  __pyx_t_1 = ((!(__pyx_t_3 != 0)) != 0);
   if (__pyx_t_1) {
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1131
@@ -23352,14 +23339,14 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  * 
  *     if step > 1:
  */
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_elements);
-    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_elements);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_elements);
     __Pyx_GIVEREF(__pyx_v_elements);
-    __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_elements, __pyx_t_5);
     __pyx_t_5 = 0;
     goto __pyx_L4;
@@ -23405,21 +23392,21 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
       __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_seqlength); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_slicelength); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_slicelength); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
       PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
       __Pyx_GIVEREF(__pyx_t_5);
-      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2);
-      __Pyx_GIVEREF(__pyx_t_2);
+      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_4);
       __pyx_t_5 = 0;
-      __pyx_t_2 = 0;
-      __pyx_t_2 = PyUnicode_Format(__pyx_kp_u_attempt_to_assign_sequence_of_si, __pyx_t_7); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_4 = 0;
+      __pyx_t_4 = PyUnicode_Format(__pyx_kp_u_attempt_to_assign_sequence_of_si, __pyx_t_7); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_2, 0, 0);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_4, 0, 0);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     goto __pyx_L5;
@@ -23454,30 +23441,30 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *                 _appendChild(parent, element)
  */
       if (PyList_CheckExact(__pyx_v_elements) || PyTuple_CheckExact(__pyx_v_elements)) {
-        __pyx_t_2 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
+        __pyx_t_4 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
         __pyx_t_8 = NULL;
       } else {
-        __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_2);
-        __pyx_t_8 = Py_TYPE(__pyx_t_2)->tp_iternext;
+        __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_4);
+        __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext;
       }
       for (;;) {
-        if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_2)) {
-          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
+        if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_4)) {
+          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
           #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #endif
-        } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_2)) {
-          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+        } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_4)) {
+          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
           #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #endif
         } else {
-          __pyx_t_7 = __pyx_t_8(__pyx_t_2);
+          __pyx_t_7 = __pyx_t_8(__pyx_t_4);
           if (unlikely(!__pyx_t_7)) {
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
@@ -23518,7 +23505,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
         __pyx_t_9 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       goto __pyx_L8;
     }
     /*else*/ {
@@ -23531,30 +23518,30 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *                 _prependChild(parent, element)
  */
       if (PyList_CheckExact(__pyx_v_elements) || PyTuple_CheckExact(__pyx_v_elements)) {
-        __pyx_t_2 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
+        __pyx_t_4 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
         __pyx_t_8 = NULL;
       } else {
-        __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_2);
-        __pyx_t_8 = Py_TYPE(__pyx_t_2)->tp_iternext;
+        __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_4);
+        __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext;
       }
       for (;;) {
-        if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_2)) {
-          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
+        if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_4)) {
+          if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
           #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #endif
-        } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_2)) {
-          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+        } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_4)) {
+          if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
           #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #else
-          __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1147; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #endif
         } else {
-          __pyx_t_7 = __pyx_t_8(__pyx_t_2);
+          __pyx_t_7 = __pyx_t_8(__pyx_t_4);
           if (unlikely(!__pyx_t_7)) {
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
@@ -23595,7 +23582,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
         __pyx_t_9 = __pyx_f_4lxml_5etree__prependChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     }
     __pyx_L8:;
 
@@ -23671,12 +23658,12 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   while (1) {
     __pyx_t_1 = ((__pyx_v_c_node != NULL) != 0);
     if (__pyx_t_1) {
-      __pyx_t_4 = ((__pyx_v_c < __pyx_v_slicelength) != 0);
-      __pyx_t_3 = __pyx_t_4;
+      __pyx_t_3 = ((__pyx_v_c < __pyx_v_slicelength) != 0);
+      __pyx_t_2 = __pyx_t_3;
     } else {
-      __pyx_t_3 = __pyx_t_1;
+      __pyx_t_2 = __pyx_t_1;
     }
-    if (!__pyx_t_3) break;
+    if (!__pyx_t_2) break;
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1167
  *     c_next = c_node
@@ -23706,10 +23693,10 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *         c += 1
  *         c_node = c_next
  */
-    __pyx_t_2 = ((PyObject *)__pyx_v_parent->_doc);
-    __Pyx_INCREF(__pyx_t_2);
-    __pyx_t_9 = __pyx_f_4lxml_5etree__removeNode(((struct LxmlDocument *)__pyx_t_2), __pyx_v_c_node); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __pyx_t_4 = ((PyObject *)__pyx_v_parent->_doc);
+    __Pyx_INCREF(__pyx_t_4);
+    __pyx_t_9 = __pyx_f_4lxml_5etree__removeNode(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_node); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1170
  *             c_next = next_element(c_next)
@@ -23737,10 +23724,10 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  * 
  *     # find the first node right of the new insertion point
  */
-  __pyx_t_2 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF_SET(__pyx_v_elements, __pyx_t_2);
-  __pyx_t_2 = 0;
+  __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF_SET(__pyx_v_elements, __pyx_t_4);
+  __pyx_t_4 = 0;
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1177
  * 
@@ -23749,8 +23736,8 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *         if c_orig_neighbour is not NULL:
  *             c_node = next_element(c_orig_neighbour)
  */
-  __pyx_t_3 = (__pyx_v_left_to_right != 0);
-  if (__pyx_t_3) {
+  __pyx_t_2 = (__pyx_v_left_to_right != 0);
+  if (__pyx_t_2) {
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1178
  *     # find the first node right of the new insertion point
@@ -23759,8 +23746,8 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *             c_node = next_element(c_orig_neighbour)
  *         else:
  */
-    __pyx_t_3 = ((__pyx_v_c_orig_neighbour != NULL) != 0);
-    if (__pyx_t_3) {
+    __pyx_t_2 = ((__pyx_v_c_orig_neighbour != NULL) != 0);
+    if (__pyx_t_2) {
 
       /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1179
  *     if left_to_right:
@@ -23794,8 +23781,8 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *         # at the end, but reversed stepping
  *         # append one element and go to the next insertion point
  */
-  __pyx_t_3 = ((__pyx_v_c_orig_neighbour == NULL) != 0);
-  if (__pyx_t_3) {
+  __pyx_t_2 = ((__pyx_v_c_orig_neighbour == NULL) != 0);
+  if (__pyx_t_2) {
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1186
  *         # at the end, but reversed stepping
@@ -23805,30 +23792,30 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *             _appendChild(parent, element)
  */
     if (PyList_CheckExact(__pyx_v_elements) || PyTuple_CheckExact(__pyx_v_elements)) {
-      __pyx_t_2 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
+      __pyx_t_4 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
       __pyx_t_8 = NULL;
     } else {
-      __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_8 = Py_TYPE(__pyx_t_2)->tp_iternext;
+      __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext;
     }
     for (;;) {
-      if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_2)) {
-        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
+      if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_4)) {
+        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
-      } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_2)) {
-        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+      } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_4)) {
+        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else {
-        __pyx_t_7 = __pyx_t_8(__pyx_t_2);
+        __pyx_t_7 = __pyx_t_8(__pyx_t_4);
         if (unlikely(!__pyx_t_7)) {
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
@@ -23852,8 +23839,8 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
       #ifndef CYTHON_WITHOUT_ASSERTIONS
       if (unlikely(!Py_OptimizeFlag)) {
-        __pyx_t_3 = (((PyObject *)__pyx_v_element) != Py_None);
-        if (unlikely(!(__pyx_t_3 != 0))) {
+        __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
+        if (unlikely(!(__pyx_t_2 != 0))) {
           PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None);
           {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
@@ -23886,8 +23873,8 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *                 slicelength -= 1
  *                 for i in range(1, step):
  */
-      __pyx_t_3 = ((__pyx_v_slicelength > 0) != 0);
-      if (__pyx_t_3) {
+      __pyx_t_2 = ((__pyx_v_slicelength > 0) != 0);
+      if (__pyx_t_2) {
 
         /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1191
  *             c_node = element._c_node
@@ -23932,7 +23919,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       goto __pyx_L21_break;
     }
     __pyx_L21_break:;
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L18;
   }
   __pyx_L18:;
@@ -23944,8 +23931,8 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *         # adjust step size after removing slice as we are not stepping
  *         # over the newly inserted elements
  */
-  __pyx_t_3 = (__pyx_v_left_to_right != 0);
-  if (__pyx_t_3) {
+  __pyx_t_2 = (__pyx_v_left_to_right != 0);
+  if (__pyx_t_2) {
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1199
  *         # adjust step size after removing slice as we are not stepping
@@ -23966,8 +23953,8 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *         for element in elements:
  *             assert element is not None, u"Node must not be None"
  */
-  __pyx_t_3 = ((__pyx_v_c_node != NULL) != 0);
-  if (__pyx_t_3) {
+  __pyx_t_2 = ((__pyx_v_c_node != NULL) != 0);
+  if (__pyx_t_2) {
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1203
  *     # now insert elements where we removed them
@@ -23977,30 +23964,30 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *             _assertValidNode(element)
  */
     if (PyList_CheckExact(__pyx_v_elements) || PyTuple_CheckExact(__pyx_v_elements)) {
-      __pyx_t_2 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
+      __pyx_t_4 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
       __pyx_t_8 = NULL;
     } else {
-      __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_8 = Py_TYPE(__pyx_t_2)->tp_iternext;
+      __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext;
     }
     for (;;) {
-      if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_2)) {
-        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
+      if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_4)) {
+        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
-      } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_2)) {
-        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+      } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_4)) {
+        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else {
-        __pyx_t_7 = __pyx_t_8(__pyx_t_2);
+        __pyx_t_7 = __pyx_t_8(__pyx_t_4);
         if (unlikely(!__pyx_t_7)) {
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
@@ -24024,8 +24011,8 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
       #ifndef CYTHON_WITHOUT_ASSERTIONS
       if (unlikely(!Py_OptimizeFlag)) {
-        __pyx_t_3 = (((PyObject *)__pyx_v_element) != Py_None);
-        if (unlikely(!(__pyx_t_3 != 0))) {
+        __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
+        if (unlikely(!(__pyx_t_2 != 0))) {
           PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None);
           {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
@@ -24098,8 +24085,8 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *                 slicelength = slicelength - 1
  *                 for i in range(step):
  */
-      __pyx_t_3 = ((__pyx_v_slicelength > 0) != 0);
-      if (__pyx_t_3) {
+      __pyx_t_2 = ((__pyx_v_slicelength > 0) != 0);
+      if (__pyx_t_2) {
 
         /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1217
  *             # stop at the end of the slice
@@ -24138,8 +24125,8 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *                     break
  *         else:
  */
-        __pyx_t_3 = ((__pyx_v_c_node == NULL) != 0);
-        if (__pyx_t_3) {
+        __pyx_t_2 = ((__pyx_v_c_node == NULL) != 0);
+        if (__pyx_t_2) {
 
           /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1221
  *                     c_node = next_element(c_node)
@@ -24164,11 +24151,11 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *     # append the remaining elements at the respective end
  */
       __pyx_r = 0;
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       goto __pyx_L0;
     }
     __pyx_L28_break:;
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L26;
   }
   __pyx_L26:;
@@ -24180,8 +24167,8 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *         for element in elements:
  *             assert element is not None, u"Node must not be None"
  */
-  __pyx_t_3 = (__pyx_v_left_to_right != 0);
-  if (__pyx_t_3) {
+  __pyx_t_2 = (__pyx_v_left_to_right != 0);
+  if (__pyx_t_2) {
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1228
  *     # append the remaining elements at the respective end
@@ -24191,30 +24178,30 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *             _assertValidNode(element)
  */
     if (PyList_CheckExact(__pyx_v_elements) || PyTuple_CheckExact(__pyx_v_elements)) {
-      __pyx_t_2 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
+      __pyx_t_4 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
       __pyx_t_8 = NULL;
     } else {
-      __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_8 = Py_TYPE(__pyx_t_2)->tp_iternext;
+      __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext;
     }
     for (;;) {
-      if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_2)) {
-        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
+      if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_4)) {
+        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
-      } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_2)) {
-        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+      } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_4)) {
+        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else {
-        __pyx_t_7 = __pyx_t_8(__pyx_t_2);
+        __pyx_t_7 = __pyx_t_8(__pyx_t_4);
         if (unlikely(!__pyx_t_7)) {
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
@@ -24238,8 +24225,8 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
       #ifndef CYTHON_WITHOUT_ASSERTIONS
       if (unlikely(!Py_OptimizeFlag)) {
-        __pyx_t_3 = (((PyObject *)__pyx_v_element) != Py_None);
-        if (unlikely(!(__pyx_t_3 != 0))) {
+        __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
+        if (unlikely(!(__pyx_t_2 != 0))) {
           PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None);
           {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1229; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
@@ -24264,7 +24251,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
       __pyx_t_9 = __pyx_f_4lxml_5etree__appendChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1231; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L34;
   }
   /*else*/ {
@@ -24277,30 +24264,30 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  *             _assertValidNode(element)
  */
     if (PyList_CheckExact(__pyx_v_elements) || PyTuple_CheckExact(__pyx_v_elements)) {
-      __pyx_t_2 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
+      __pyx_t_4 = __pyx_v_elements; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
       __pyx_t_8 = NULL;
     } else {
-      __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_8 = Py_TYPE(__pyx_t_2)->tp_iternext;
+      __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext;
     }
     for (;;) {
-      if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_2)) {
-        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
+      if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_4)) {
+        if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
-      } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_2)) {
-        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+      } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_4)) {
+        if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_7 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1233; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else {
-        __pyx_t_7 = __pyx_t_8(__pyx_t_2);
+        __pyx_t_7 = __pyx_t_8(__pyx_t_4);
         if (unlikely(!__pyx_t_7)) {
           PyObject* exc_type = PyErr_Occurred();
           if (exc_type) {
@@ -24324,8 +24311,8 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
       #ifndef CYTHON_WITHOUT_ASSERTIONS
       if (unlikely(!Py_OptimizeFlag)) {
-        __pyx_t_3 = (((PyObject *)__pyx_v_element) != Py_None);
-        if (unlikely(!(__pyx_t_3 != 0))) {
+        __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
+        if (unlikely(!(__pyx_t_2 != 0))) {
           PyErr_SetObject(PyExc_AssertionError, __pyx_kp_u_Node_must_not_be_None);
           {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1234; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
@@ -24350,7 +24337,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
       __pyx_t_9 = __pyx_f_4lxml_5etree__prependChild(__pyx_v_parent, __pyx_v_element); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
   __pyx_L34:;
 
@@ -24374,7 +24361,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_AddTraceback("lxml.etree._replaceSlice", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -24469,7 +24456,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
  *         c_parent = c_parent.parent
  *     # store possible text node
  */
-      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_Raise(__pyx_t_4, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -24648,7 +24635,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
  *         c_parent = c_parent.parent
  *     # store possible text node
  */
-      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_Raise(__pyx_t_4, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -25766,7 +25753,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
     __Pyx_INCREF(__pyx_v_s);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_s);
     __Pyx_GIVEREF(__pyx_v_s);
-    __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyBytes_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyBytes_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1390; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_utf8_string = ((PyObject*)__pyx_t_5);
@@ -25801,7 +25788,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_TypeError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1393; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
@@ -25827,7 +25814,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
  *             "All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters")
  *     return utf8_string
  */
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -26365,7 +26352,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
  * 
  * cdef object _decodeFilename(const_xmlChar* c_path):
  */
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -27008,7 +26995,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
  * 
  * cdef tuple _getNsTag(tag):
  */
-    __pyx_t_10 = PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_10);
     __Pyx_Raise(__pyx_t_10, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
@@ -27947,7 +27934,7 @@ static int __pyx_f_4lxml_5etree__tagValidOrRaise(PyObject *__pyx_v_tag_utf) {
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1575; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
@@ -28042,7 +28029,7 @@ static int __pyx_f_4lxml_5etree__htmlTagValidOrRaise(PyObject *__pyx_v_tag_utf)
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
@@ -28137,7 +28124,7 @@ static int __pyx_f_4lxml_5etree__attributeValidOrRaise(PyObject *__pyx_v_name_ut
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
@@ -28232,7 +28219,7 @@ static int __pyx_f_4lxml_5etree__prefixValidOrRaise(PyObject *__pyx_v_tag_utf) {
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
@@ -28337,7 +28324,7 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) {
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1600; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
@@ -28637,7 +28624,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
       __Pyx_XDECREF(__pyx_r);
       __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_geturl); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1627; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1627; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1627; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_r = __pyx_t_5;
@@ -28726,7 +28713,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
         __Pyx_INCREF(__pyx_v_filename);
         PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_filename);
         __Pyx_GIVEREF(__pyx_v_filename);
-        __pyx_t_4 = PyObject_Call(__pyx_v_4lxml_5etree_os_path_abspath, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1634; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_os_path_abspath, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1634; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __pyx_r = __pyx_t_4;
@@ -28816,7 +28803,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
         __Pyx_INCREF(__pyx_v_filename);
         PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_filename);
         __Pyx_GIVEREF(__pyx_v_filename);
-        __pyx_t_5 = PyObject_Call(__pyx_v_4lxml_5etree_os_path_abspath, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1641; __pyx_clineno = __LINE__; goto __pyx_L20_error;}
+        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_os_path_abspath, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1641; __pyx_clineno = __LINE__; goto __pyx_L20_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_r = __pyx_t_5;
@@ -28928,7 +28915,7 @@ static PyObject *__pyx_pf_4lxml_5etree_2clear_error_log(CYTHON_UNUSED PyObject *
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_clear); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -29659,7 +29646,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_LogEntry_11domain_name___get__(struct _
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_u_unknown);
   __Pyx_GIVEREF(__pyx_n_u_unknown);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -29796,7 +29783,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_LogEntry_9type_name___get__(struct __py
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_u_unknown);
   __Pyx_GIVEREF(__pyx_n_u_unknown);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(__pyx_v_getName, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_getName, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_2;
@@ -29880,7 +29867,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_LogEntry_10level_name___get__(struct __
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_u_unknown);
   __Pyx_GIVEREF(__pyx_n_u_unknown);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -30767,7 +30754,7 @@ static PyObject *__pyx_f_4lxml_5etree_13_BaseErrorLog_copy(struct __pyx_obj_4lxm
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4lxml_5etree_13_BaseErrorLog_3copy)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -30793,7 +30780,7 @@ static PyObject *__pyx_f_4lxml_5etree_13_BaseErrorLog_copy(struct __pyx_obj_4lxm
   __Pyx_INCREF(__pyx_v_self->last_error);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->last_error);
   __Pyx_GIVEREF(__pyx_v_self->last_error);
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__BaseErrorLog)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__BaseErrorLog)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -30944,7 +30931,7 @@ static PyObject *__pyx_f_4lxml_5etree_13_BaseErrorLog_receive(CYTHON_UNUSED stru
       __Pyx_INCREF(((PyObject *)__pyx_v_entry));
       PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_entry));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_entry));
-      __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_r = __pyx_t_3;
@@ -31500,7 +31487,7 @@ static PyObject *__pyx_f_4lxml_5etree_13_BaseErrorLog__buildParseException(struc
     PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_int_0);
     __Pyx_GIVEREF(__pyx_int_0);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_v_exctype, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_exctype, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_r = __pyx_t_3;
@@ -31682,7 +31669,7 @@ static PyObject *__pyx_f_4lxml_5etree_13_BaseErrorLog__buildParseException(struc
   __pyx_t_4 = 0;
   __pyx_t_6 = 0;
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(__pyx_v_exctype, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_exctype, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __pyx_r = __pyx_t_3;
@@ -32158,7 +32145,7 @@ static int __pyx_pf_4lxml_5etree_13_ListErrorLog___init__(struct __pyx_obj_4lxml
   __Pyx_INCREF(__pyx_v_last_error);
   PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_last_error);
   __Pyx_GIVEREF(__pyx_v_last_error);
-  __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -32232,7 +32219,7 @@ static PyObject *__pyx_f_4lxml_5etree_13_ListErrorLog_copy(struct __pyx_obj_4lxm
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_3copy)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -32260,7 +32247,7 @@ static PyObject *__pyx_f_4lxml_5etree_13_ListErrorLog_copy(struct __pyx_obj_4lxm
   __Pyx_INCREF(__pyx_v_self->__pyx_base.last_error);
   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_self->__pyx_base.last_error);
   __Pyx_GIVEREF(__pyx_v_self->__pyx_base.last_error);
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_log = ((struct __pyx_obj_4lxml_5etree__ListErrorLog *)__pyx_t_2);
@@ -32421,7 +32408,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_4__iter__(struct __pyx_ob
     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = PyObject_Call(__pyx_v_4lxml_5etree_islice, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_islice, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_entries, __pyx_t_1);
@@ -32982,10 +32969,10 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_16filter_domains(struct _
   PyObject *__pyx_v_filtered = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_t_4;
+  PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   Py_ssize_t __pyx_t_6;
   PyObject *(*__pyx_t_7)(PyObject *);
@@ -33003,18 +32990,15 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_16filter_domains(struct _
  *             domains = (domains,)
  *         filtered = [entry for entry in self if entry.domain in domains]
  */
-  __Pyx_INCREF(__pyx_v_domains);
-  __pyx_t_1 = __pyx_v_domains;
-  __pyx_t_2 = PyInt_Check(__pyx_t_1); 
-  if (!__pyx_t_2) {
-    __pyx_t_3 = PyLong_Check(__pyx_t_1); 
-    __pyx_t_4 = __pyx_t_3;
+  __pyx_t_1 = PyInt_Check(__pyx_v_domains); 
+  if (!__pyx_t_1) {
+    __pyx_t_2 = PyLong_Check(__pyx_v_domains); 
+    __pyx_t_3 = __pyx_t_2;
   } else {
-    __pyx_t_4 = __pyx_t_2;
+    __pyx_t_3 = __pyx_t_1;
   }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_2 = (__pyx_t_4 != 0);
-  if (__pyx_t_2) {
+  __pyx_t_1 = (__pyx_t_3 != 0);
+  if (__pyx_t_1) {
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":313
  *         cdef _LogEntry entry
@@ -33023,13 +33007,13 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_16filter_domains(struct _
  *         filtered = [entry for entry in self if entry.domain in domains]
  *         return _ListErrorLog(filtered, None, None)
  */
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 313; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_domains);
-    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_domains);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_domains);
     __Pyx_GIVEREF(__pyx_v_domains);
-    __Pyx_DECREF_SET(__pyx_v_domains, __pyx_t_1);
-    __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_domains, __pyx_t_4);
+    __pyx_t_4 = 0;
     goto __pyx_L3;
   }
   __pyx_L3:;
@@ -33041,8 +33025,8 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_16filter_domains(struct _
  *         return _ListErrorLog(filtered, None, None)
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
   if (PyList_CheckExact(((PyObject *)__pyx_v_self)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self))) {
     __pyx_t_5 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
     __pyx_t_7 = NULL;
@@ -33083,18 +33067,18 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_16filter_domains(struct _
     __pyx_t_8 = 0;
     __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_entry->domain); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_2 = (__Pyx_PySequence_Contains(__pyx_t_8, __pyx_v_domains, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_t_8, __pyx_v_domains, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_4 = (__pyx_t_2 != 0);
-    if (__pyx_t_4) {
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_entry))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = (__pyx_t_1 != 0);
+    if (__pyx_t_3) {
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_v_entry))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L6;
     }
     __pyx_L6:;
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_v_filtered = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_filtered = ((PyObject*)__pyx_t_4);
+  __pyx_t_4 = 0;
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":315
  *             domains = (domains,)
@@ -33104,20 +33088,20 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_16filter_domains(struct _
  *     def filter_types(self, types):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_filtered);
-  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_filtered);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_filtered);
   __Pyx_GIVEREF(__pyx_v_filtered);
   __Pyx_INCREF(Py_None);
-  PyTuple_SET_ITEM(__pyx_t_1, 1, Py_None);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, Py_None);
   __Pyx_GIVEREF(Py_None);
   __Pyx_INCREF(Py_None);
-  PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
+  PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None);
   __Pyx_GIVEREF(Py_None);
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
@@ -33132,7 +33116,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_16filter_domains(struct _
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_8);
   __Pyx_AddTraceback("lxml.etree._ListErrorLog.filter_domains", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -33173,10 +33157,10 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_18filter_types(struct __p
   PyObject *__pyx_v_filtered = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_t_4;
+  PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   Py_ssize_t __pyx_t_6;
   PyObject *(*__pyx_t_7)(PyObject *);
@@ -33194,18 +33178,15 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_18filter_types(struct __p
  *             types = (types,)
  *         filtered = [entry for entry in self if entry.type in types]
  */
-  __Pyx_INCREF(__pyx_v_types);
-  __pyx_t_1 = __pyx_v_types;
-  __pyx_t_2 = PyInt_Check(__pyx_t_1); 
-  if (!__pyx_t_2) {
-    __pyx_t_3 = PyLong_Check(__pyx_t_1); 
-    __pyx_t_4 = __pyx_t_3;
+  __pyx_t_1 = PyInt_Check(__pyx_v_types); 
+  if (!__pyx_t_1) {
+    __pyx_t_2 = PyLong_Check(__pyx_v_types); 
+    __pyx_t_3 = __pyx_t_2;
   } else {
-    __pyx_t_4 = __pyx_t_2;
+    __pyx_t_3 = __pyx_t_1;
   }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_2 = (__pyx_t_4 != 0);
-  if (__pyx_t_2) {
+  __pyx_t_1 = (__pyx_t_3 != 0);
+  if (__pyx_t_1) {
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":325
  *         cdef _LogEntry entry
@@ -33214,13 +33195,13 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_18filter_types(struct __p
  *         filtered = [entry for entry in self if entry.type in types]
  *         return _ListErrorLog(filtered, None, None)
  */
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 325; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_types);
-    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_types);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_types);
     __Pyx_GIVEREF(__pyx_v_types);
-    __Pyx_DECREF_SET(__pyx_v_types, __pyx_t_1);
-    __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_types, __pyx_t_4);
+    __pyx_t_4 = 0;
     goto __pyx_L3;
   }
   __pyx_L3:;
@@ -33232,8 +33213,8 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_18filter_types(struct __p
  *         return _ListErrorLog(filtered, None, None)
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
   if (PyList_CheckExact(((PyObject *)__pyx_v_self)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self))) {
     __pyx_t_5 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
     __pyx_t_7 = NULL;
@@ -33274,18 +33255,18 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_18filter_types(struct __p
     __pyx_t_8 = 0;
     __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_entry->type); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_2 = (__Pyx_PySequence_Contains(__pyx_t_8, __pyx_v_types, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_t_8, __pyx_v_types, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_4 = (__pyx_t_2 != 0);
-    if (__pyx_t_4) {
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_entry))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = (__pyx_t_1 != 0);
+    if (__pyx_t_3) {
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_v_entry))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L6;
     }
     __pyx_L6:;
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_v_filtered = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_filtered = ((PyObject*)__pyx_t_4);
+  __pyx_t_4 = 0;
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":327
  *             types = (types,)
@@ -33295,20 +33276,20 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_18filter_types(struct __p
  *     def filter_levels(self, levels):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_filtered);
-  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_filtered);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_filtered);
   __Pyx_GIVEREF(__pyx_v_filtered);
   __Pyx_INCREF(Py_None);
-  PyTuple_SET_ITEM(__pyx_t_1, 1, Py_None);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, Py_None);
   __Pyx_GIVEREF(Py_None);
   __Pyx_INCREF(Py_None);
-  PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
+  PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None);
   __Pyx_GIVEREF(Py_None);
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
@@ -33323,7 +33304,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_18filter_types(struct __p
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_8);
   __Pyx_AddTraceback("lxml.etree._ListErrorLog.filter_types", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -33364,10 +33345,10 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_20filter_levels(struct __
   PyObject *__pyx_v_filtered = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_t_4;
+  PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   Py_ssize_t __pyx_t_6;
   PyObject *(*__pyx_t_7)(PyObject *);
@@ -33385,18 +33366,15 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_20filter_levels(struct __
  *             levels = (levels,)
  *         filtered = [entry for entry in self if entry.level in levels]
  */
-  __Pyx_INCREF(__pyx_v_levels);
-  __pyx_t_1 = __pyx_v_levels;
-  __pyx_t_2 = PyInt_Check(__pyx_t_1); 
-  if (!__pyx_t_2) {
-    __pyx_t_3 = PyLong_Check(__pyx_t_1); 
-    __pyx_t_4 = __pyx_t_3;
+  __pyx_t_1 = PyInt_Check(__pyx_v_levels); 
+  if (!__pyx_t_1) {
+    __pyx_t_2 = PyLong_Check(__pyx_v_levels); 
+    __pyx_t_3 = __pyx_t_2;
   } else {
-    __pyx_t_4 = __pyx_t_2;
+    __pyx_t_3 = __pyx_t_1;
   }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_2 = (__pyx_t_4 != 0);
-  if (__pyx_t_2) {
+  __pyx_t_1 = (__pyx_t_3 != 0);
+  if (__pyx_t_1) {
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":337
  *         cdef _LogEntry entry
@@ -33405,13 +33383,13 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_20filter_levels(struct __
  *         filtered = [entry for entry in self if entry.level in levels]
  *         return _ListErrorLog(filtered, None, None)
  */
-    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_levels);
-    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_levels);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_levels);
     __Pyx_GIVEREF(__pyx_v_levels);
-    __Pyx_DECREF_SET(__pyx_v_levels, __pyx_t_1);
-    __pyx_t_1 = 0;
+    __Pyx_DECREF_SET(__pyx_v_levels, __pyx_t_4);
+    __pyx_t_4 = 0;
     goto __pyx_L3;
   }
   __pyx_L3:;
@@ -33423,8 +33401,8 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_20filter_levels(struct __
  *         return _ListErrorLog(filtered, None, None)
  * 
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
   if (PyList_CheckExact(((PyObject *)__pyx_v_self)) || PyTuple_CheckExact(((PyObject *)__pyx_v_self))) {
     __pyx_t_5 = ((PyObject *)__pyx_v_self); __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
     __pyx_t_7 = NULL;
@@ -33465,18 +33443,18 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_20filter_levels(struct __
     __pyx_t_8 = 0;
     __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_entry->level); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_2 = (__Pyx_PySequence_Contains(__pyx_t_8, __pyx_v_levels, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PySequence_Contains(__pyx_t_8, __pyx_v_levels, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_4 = (__pyx_t_2 != 0);
-    if (__pyx_t_4) {
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_v_entry))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = (__pyx_t_1 != 0);
+    if (__pyx_t_3) {
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_4, (PyObject*)__pyx_v_entry))) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L6;
     }
     __pyx_L6:;
   }
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-  __pyx_v_filtered = ((PyObject*)__pyx_t_1);
-  __pyx_t_1 = 0;
+  __pyx_v_filtered = ((PyObject*)__pyx_t_4);
+  __pyx_t_4 = 0;
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlerror.pxi":339
  *             levels = (levels,)
@@ -33486,20 +33464,20 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_20filter_levels(struct __
  *     def filter_from_level(self, level):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_filtered);
-  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_filtered);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_filtered);
   __Pyx_GIVEREF(__pyx_v_filtered);
   __Pyx_INCREF(Py_None);
-  PyTuple_SET_ITEM(__pyx_t_1, 1, Py_None);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, Py_None);
   __Pyx_GIVEREF(Py_None);
   __Pyx_INCREF(Py_None);
-  PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
+  PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None);
   __Pyx_GIVEREF(Py_None);
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
@@ -33514,7 +33492,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_20filter_levels(struct __
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_8);
   __Pyx_AddTraceback("lxml.etree._ListErrorLog.filter_levels", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -33649,7 +33627,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_22filter_from_level(struc
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
   __Pyx_GIVEREF(Py_None);
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 348; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -33733,7 +33711,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_24filter_from_fatals(stru
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -33815,7 +33793,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_26filter_from_errors(stru
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 362; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -33897,7 +33875,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13_ListErrorLog_28filter_from_warnings(st
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -34054,7 +34032,7 @@ static int __pyx_pf_4lxml_5etree_9_ErrorLog_2__init__(struct __pyx_obj_4lxml_5et
   PyTuple_SET_ITEM(__pyx_t_3, 3, Py_None);
   __Pyx_GIVEREF(Py_None);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -34417,7 +34395,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_ErrorLog_clear(struct __pyx_obj_4lxml_5e
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4lxml_5etree_9_ErrorLog_7clear)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 418; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -34562,7 +34540,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_ErrorLog_copy(struct __pyx_obj_4lxml_5et
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4lxml_5etree_9_ErrorLog_9copy)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -34613,7 +34591,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_ErrorLog_copy(struct __pyx_obj_4lxml_5et
   PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_self->__pyx_base.__pyx_base.last_error);
   __Pyx_GIVEREF(__pyx_v_self->__pyx_base.__pyx_base.last_error);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 427; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
@@ -34788,7 +34766,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_ErrorLog_receive(struct __pyx_obj_4lxml_
       __Pyx_INCREF(((PyObject *)__pyx_v_entry));
       PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_entry));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_entry));
-      __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_r = __pyx_t_3;
@@ -34999,7 +34977,7 @@ static int __pyx_pf_4lxml_5etree_15_DomainErrorLog___init__(struct __pyx_obj_4lx
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -35017,7 +34995,7 @@ static int __pyx_pf_4lxml_5etree_15_DomainErrorLog___init__(struct __pyx_obj_4lx
   __Pyx_INCREF(__pyx_v_domains);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_domains);
   __Pyx_GIVEREF(__pyx_v_domains);
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_accepted_domains, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -35079,7 +35057,7 @@ static PyObject *__pyx_f_4lxml_5etree_15_DomainErrorLog_receive(struct __pyx_obj
       __Pyx_INCREF(((PyObject *)__pyx_v_entry));
       PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_entry));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_entry));
-      __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_r = __pyx_t_3;
@@ -35277,7 +35255,7 @@ static int __pyx_pf_4lxml_5etree_17_RotatingErrorLog___init__(struct __pyx_obj_4
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -35354,7 +35332,7 @@ static PyObject *__pyx_f_4lxml_5etree_17_RotatingErrorLog_receive(struct __pyx_o
       __Pyx_INCREF(((PyObject *)__pyx_v_entry));
       PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_entry));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_entry));
-      __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_r = __pyx_t_3;
@@ -35665,7 +35643,7 @@ static int __pyx_pf_4lxml_5etree_10PyErrorLog___init__(struct __pyx_obj_4lxml_5e
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None);
   __Pyx_GIVEREF(Py_None);
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -35810,7 +35788,7 @@ static int __pyx_pf_4lxml_5etree_10PyErrorLog___init__(struct __pyx_obj_4lxml_5e
       __Pyx_INCREF(__pyx_v_logger_name);
       PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_logger_name);
       __Pyx_GIVEREF(__pyx_v_logger_name);
-      __pyx_t_1 = PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -35829,7 +35807,7 @@ static int __pyx_pf_4lxml_5etree_10PyErrorLog___init__(struct __pyx_obj_4lxml_5e
  */
       __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_logging, __pyx_n_s_getLogger); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF_SET(__pyx_v_logger, __pyx_t_2);
@@ -35905,7 +35883,7 @@ static PyObject *__pyx_f_4lxml_5etree_10PyErrorLog_copy(CYTHON_UNUSED struct __p
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4lxml_5etree_10PyErrorLog_3copy)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -35936,7 +35914,7 @@ static PyObject *__pyx_f_4lxml_5etree_10PyErrorLog_copy(CYTHON_UNUSED struct __p
   PyTuple_SET_ITEM(__pyx_t_2, 2, Py_None);
   __Pyx_GIVEREF(Py_None);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ListErrorLog)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 508; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
@@ -36115,7 +36093,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10PyErrorLog_4log(struct __pyx_obj_4lxml_
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_int_0);
   __Pyx_GIVEREF(__pyx_int_0);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_v_self->_map_level, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_self->_map_level, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
@@ -36156,7 +36134,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10PyErrorLog_4log(struct __pyx_obj_4lxml_
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_v_self->_log, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_self->_log, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 522; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -36216,7 +36194,7 @@ static PyObject *__pyx_f_4lxml_5etree_10PyErrorLog_receive(struct __pyx_obj_4lxm
       __Pyx_INCREF(((PyObject *)__pyx_v_log_entry));
       PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_log_entry));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_log_entry));
-      __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_r = __pyx_t_3;
@@ -36246,7 +36224,7 @@ static PyObject *__pyx_f_4lxml_5etree_10PyErrorLog_receive(struct __pyx_obj_4lxm
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_3);
   __pyx_t_3 = 0;
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -36477,7 +36455,7 @@ static struct __pyx_obj_4lxml_5etree__BaseErrorLog *__pyx_f_4lxml_5etree__getGlo
  *         return log
  * 
  */
-      __pyx_t_9 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__RotatingErrorLog)), __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
+      __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__RotatingErrorLog)), __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_INCREF(__pyx_t_9);
       __pyx_v_log = ((struct __pyx_obj_4lxml_5etree__RotatingErrorLog *)__pyx_t_9);
@@ -37444,7 +37422,7 @@ static PyObject *__pyx_f_4lxml_5etree___initErrorConstants(void) {
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_findall); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -37686,7 +37664,7 @@ static PyObject *__pyx_f_4lxml_5etree___initErrorConstants(void) {
       __Pyx_INCREF(__pyx_v_constants);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_constants);
       __Pyx_GIVEREF(__pyx_v_constants);
-      __pyx_t_4 = PyObject_Call(__pyx_v_find_constants, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_find_constants, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) {
@@ -38544,7 +38522,7 @@ static PyObject *__pyx_f_4lxml_5etree_9_Document_isstandalone(struct LxmlDocumen
  *     @cython.final
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = __Pyx_PyBool_FromLong(((int)(__pyx_v_self->_c_doc->standalone == 1))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyBool_FromLong(((__pyx_v_self->_c_doc->standalone == 1) != 0)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 395; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
@@ -41814,7 +41792,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_8__deepcopy__(struct LxmlElemen
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_copy_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 688; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -45180,7 +45158,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_30__repr__(struct LxmlElement *
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_3 = PyObject_Call(__pyx_builtin_id, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_id, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -45726,7 +45704,7 @@ static int __pyx_pf_4lxml_5etree_8_Element_36__nonzero__(struct LxmlElement *__p
  *             u"The behavior of this method will change in future versions. "
  *             u"Use specific 'len(elem)' or 'elem is not None' test instead.",
  */
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1083; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1083; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -45934,7 +45912,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_40__iter__(struct LxmlElement *
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementChildIterator)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementChildIterator)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -46010,7 +45988,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_42__reversed__(struct LxmlEleme
   __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_reversed, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementChildIterator)), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementChildIterator)), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -47746,7 +47724,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_62itersiblings(struct LxmlEleme
   __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_preceding, __pyx_v_preceding) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_SiblingsIterator)), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_SiblingsIterator)), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -47915,7 +47893,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_64iterancestors(struct LxmlElem
   __Pyx_INCREF(__pyx_v_tags);
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_tags);
   __Pyx_GIVEREF(__pyx_v_tags);
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_AncestorsIterator)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_AncestorsIterator)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_r = __pyx_t_3;
@@ -48086,7 +48064,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_66iterdescendants(struct LxmlEl
   __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_inclusive, Py_False) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator)), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator)), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -48267,7 +48245,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_68iterchildren(struct LxmlEleme
   __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_reversed, __pyx_v_reversed) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementChildIterator)), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementChildIterator)), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -48518,7 +48496,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_72getiterator(struct LxmlElemen
   __Pyx_INCREF(__pyx_v_tags);
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_tags);
   __Pyx_GIVEREF(__pyx_v_tags);
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_r = __pyx_t_3;
@@ -48685,7 +48663,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_74iter(struct LxmlElement *__py
   __Pyx_INCREF(__pyx_v_tags);
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_tags);
   __Pyx_GIVEREF(__pyx_v_tags);
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementDepthFirstIterator)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_r = __pyx_t_3;
@@ -48864,7 +48842,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_76itertext(struct LxmlElement *
   __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_with_tail, __pyx_v_with_tail) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementTextIterator)), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ElementTextIterator)), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -49184,7 +49162,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_80find(struct LxmlElement *__py
   __Pyx_INCREF(__pyx_v_namespaces);
   PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_namespaces);
   __Pyx_GIVEREF(__pyx_v_namespaces);
-  __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -49361,7 +49339,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_82findtext(struct LxmlElement *
   __Pyx_INCREF(__pyx_v_namespaces);
   PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_namespaces);
   __Pyx_GIVEREF(__pyx_v_namespaces);
-  __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -49525,7 +49503,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_84findall(struct LxmlElement *_
   __Pyx_INCREF(__pyx_v_namespaces);
   PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_namespaces);
   __Pyx_GIVEREF(__pyx_v_namespaces);
-  __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -49689,7 +49667,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_86iterfind(struct LxmlElement *
   __Pyx_INCREF(__pyx_v_namespaces);
   PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_namespaces);
   __Pyx_GIVEREF(__pyx_v_namespaces);
-  __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -49870,7 +49848,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_88xpath(struct LxmlElement *__p
  *                                           extensions=extensions,
  *                                           smart_strings=smart_strings)
  */
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPathElementEvaluator)), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPathElementEvaluator)), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -49892,7 +49870,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8_Element_88xpath(struct LxmlElement *__p
   __Pyx_GIVEREF(__pyx_v__path);
   __pyx_t_2 = __pyx_v__variables;
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_1 = PyObject_Call(((PyObject *)__pyx_v_evaluator), __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_evaluator), __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -50128,7 +50106,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__elementFactory(struct LxmlDocum
  */
     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_result), __pyx_n_s_init_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_1 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1506; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -51826,7 +51804,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_2get(struct __py
   __Pyx_INCREF(__pyx_v_default);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_default);
   __Pyx_GIVEREF(__pyx_v_default);
-  __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -51927,7 +51905,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_ProcessingInstruction_6attrib___get__(
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_v_4lxml_5etree__FIND_PI_ATTRIBUTES, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1632; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree__FIND_PI_ATTRIBUTES, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1632; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) {
@@ -52312,7 +52290,7 @@ static int __pyx_pf_4lxml_5etree_7_Entity_4name_2__set__(struct __pyx_obj_4lxml_
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
@@ -52683,7 +52661,7 @@ static int __pyx_pf_4lxml_5etree_5QName___init__(struct __pyx_obj_4lxml_5etree_Q
       __Pyx_INCREF(__pyx_v_text_or_uri_or_element);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_text_or_uri_or_element);
       __Pyx_GIVEREF(__pyx_v_text_or_uri_or_element);
-      __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1699; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1699; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF_SET(__pyx_v_text_or_uri_or_element, __pyx_t_4);
@@ -53146,7 +53124,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(PyObject *__pyx_v_one
         __Pyx_INCREF(__pyx_v_one);
         PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_one);
         __Pyx_GIVEREF(__pyx_v_one);
-        __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1724; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1724; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_DECREF_SET(__pyx_v_one, __pyx_t_7);
@@ -53203,7 +53181,7 @@ static PyObject *__pyx_pf_4lxml_5etree_5QName_6__richcmp__(PyObject *__pyx_v_one
         __Pyx_INCREF(__pyx_v_other);
         PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_other);
         __Pyx_GIVEREF(__pyx_v_other);
-        __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1728; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1728; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __Pyx_DECREF_SET(__pyx_v_other, __pyx_t_6);
@@ -54070,7 +54048,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_8__deepcopy__(struct LxmlE
  */
     __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->_context_node), __pyx_n_s_copy_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1797; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1797; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1797; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_5etree__Element))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1797; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -54379,7 +54357,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_7docinfo___get__(struct Lx
   __Pyx_INCREF(((PyObject *)__pyx_v_self->_context_node->_doc));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self->_context_node->_doc));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self->_context_node->_doc));
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_DocInfo)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_DocInfo)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_3;
@@ -54754,7 +54732,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  *             if xml_declaration:
  *                 raise ValueError("Cannot enable XML declaration in C14N")
  */
-      __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1889; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1889; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_Raise(__pyx_t_2, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -54778,7 +54756,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  * 
  *             _tofilelikeC14N(file, self._context_node, exclusive, with_comments,
  */
-      __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1891; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__27, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1891; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_Raise(__pyx_t_2, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -54848,7 +54826,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  *         # suppress decl. in default case (purely for ElementTree compatibility)
  *         if xml_declaration is not None:
  */
-    __pyx_t_6 = PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1897; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_Raise(__pyx_t_6, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -54909,7 +54887,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
       __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_upper); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1904; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_2 = PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1904; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1904; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_t_2);
@@ -54961,7 +54939,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_upper); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1909; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_6 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1909; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1909; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_t_6);
@@ -54976,30 +54954,22 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_10write(struct LxmlElement
  */
     __Pyx_INCREF(__pyx_v_encoding);
     __pyx_t_6 = __pyx_v_encoding;
-    __pyx_t_2 = PyObject_RichCompare(__pyx_t_6, __pyx_kp_u_US_ASCII, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    if (((int)__pyx_t_5)) {
-      __pyx_t_2 = PyObject_RichCompare(__pyx_t_6, __pyx_n_u_ASCII, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __pyx_t_4 = ((int)__pyx_t_3);
+    __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_6, __pyx_kp_u_US_ASCII, Py_NE)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__pyx_t_5) {
+      __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_6, __pyx_n_u_ASCII, Py_NE)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __pyx_t_3;
     } else {
-      __pyx_t_4 = ((int)__pyx_t_5);
+      __pyx_t_4 = __pyx_t_5;
     }
     if (__pyx_t_4) {
-      __pyx_t_2 = PyObject_RichCompare(__pyx_t_6, __pyx_n_u_UTF8, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __pyx_t_3 = ((int)__pyx_t_5);
+      __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_6, __pyx_n_u_UTF8, Py_NE)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_t_5;
     } else {
       __pyx_t_3 = __pyx_t_4;
     }
     if (__pyx_t_3) {
-      __pyx_t_2 = PyObject_RichCompare(__pyx_t_6, __pyx_kp_u_UTF_8, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __pyx_t_5 = ((int)__pyx_t_4);
+      __pyx_t_4 = (__Pyx_PyUnicode_Equals(__pyx_t_6, __pyx_kp_u_UTF_8, Py_NE)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __pyx_t_4;
     } else {
       __pyx_t_5 = __pyx_t_3;
     }
@@ -55536,7 +55506,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getiterator(struct LxmlE
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1972; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_root = __pyx_t_2;
@@ -55610,7 +55580,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_14getiterator(struct LxmlE
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PySequence_Tuple(__pyx_v_tags); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_5 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -55743,7 +55713,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_16iter(struct LxmlElementT
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1988; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1988; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1988; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_root = __pyx_t_2;
@@ -55817,7 +55787,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_16iter(struct LxmlElementT
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = PySequence_Tuple(__pyx_v_tags); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1993; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_5 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1993; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1993; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -55954,7 +55924,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_18find(struct LxmlElementT
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2006; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2006; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2006; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_root = __pyx_t_3;
@@ -56019,7 +55989,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_18find(struct LxmlElementT
   __Pyx_INCREF(__pyx_v_namespaces);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_namespaces);
   __Pyx_GIVEREF(__pyx_v_namespaces);
-  __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2010; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2010; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -56166,7 +56136,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_20findtext(struct LxmlElem
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2023; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_root = __pyx_t_3;
@@ -56234,7 +56204,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_20findtext(struct LxmlElem
   __Pyx_INCREF(__pyx_v_namespaces);
   PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_namespaces);
   __Pyx_GIVEREF(__pyx_v_namespaces);
-  __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -56371,7 +56341,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_22findall(struct LxmlEleme
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2040; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_root = __pyx_t_3;
@@ -56436,7 +56406,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_22findall(struct LxmlEleme
   __Pyx_INCREF(__pyx_v_namespaces);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_namespaces);
   __Pyx_GIVEREF(__pyx_v_namespaces);
-  __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2044; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -56573,7 +56543,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_24iterfind(struct LxmlElem
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getroot); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2057; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2057; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2057; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_root = __pyx_t_3;
@@ -56638,7 +56608,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_24iterfind(struct LxmlElem
   __Pyx_INCREF(__pyx_v_namespaces);
   PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_namespaces);
   __Pyx_GIVEREF(__pyx_v_namespaces);
-  __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2061; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2061; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -56830,7 +56800,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_26xpath(struct LxmlElement
  *                                            extensions=extensions,
  *                                            smart_strings=smart_strings)
  */
-  __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPathDocumentEvaluator)), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2083; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPathDocumentEvaluator)), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2083; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -56852,7 +56822,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_26xpath(struct LxmlElement
   __Pyx_GIVEREF(__pyx_v__path);
   __pyx_t_3 = __pyx_v__variables;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_2 = PyObject_Call(((PyObject *)__pyx_v_evaluator), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2086; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_evaluator), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2086; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -57024,7 +56994,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_28xslt(struct LxmlElementT
  *                      access_control=access_control)
  *         return style(self, **_kw)
  */
-  __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XSLT)), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XSLT)), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -57046,7 +57016,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_28xslt(struct LxmlElementT
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   __pyx_t_3 = __pyx_v__kw;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_2 = PyObject_Call(((PyObject *)__pyx_v_style), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_style), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -57132,7 +57102,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_30relaxng(struct LxmlEleme
   __Pyx_INCREF(__pyx_v_relaxng);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_relaxng);
   __Pyx_GIVEREF(__pyx_v_relaxng);
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_RelaxNG)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_RelaxNG)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_schema = ((struct __pyx_obj_4lxml_5etree_RelaxNG *)__pyx_t_3);
@@ -57153,7 +57123,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_30relaxng(struct LxmlEleme
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -57239,7 +57209,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_32xmlschema(struct LxmlEle
   __Pyx_INCREF(__pyx_v_xmlschema);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_xmlschema);
   __Pyx_GIVEREF(__pyx_v_xmlschema);
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XMLSchema)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XMLSchema)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_schema = ((struct __pyx_obj_4lxml_5etree_XMLSchema *)__pyx_t_3);
@@ -57260,7 +57230,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_32xmlschema(struct LxmlEle
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -57340,14 +57310,14 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ElementTree_34xinclude(struct LxmlElem
  * 
  *     def write_c14n(self, file, *, exclusive=False, with_comments=True,
  */
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XInclude)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XInclude)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(((PyObject *)__pyx_v_self->_context_node));
   PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self->_context_node));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self->_context_node));
-  __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -57675,7 +57645,7 @@ static struct LxmlElementTree *__pyx_f_4lxml_5etree__newElementTree(struct LxmlD
  *     if context_node is None and doc is not None:
  *         context_node = doc.getroot()
  */
-  __pyx_t_1 = PyObject_Call(__pyx_v_baseclass, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_baseclass, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__ElementTree))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2191; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_result = ((struct LxmlElementTree *)__pyx_t_1);
@@ -58134,16 +58104,13 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
  *             sequence_or_dict = sequence_or_dict.items()
  *         for key, value in sequence_or_dict:
  */
-  __Pyx_INCREF(__pyx_v_sequence_or_dict);
-  __pyx_t_1 = __pyx_v_sequence_or_dict;
-  __pyx_t_3 = PyDict_Check(__pyx_t_1); 
+  __pyx_t_3 = PyDict_Check(__pyx_v_sequence_or_dict); 
   if (!__pyx_t_3) {
-    __pyx_t_4 = __Pyx_TypeCheck(__pyx_t_1, ((PyObject*)__pyx_ptype_4lxml_5etree__Attrib)); 
+    __pyx_t_4 = __Pyx_TypeCheck(__pyx_v_sequence_or_dict, ((PyObject*)__pyx_ptype_4lxml_5etree__Attrib)); 
     __pyx_t_5 = __pyx_t_4;
   } else {
     __pyx_t_5 = __pyx_t_3;
   }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_5 != 0);
   if (__pyx_t_3) {
 
@@ -58156,7 +58123,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_6update(struct __pyx_obj_4lxml_5
  */
     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_sequence_or_dict, __pyx_n_s_items); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF_SET(__pyx_v_sequence_or_dict, __pyx_t_6);
@@ -58709,7 +58676,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_12__repr__(struct __pyx_obj_4lxm
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_3 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -58798,7 +58765,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_14__copy__(struct __pyx_obj_4lxm
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2255; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_1;
@@ -58884,7 +58851,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_16__deepcopy__(struct __pyx_obj_
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_1;
@@ -60287,7 +60254,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_44__richcmp__(PyObject *__pyx_v_
         __Pyx_INCREF(__pyx_v_one);
         PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_one);
         __Pyx_GIVEREF(__pyx_v_one);
-        __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2334; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2334; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_DECREF_SET(__pyx_v_one, __pyx_t_7);
@@ -60319,7 +60286,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_Attrib_44__richcmp__(PyObject *__pyx_v_
         __Pyx_INCREF(__pyx_v_other);
         PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_other);
         __Pyx_GIVEREF(__pyx_v_other);
-        __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2336; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __Pyx_DECREF_SET(__pyx_v_other, __pyx_t_6);
@@ -60793,7 +60760,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeIteratorFactory(struct LxmlEleme
  *     attribs._node = element
  *     attribs._c_attr = element._c_node.properties
  */
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__AttribIterator)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__AttribIterator)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_attribs = ((struct __pyx_obj_4lxml_5etree__AttribIterator *)__pyx_t_2);
   __pyx_t_2 = 0;
@@ -62054,8 +62021,8 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
   int __pyx_t_2;
   int __pyx_t_3;
   int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
-  int __pyx_t_6;
+  int __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   Py_ssize_t __pyx_t_8;
   PyObject *(*__pyx_t_9)(PyObject *);
@@ -62219,19 +62186,15 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  */
     __Pyx_INCREF(__pyx_v_tag);
     __pyx_t_1 = __pyx_v_tag;
-    __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_kp_s__34, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    if (!((int)__pyx_t_3)) {
-      __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_kp_s__35, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_6 = ((int)__pyx_t_2);
+    __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_kp_s__34, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!__pyx_t_3) {
+      __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_1, __pyx_kp_s__35, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __pyx_t_2;
     } else {
-      __pyx_t_6 = ((int)__pyx_t_3);
+      __pyx_t_5 = __pyx_t_3;
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-    __pyx_t_3 = (__pyx_t_6 != 0);
+    __pyx_t_3 = (__pyx_t_5 != 0);
     if (__pyx_t_3) {
 
       /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2525
@@ -62268,13 +62231,13 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
           {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
+        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); 
-        __Pyx_INCREF(__pyx_t_5);
+        __Pyx_INCREF(__pyx_t_6);
         __Pyx_INCREF(__pyx_t_7);
         #else
-        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_5);
+        __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_6);
         __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_7);
         #endif
@@ -62282,8 +62245,8 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
       } else {
         __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __pyx_v_href = __pyx_t_5;
-      __pyx_t_5 = 0;
+      __pyx_v_href = __pyx_t_6;
+      __pyx_t_6 = 0;
       __pyx_v_name = __pyx_t_7;
       __pyx_t_7 = 0;
 
@@ -62318,8 +62281,8 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  *                 elif href == b'*':
  */
       __pyx_t_3 = (__pyx_v_href == Py_None);
-      __pyx_t_6 = (__pyx_t_3 != 0);
-      if (__pyx_t_6) {
+      __pyx_t_5 = (__pyx_t_3 != 0);
+      if (__pyx_t_5) {
 
         /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2531
  *                     name = None
@@ -62340,8 +62303,8 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
  *                     href = None  # wildcard: any namespace, including none
  *                 self._py_tags.append((href, name))
  */
-      __pyx_t_6 = (__Pyx_PyBytes_Equals(__pyx_v_href, __pyx_kp_b__34, Py_EQ)); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      if (__pyx_t_6) {
+      __pyx_t_5 = (__Pyx_PyBytes_Equals(__pyx_v_href, __pyx_kp_b__34, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__pyx_t_5) {
 
         /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2533
  *                     href = b''  # no namespace
@@ -62456,7 +62419,7 @@ static PyObject *__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags(struct __pyx
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_6);
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_AddTraceback("lxml.etree._MultiTagMatcher._storeTags", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
@@ -63033,7 +62996,7 @@ static PyObject *__pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher(st
   __Pyx_INCREF(__pyx_v_tags);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_tags);
   __Pyx_GIVEREF(__pyx_v_tags);
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2601; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_2);
@@ -64089,7 +64052,7 @@ static int __pyx_pf_4lxml_5etree_25ElementDepthFirstIterator___cinit__(struct __
   __Pyx_INCREF(__pyx_v_tag);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_tag);
   __Pyx_GIVEREF(__pyx_v_tag);
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2697; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2697; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_GIVEREF(__pyx_t_3);
@@ -64781,7 +64744,7 @@ static int __pyx_pf_4lxml_5etree_19ElementTextIterator___cinit__(struct __pyx_ob
   __Pyx_GOTREF(__pyx_t_4);
   if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_events, __pyx_v_events) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_tag, __pyx_v_tag) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_iterwalk)), __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_iterwalk)), __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2763; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -64938,7 +64901,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19ElementTextIterator_4__next__(struct __
  *             if event == u"start":
  *                 result = element.text
  */
-    __pyx_t_3 = PyObject_Call(__pyx_v_self->_nextEvent, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_self->_nextEvent, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
       PyObject* sequence = __pyx_t_3;
@@ -67513,10 +67476,10 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
   PyObject *__pyx_v_data = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_t_4;
+  PyObject *__pyx_t_4 = NULL;
   Py_ssize_t __pyx_t_5;
   PyObject *(*__pyx_t_6)(PyObject *);
   PyObject *__pyx_t_7 = NULL;
@@ -67534,18 +67497,15 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
  *         raise ValueError("passing a single string into fromstringlist() is not"
  *                          " efficient, use fromstring() instead")
  */
-  __Pyx_INCREF(__pyx_v_strings);
-  __pyx_t_1 = __pyx_v_strings;
-  __pyx_t_2 = PyBytes_Check(__pyx_t_1); 
-  if (!__pyx_t_2) {
-    __pyx_t_3 = PyUnicode_Check(__pyx_t_1); 
-    __pyx_t_4 = __pyx_t_3;
+  __pyx_t_1 = PyBytes_Check(__pyx_v_strings); 
+  if (!__pyx_t_1) {
+    __pyx_t_2 = PyUnicode_Check(__pyx_v_strings); 
+    __pyx_t_3 = __pyx_t_2;
   } else {
-    __pyx_t_4 = __pyx_t_2;
+    __pyx_t_3 = __pyx_t_1;
   }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_2 = (__pyx_t_4 != 0);
-  if (__pyx_t_2) {
+  __pyx_t_1 = (__pyx_t_3 != 0);
+  if (__pyx_t_1) {
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":3019
  *     cdef _Document doc
@@ -67554,10 +67514,10 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
  *                          " efficient, use fromstring() instead")
  *     if parser is None:
  */
-    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__38, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3019; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__38, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3019; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3019; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
@@ -67568,9 +67528,9 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     feed = parser.feed
  */
-  __pyx_t_2 = (((PyObject *)__pyx_v_parser) == Py_None);
-  __pyx_t_4 = (__pyx_t_2 != 0);
-  if (__pyx_t_4) {
+  __pyx_t_1 = (((PyObject *)__pyx_v_parser) == Py_None);
+  __pyx_t_3 = (__pyx_t_1 != 0);
+  if (__pyx_t_3) {
 
     /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":3022
  *                          " efficient, use fromstring() instead")
@@ -67579,10 +67539,10 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
  *     feed = parser.feed
  *     for data in strings:
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3022; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_1));
-    __pyx_t_1 = 0;
+    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3022; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_4));
+    __pyx_t_4 = 0;
     goto __pyx_L4;
   }
   __pyx_L4:;
@@ -67594,10 +67554,10 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
  *     for data in strings:
  *         feed(data)
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_parser), __pyx_n_s_feed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3023; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_feed = __pyx_t_1;
-  __pyx_t_1 = 0;
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_parser), __pyx_n_s_feed); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3023; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_v_feed = __pyx_t_4;
+  __pyx_t_4 = 0;
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":3024
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
@@ -67607,30 +67567,30 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
  *     return parser.close()
  */
   if (PyList_CheckExact(__pyx_v_strings) || PyTuple_CheckExact(__pyx_v_strings)) {
-    __pyx_t_1 = __pyx_v_strings; __Pyx_INCREF(__pyx_t_1); __pyx_t_5 = 0;
+    __pyx_t_4 = __pyx_v_strings; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
     __pyx_t_6 = NULL;
   } else {
-    __pyx_t_5 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_strings); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = Py_TYPE(__pyx_t_1)->tp_iternext;
+    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_strings); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext;
   }
   for (;;) {
-    if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_1)) {
-      if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_1)) break;
+    if (!__pyx_t_6 && PyList_CheckExact(__pyx_t_4)) {
+      if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
       #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_7 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       #else
-      __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       #endif
-    } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_1)) {
-      if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+    } else if (!__pyx_t_6 && PyTuple_CheckExact(__pyx_t_4)) {
+      if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
       #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       #else
-      __pyx_t_7 = PySequence_ITEM(__pyx_t_1, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       #endif
     } else {
-      __pyx_t_7 = __pyx_t_6(__pyx_t_1);
+      __pyx_t_7 = __pyx_t_6(__pyx_t_4);
       if (unlikely(!__pyx_t_7)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
@@ -67656,12 +67616,12 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
     __Pyx_INCREF(__pyx_v_data);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_data);
     __Pyx_GIVEREF(__pyx_v_data);
-    __pyx_t_8 = PyObject_Call(__pyx_v_feed, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3025; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_feed, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3025; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   }
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":3026
  *     for data in strings:
@@ -67671,11 +67631,11 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
  * def iselement(element):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_parser), __pyx_n_s_close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_8 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_parser), __pyx_n_s_close); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3026; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_r = __pyx_t_8;
   __pyx_t_8 = 0;
   goto __pyx_L0;
@@ -67690,7 +67650,7 @@ static PyObject *__pyx_pf_4lxml_5etree_24fromstringlist(CYTHON_UNUSED PyObject *
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_8);
   __Pyx_AddTraceback("lxml.etree.fromstringlist", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -67922,7 +67882,7 @@ static PyObject *__pyx_pf_4lxml_5etree_28dump(CYTHON_UNUSED PyObject *__pyx_self
  *                    encoding=u'unicode' if python.IS_PYTHON3 else None)
  *     if not pretty_print:
  */
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3041; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -67972,7 +67932,7 @@ static PyObject *__pyx_pf_4lxml_5etree_28dump(CYTHON_UNUSED PyObject *__pyx_self
   __Pyx_INCREF(__pyx_v_xml);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_xml);
   __Pyx_GIVEREF(__pyx_v_xml);
-  __pyx_t_2 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3045; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -68208,7 +68168,7 @@ static PyObject *__pyx_pf_4lxml_5etree_30tostring(CYTHON_UNUSED PyObject *__pyx_
  *         if xml_declaration:
  *             raise ValueError("Cannot enable XML declaration in C14N")
  */
-      __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__39, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__39, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -68232,7 +68192,7 @@ static PyObject *__pyx_pf_4lxml_5etree_30tostring(CYTHON_UNUSED PyObject *__pyx_
  *         return _tostringC14N(element_or_tree, exclusive, with_comments, inclusive_ns_prefixes)
  *     if not with_comments:
  */
-      __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__40, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__40, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -68271,7 +68231,7 @@ static PyObject *__pyx_pf_4lxml_5etree_30tostring(CYTHON_UNUSED PyObject *__pyx_
  *     if encoding is _unicode or (encoding is not None and encoding.upper() == 'UNICODE'):
  *         if xml_declaration:
  */
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__41, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__41, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -68291,7 +68251,7 @@ static PyObject *__pyx_pf_4lxml_5etree_30tostring(CYTHON_UNUSED PyObject *__pyx_
     if (__pyx_t_1) {
       __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_upper); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_5 = (__Pyx_PyString_Equals(__pyx_t_4, __pyx_n_s_UNICODE, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -68370,33 +68330,25 @@ static PyObject *__pyx_pf_4lxml_5etree_30tostring(CYTHON_UNUSED PyObject *__pyx_
     if (__pyx_t_2) {
       __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_upper); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_3 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_n_u_ASCII, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (((int)__pyx_t_1)) {
-        __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_kp_u_UTF_8, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_6 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __pyx_t_5 = ((int)__pyx_t_6);
+      __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_t_3, __pyx_n_u_ASCII, Py_NE)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__pyx_t_1) {
+        __pyx_t_6 = (__Pyx_PyUnicode_Equals(__pyx_t_3, __pyx_kp_u_UTF_8, Py_NE)); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __pyx_t_6;
       } else {
-        __pyx_t_5 = ((int)__pyx_t_1);
+        __pyx_t_5 = __pyx_t_1;
       }
       if (__pyx_t_5) {
-        __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_n_u_UTF8, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __pyx_t_6 = ((int)__pyx_t_1);
+        __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_t_3, __pyx_n_u_UTF8, Py_NE)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = __pyx_t_1;
       } else {
         __pyx_t_6 = __pyx_t_5;
       }
       if (__pyx_t_6) {
-        __pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_kp_u_US_ASCII, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __pyx_t_1 = ((int)__pyx_t_5);
+        __pyx_t_5 = (__Pyx_PyUnicode_Equals(__pyx_t_3, __pyx_kp_u_US_ASCII, Py_NE)); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_1 = __pyx_t_5;
       } else {
         __pyx_t_1 = __pyx_t_6;
       }
@@ -68756,7 +68708,7 @@ static PyObject *__pyx_pf_4lxml_5etree_32tostringlist(CYTHON_UNUSED PyObject *__
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_3 = __pyx_v_kwargs;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -69385,7 +69337,7 @@ static int __pyx_f_4lxml_5etree_14_ReadOnlyProxy__assertNode(struct __pyx_obj_4l
  *         return 0
  * 
  */
-    __pyx_t_2 = PyObject_Call(__pyx_builtin_ReferenceError, __pyx_tuple__42, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ReferenceError, __pyx_tuple__42, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -69455,7 +69407,7 @@ static int __pyx_f_4lxml_5etree_14_ReadOnlyProxy__raise_unsupported_type(struct
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(__pyx_builtin_TypeError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_Raise(__pyx_t_2, 0, 0, 0);
@@ -70144,7 +70096,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_ReadOnlyProxy_2__repr__(struct __pyx_o
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_id, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_id, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -71015,7 +70967,7 @@ static PyObject *__pyx_f_4lxml_5etree_14_ReadOnlyProxy___copy__(struct __pyx_obj
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4lxml_5etree_14_ReadOnlyProxy_13__copy__)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -71592,7 +71544,7 @@ static PyObject *__pyx_f_4lxml_5etree_14_ReadOnlyProxy_getchildren(struct __pyx_
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4lxml_5etree_14_ReadOnlyProxy_19getchildren)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 199; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -72320,7 +72272,7 @@ static int __pyx_pf_4lxml_5etree_20_ReadOnlyEntityProxy_4name_2__set__(struct __
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
@@ -72483,7 +72435,7 @@ static PyObject *__pyx_pf_4lxml_5etree_21_ReadOnlyElementProxy_6attrib___get__(s
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_2;
@@ -73091,7 +73043,7 @@ static struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *__pyx_f_4lxml_5etree__newRe
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = PyObject_Call(__pyx_builtin_TypeError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
@@ -75125,7 +75077,7 @@ static struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *__pyx_f_4lxml_5etree__newAp
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = PyObject_Call(__pyx_builtin_TypeError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
@@ -75660,7 +75612,7 @@ static int __pyx_pf_4lxml_5etree_11ElementBase___init__(struct LxmlElementBase *
       __Pyx_INCREF(__pyx_n_s_NAMESPACE);
       PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_NAMESPACE);
       __Pyx_GIVEREF(__pyx_n_s_NAMESPACE);
-      __pyx_t_5 = PyObject_Call(__pyx_v__getattr, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v__getattr, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_t_1 = __pyx_f_4lxml_5etree__utf8(__pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
@@ -75750,7 +75702,7 @@ static int __pyx_pf_4lxml_5etree_11ElementBase___init__(struct LxmlElementBase *
       __Pyx_INCREF(__pyx_n_s_TAG);
       PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_n_s_TAG);
       __Pyx_GIVEREF(__pyx_n_s_TAG);
-      __pyx_t_5 = PyObject_Call(__pyx_v__getattr, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v__getattr, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_7 = __pyx_f_4lxml_5etree__getNsTag(__pyx_t_5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 55; __pyx_clineno = __LINE__; goto __pyx_L13_error;}
@@ -75851,7 +75803,7 @@ static int __pyx_pf_4lxml_5etree_11ElementBase___init__(struct LxmlElementBase *
       __Pyx_INCREF(__pyx_n_s_class);
       PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_n_s_class);
       __Pyx_GIVEREF(__pyx_n_s_class);
-      __pyx_t_11 = PyObject_Call(__pyx_v__getattr, __pyx_t_10, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
+      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_v__getattr, __pyx_t_10, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
       __Pyx_GOTREF(__pyx_t_11);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
@@ -75862,7 +75814,7 @@ static int __pyx_pf_4lxml_5etree_11ElementBase___init__(struct LxmlElementBase *
       PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_n_s_name);
       __Pyx_GIVEREF(__pyx_n_s_name);
       __pyx_t_11 = 0;
-      __pyx_t_11 = PyObject_Call(__pyx_v__getattr, __pyx_t_10, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
+      __pyx_t_11 = __Pyx_PyObject_Call(__pyx_v__getattr, __pyx_t_10, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
       __Pyx_GOTREF(__pyx_t_11);
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       __pyx_t_10 = __pyx_f_4lxml_5etree__utf8(__pyx_t_11); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 59; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
@@ -75891,7 +75843,7 @@ static int __pyx_pf_4lxml_5etree_11ElementBase___init__(struct LxmlElementBase *
  */
         __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_tag, __pyx_n_s_split); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
         __Pyx_GOTREF(__pyx_t_10);
-        __pyx_t_11 = PyObject_Call(__pyx_t_10, __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
+        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__44, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __pyx_t_10 = __Pyx_GetItemInt(__pyx_t_11, -1, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(__pyx_t_10 == NULL)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 61; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;};
@@ -75951,7 +75903,7 @@ static int __pyx_pf_4lxml_5etree_11ElementBase___init__(struct LxmlElementBase *
       __Pyx_INCREF(__pyx_n_s_PARSER);
       PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_n_s_PARSER);
       __Pyx_GIVEREF(__pyx_n_s_PARSER);
-      __pyx_t_1 = PyObject_Call(__pyx_v__getattr, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L25_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v__getattr, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L25_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__BaseParser))))) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L25_error;}
@@ -76130,7 +76082,7 @@ static int __pyx_pf_4lxml_5etree_11ElementBase___init__(struct LxmlElementBase *
         __Pyx_INCREF(__pyx_n_s_HTML);
         PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_n_s_HTML);
         __Pyx_GIVEREF(__pyx_n_s_HTML);
-        __pyx_t_5 = PyObject_Call(__pyx_v__getattr, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L40_error;}
+        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v__getattr, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L40_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 74; __pyx_clineno = __LINE__; goto __pyx_L40_error;}
@@ -76365,7 +76317,7 @@ static int __pyx_pf_4lxml_5etree_11ElementBase___init__(struct LxmlElementBase *
  *                 _appendChild(self, last_child)
  *             else:
  */
-      __pyx_t_7 = PyObject_Call(__pyx_v_child, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_child, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
       if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_4lxml_5etree__Element))))) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF_SET(__pyx_v_last_child, ((struct LxmlElement *)__pyx_t_7));
@@ -76624,7 +76576,7 @@ static int __pyx_pf_4lxml_5etree_11CommentBase___init__(struct __pyx_obj_4lxml_5
  */
   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_init_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -76870,7 +76822,7 @@ static int __pyx_pf_4lxml_5etree_6PIBase___init__(struct __pyx_obj_4lxml_5etree_
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_init_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -77136,7 +77088,7 @@ static int __pyx_pf_4lxml_5etree_10EntityBase___init__(struct __pyx_obj_4lxml_5e
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_init_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -77325,6 +77277,7 @@ static int __pyx_f_4lxml_5etree__validateNodeClass(xmlNode *__pyx_v_c_node, PyOb
  *     return 0
  * 
  */
+    if (unlikely(!__pyx_v_expected)) { __Pyx_RaiseUnboundLocalError("expected"); {__pyx_filename = __pyx_f[9]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;} }
     __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_expected))));
@@ -77349,7 +77302,7 @@ static int __pyx_f_4lxml_5etree__validateNodeClass(xmlNode *__pyx_v_c_node, PyOb
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
     __Pyx_GIVEREF(__pyx_t_1);
     __pyx_t_1 = 0;
-    __pyx_t_1 = PyObject_Call(__pyx_builtin_TypeError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_1, 0, 0, 0);
@@ -79045,7 +78998,7 @@ static int __pyx_pf_4lxml_5etree_32AttributeBasedElementClassLookup_2__init__(st
   __Pyx_INCREF(__pyx_v_class_mapping);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_class_mapping);
   __Pyx_GIVEREF(__pyx_v_class_mapping);
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_3);
@@ -79071,7 +79024,7 @@ static int __pyx_pf_4lxml_5etree_32AttributeBasedElementClassLookup_2__init__(st
   __Pyx_INCREF(((PyObject *)__pyx_v_fallback));
   PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_fallback));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_fallback));
-  __pyx_t_2 = PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 375; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -79806,7 +79759,7 @@ static PyObject *__pyx_f_4lxml_5etree__custom_class_lookup(PyObject *__pyx_v_sta
   __Pyx_INCREF(__pyx_v_name);
   PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_v_name);
   __Pyx_GIVEREF(__pyx_v_name);
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -80107,7 +80060,7 @@ static PyObject *__pyx_f_4lxml_5etree__python_class_lookup(PyObject *__pyx_v_sta
   __Pyx_INCREF(((PyObject *)__pyx_v_proxy));
   PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_proxy));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_proxy));
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -80660,7 +80613,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18_NamespaceRegistry_2update(struct __pyx
  */
     __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_class_dict_iterable, __pyx_n_s_items); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_class_dict_iterable, __pyx_t_4);
@@ -81308,7 +81261,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18_NamespaceRegistry_10items(struct __pyx
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
@@ -81824,7 +81777,7 @@ static int __pyx_pf_4lxml_5etree_27ElementNamespaceClassLookup_2__init__(struct
   __Pyx_INCREF(((PyObject *)__pyx_v_fallback));
   PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_fallback));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_fallback));
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -82006,7 +81959,7 @@ static PyObject *__pyx_pf_4lxml_5etree_27ElementNamespaceClassLookup_4get_namesp
       __Pyx_INCREF(__pyx_v_ns_uri);
       PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_ns_uri);
       __Pyx_GIVEREF(__pyx_v_ns_uri);
-      __pyx_t_10 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ClassNamespaceRegistry)), __pyx_t_9, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
+      __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ClassNamespaceRegistry)), __pyx_t_9, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 130; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_INCREF(__pyx_t_10);
@@ -82545,7 +82498,7 @@ static PyObject *__pyx_pf_4lxml_5etree_40FunctionNamespace(CYTHON_UNUSED PyObjec
       __Pyx_INCREF(__pyx_v_ns_uri);
       PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_ns_uri);
       __Pyx_GIVEREF(__pyx_v_ns_uri);
-      __pyx_t_10 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__XPathFunctionNamespaceRegistry)), __pyx_t_9, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
+      __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__XPathFunctionNamespaceRegistry)), __pyx_t_9, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
       __Pyx_GOTREF(__pyx_t_10);
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       __Pyx_INCREF(__pyx_t_10);
@@ -83449,7 +83402,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8Resolver_2resolve_empty(CYTHON_UNUSED st
  *         doc_ref._type = PARSER_DATA_EMPTY
  *         return doc_ref
  */
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__InputDocument)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__InputDocument)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_doc_ref = ((struct __pyx_obj_4lxml_5etree__InputDocument *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -83645,7 +83598,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8Resolver_4resolve_string(CYTHON_UNUSED s
  *         doc_ref._type = PARSER_DATA_STRING
  *         doc_ref._data_bytes = string
  */
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__InputDocument)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__InputDocument)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_doc_ref = ((struct __pyx_obj_4lxml_5etree__InputDocument *)__pyx_t_3);
   __pyx_t_3 = 0;
@@ -83824,7 +83777,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8Resolver_6resolve_filename(CYTHON_UNUSED
  *         doc_ref._type = PARSER_DATA_FILENAME
  *         doc_ref._filename = _encodeFilename(filename)
  */
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__InputDocument)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__InputDocument)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 78; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_doc_ref = ((struct __pyx_obj_4lxml_5etree__InputDocument *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -84072,7 +84025,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8Resolver_8resolve_file(CYTHON_UNUSED str
  *         doc_ref._type = PARSER_DATA_FILE
  *         if base_url is not None:
  */
-  __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__InputDocument)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__InputDocument)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __pyx_v_doc_ref = ((struct __pyx_obj_4lxml_5etree__InputDocument *)__pyx_t_7);
   __pyx_t_7 = 0;
@@ -84370,7 +84323,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ResolverRegistry_2add(struct __pyx_obj
   __Pyx_INCREF(((PyObject *)__pyx_v_resolver));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_resolver));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_resolver));
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -84446,7 +84399,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ResolverRegistry_4remove(struct __pyx_
   __Pyx_INCREF(__pyx_v_resolver);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_resolver);
   __Pyx_GIVEREF(__pyx_v_resolver);
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -84506,7 +84459,7 @@ static struct __pyx_obj_4lxml_5etree__ResolverRegistry *__pyx_f_4lxml_5etree_17_
   __Pyx_INCREF(((PyObject *)__pyx_v_self->_default_resolver));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self->_default_resolver));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self->_default_resolver));
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ResolverRegistry)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ResolverRegistry)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_registry = ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_2);
@@ -84521,7 +84474,7 @@ static struct __pyx_obj_4lxml_5etree__ResolverRegistry *__pyx_f_4lxml_5etree_17_
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_resolvers, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_GIVEREF(__pyx_t_1);
@@ -84789,7 +84742,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ResolverRegistry_8resolve(struct __pyx
     __Pyx_INCREF(__pyx_v_context);
     PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_context);
     __Pyx_GIVEREF(__pyx_v_context);
-    __pyx_t_6 = PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -84868,7 +84821,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_ResolverRegistry_8resolve(struct __pyx
   __Pyx_INCREF(__pyx_v_context);
   PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_context);
   __Pyx_GIVEREF(__pyx_v_context);
-  __pyx_t_5 = PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -85055,7 +85008,7 @@ static PyObject *__pyx_f_4lxml_5etree__initResolverContext(struct __pyx_obj_4lxm
  *     else:
  *         context._resolvers = resolvers
  */
-    __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ResolverRegistry)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ResolverRegistry)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __Pyx_GOTREF(__pyx_v_context->_resolvers);
@@ -85085,7 +85038,7 @@ static PyObject *__pyx_f_4lxml_5etree__initResolverContext(struct __pyx_obj_4lxm
  *         context._resolvers = resolvers
  *     context._storage = _TempStore()             # <<<<<<<<<<<<<<
  */
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__TempStore)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__TempStore)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_GIVEREF(__pyx_t_3);
   __Pyx_GOTREF(__pyx_v_context->_storage);
@@ -85248,7 +85201,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10ParseError___init__(CYTHON_UNUSED PyObj
     __Pyx_INCREF(__pyx_v_self);
     PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_self);
     __Pyx_GIVEREF(__pyx_v_self);
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_super, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_init); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -85259,7 +85212,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10ParseError___init__(CYTHON_UNUSED PyObj
     __Pyx_INCREF(__pyx_v_message);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_message);
     __Pyx_GIVEREF(__pyx_v_message);
-    __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -85285,7 +85238,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10ParseError___init__(CYTHON_UNUSED PyObj
     __Pyx_INCREF(__pyx_v_message);
     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_message);
     __Pyx_GIVEREF(__pyx_v_message);
-    __pyx_t_2 = PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -85652,7 +85605,7 @@ static struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *__pyx_f_4lxml_5et
  *         d[u"_ParserDictionaryContext"] = context
  *         return context
  */
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ParserDictionaryContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ParserDictionaryContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)__pyx_t_2);
   __pyx_t_2 = 0;
@@ -86179,11 +86132,20 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(struc
  *     cdef void initParserDict(self, xmlparser.xmlParserCtxt* pctxt):
  *         u"Assure we always use the same string dictionary."
  *         self.initThreadDictRef(&pctxt.dict)             # <<<<<<<<<<<<<<
+ *         pctxt.dictNames = 1
  * 
- *     cdef void initXPathParserDict(self, xpath.xmlXPathContext* pctxt):
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initThreadDictRef(__pyx_v_self, (&__pyx_v_pctxt->dict));
 
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":137
+ *         u"Assure we always use the same string dictionary."
+ *         self.initThreadDictRef(&pctxt.dict)
+ *         pctxt.dictNames = 1             # <<<<<<<<<<<<<<
+ * 
+ *     cdef void initXPathParserDict(self, xpath.xmlXPathContext* pctxt):
+ */
+  __pyx_v_pctxt->dictNames = 1;
+
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":134
  *         xmlparser.xmlDictReference(c_thread_dict)
  * 
@@ -86196,8 +86158,8 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(struc
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":138
- *         self.initThreadDictRef(&pctxt.dict)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":139
+ *         pctxt.dictNames = 1
  * 
  *     cdef void initXPathParserDict(self, xpath.xmlXPathContext* pctxt):             # <<<<<<<<<<<<<<
  *         u"Assure we always use the same string dictionary."
@@ -86208,7 +86170,7 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initXPathParserDict(
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("initXPathParserDict", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":140
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":141
  *     cdef void initXPathParserDict(self, xpath.xmlXPathContext* pctxt):
  *         u"Assure we always use the same string dictionary."
  *         self.initThreadDictRef(&pctxt.dict)             # <<<<<<<<<<<<<<
@@ -86217,8 +86179,8 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initXPathParserDict(
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initThreadDictRef(__pyx_v_self, (&__pyx_v_pctxt->dict));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":138
- *         self.initThreadDictRef(&pctxt.dict)
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":139
+ *         pctxt.dictNames = 1
  * 
  *     cdef void initXPathParserDict(self, xpath.xmlXPathContext* pctxt):             # <<<<<<<<<<<<<<
  *         u"Assure we always use the same string dictionary."
@@ -86229,7 +86191,7 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initXPathParserDict(
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":142
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":143
  *         self.initThreadDictRef(&pctxt.dict)
  * 
  *     cdef void initDocDict(self, xmlDoc* result):             # <<<<<<<<<<<<<<
@@ -86241,7 +86203,7 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(struct _
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("initDocDict", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":147
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":148
  *         # This case should only occur for new documents with empty dicts,
  *         # otherwise we'd free data that's in use => segfault
  *         self.initThreadDictRef(&result.dict)             # <<<<<<<<<<<<<<
@@ -86250,7 +86212,7 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(struct _
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initThreadDictRef(__pyx_v_self, (&__pyx_v_result->dict));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":142
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":143
  *         self.initThreadDictRef(&pctxt.dict)
  * 
  *     cdef void initDocDict(self, xmlDoc* result):             # <<<<<<<<<<<<<<
@@ -86262,7 +86224,7 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(struct _
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":149
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":150
  *         self.initThreadDictRef(&result.dict)
  * 
  *     cdef _ParserContext findImpliedContext(self):             # <<<<<<<<<<<<<<
@@ -86282,19 +86244,19 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_24_Par
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("findImpliedContext", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":159
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":160
  * 
  *         # see if we have a current implied parser
  *         context = self._findThreadParserContext()             # <<<<<<<<<<<<<<
  *         if context._implied_parser_contexts:
  *             implied_context = context._implied_parser_contexts[-1]
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext__findThreadParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext__findThreadParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":160
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":161
  *         # see if we have a current implied parser
  *         context = self._findThreadParserContext()
  *         if context._implied_parser_contexts:             # <<<<<<<<<<<<<<
@@ -86304,7 +86266,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_24_Par
   __pyx_t_2 = (__pyx_v_context->_implied_parser_contexts != Py_None) && (PyList_GET_SIZE(__pyx_v_context->_implied_parser_contexts) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":161
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":162
  *         context = self._findThreadParserContext()
  *         if context._implied_parser_contexts:
  *             implied_context = context._implied_parser_contexts[-1]             # <<<<<<<<<<<<<<
@@ -86313,15 +86275,15 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_24_Par
  */
     if (unlikely(__pyx_v_context->_implied_parser_contexts == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_context->_implied_parser_contexts, -1, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
+    __pyx_t_1 = __Pyx_GetItemInt_List(__pyx_v_context->_implied_parser_contexts, -1, long, 1, __Pyx_PyInt_From_long, 1, 1, 1); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
     __Pyx_GOTREF(__pyx_t_1);
-    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__ParserContext))))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__ParserContext))))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_implied_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":162
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":163
  *         if context._implied_parser_contexts:
  *             implied_context = context._implied_parser_contexts[-1]
  *             return implied_context             # <<<<<<<<<<<<<<
@@ -86334,7 +86296,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_24_Par
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":163
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":164
  *             implied_context = context._implied_parser_contexts[-1]
  *             return implied_context
  *         return None             # <<<<<<<<<<<<<<
@@ -86346,7 +86308,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_24_Par
   __pyx_r = ((struct __pyx_obj_4lxml_5etree__ParserContext *)Py_None);
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":149
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":150
  *         self.initThreadDictRef(&result.dict)
  * 
  *     cdef _ParserContext findImpliedContext(self):             # <<<<<<<<<<<<<<
@@ -86367,7 +86329,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_24_Par
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":165
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":166
  *         return None
  * 
  *     cdef void pushImpliedContextFromParser(self, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -86385,7 +86347,7 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContextFr
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("pushImpliedContextFromParser", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":167
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":168
  *     cdef void pushImpliedContextFromParser(self, _BaseParser parser):
  *         u"Push a new implied context object taken from the parser."
  *         if parser is not None:             # <<<<<<<<<<<<<<
@@ -86396,14 +86358,14 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContextFr
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":168
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":169
  *         u"Push a new implied context object taken from the parser."
  *         if parser is not None:
  *             self.pushImpliedContext(parser._getParserContext())             # <<<<<<<<<<<<<<
  *         else:
  *             self.pushImpliedContext(None)
  */
-    __pyx_t_3 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_parser->__pyx_vtab)->_getParserContext(__pyx_v_parser)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_parser->__pyx_vtab)->_getParserContext(__pyx_v_parser)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContext(__pyx_v_self, ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_3));
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -86411,7 +86373,7 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContextFr
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":170
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":171
  *             self.pushImpliedContext(parser._getParserContext())
  *         else:
  *             self.pushImpliedContext(None)             # <<<<<<<<<<<<<<
@@ -86422,7 +86384,7 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContextFr
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":165
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":166
  *         return None
  * 
  *     cdef void pushImpliedContextFromParser(self, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -86439,7 +86401,7 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContextFr
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":172
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":173
  *             self.pushImpliedContext(None)
  * 
  *     cdef void pushImpliedContext(self, _ParserContext parser_context):             # <<<<<<<<<<<<<<
@@ -86457,19 +86419,19 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContext(s
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("pushImpliedContext", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":175
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":176
  *         u"Push a new implied context object."
  *         cdef _ParserDictionaryContext context
  *         context = self._findThreadParserContext()             # <<<<<<<<<<<<<<
  *         context._implied_parser_contexts.append(parser_context)
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext__findThreadParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext__findThreadParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":176
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":177
  *         cdef _ParserDictionaryContext context
  *         context = self._findThreadParserContext()
  *         context._implied_parser_contexts.append(parser_context)             # <<<<<<<<<<<<<<
@@ -86478,11 +86440,11 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContext(s
  */
   if (unlikely(__pyx_v_context->_implied_parser_contexts == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append");
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_2 = __Pyx_PyList_Append(__pyx_v_context->_implied_parser_contexts, ((PyObject *)__pyx_v_parser_context)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyList_Append(__pyx_v_context->_implied_parser_contexts, ((PyObject *)__pyx_v_parser_context)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 177; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":172
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":173
  *             self.pushImpliedContext(None)
  * 
  *     cdef void pushImpliedContext(self, _ParserContext parser_context):             # <<<<<<<<<<<<<<
@@ -86500,7 +86462,7 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContext(s
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":178
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":179
  *         context._implied_parser_contexts.append(parser_context)
  * 
  *     cdef void popImpliedContext(self):             # <<<<<<<<<<<<<<
@@ -86517,19 +86479,19 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_popImpliedContext(st
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("popImpliedContext", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":181
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":182
  *         u"Pop the current implied context object."
  *         cdef _ParserDictionaryContext context
  *         context = self._findThreadParserContext()             # <<<<<<<<<<<<<<
  *         context._implied_parser_contexts.pop()
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext__findThreadParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext__findThreadParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":182
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":183
  *         cdef _ParserDictionaryContext context
  *         context = self._findThreadParserContext()
  *         context._implied_parser_contexts.pop()             # <<<<<<<<<<<<<<
@@ -86538,13 +86500,13 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_popImpliedContext(st
  */
   if (unlikely(__pyx_v_context->_implied_parser_contexts == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "pop");
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_1 = __Pyx_PyList_Pop(__pyx_v_context->_implied_parser_contexts); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyList_Pop(__pyx_v_context->_implied_parser_contexts); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":178
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":179
  *         context._implied_parser_contexts.append(parser_context)
  * 
  *     cdef void popImpliedContext(self):             # <<<<<<<<<<<<<<
@@ -86562,7 +86524,7 @@ static void __pyx_f_4lxml_5etree_24_ParserDictionaryContext_popImpliedContext(st
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":195
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":196
  * cdef const_char* _UNICODE_ENCODING = NULL
  * 
  * cdef int _setupPythonUnicode() except -1:             # <<<<<<<<<<<<<<
@@ -86585,7 +86547,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
   int __pyx_t_6;
   __Pyx_RefNannySetupContext("_setupPythonUnicode", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":204
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":205
  *     cdef Py_ssize_t l
  *     cdef const_char* enc
  *     cdef Py_UNICODE *uchars = [c'<', c't', c'e', c's', c't', c'/', c'>']             # <<<<<<<<<<<<<<
@@ -86601,7 +86563,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
   __pyx_t_1[6] = '>';
   __pyx_v_uchars = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":205
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":206
  *     cdef const_char* enc
  *     cdef Py_UNICODE *uchars = [c'<', c't', c'e', c's', c't', c'/', c'>']
  *     cdef const_xmlChar* buffer = <const_xmlChar*>uchars             # <<<<<<<<<<<<<<
@@ -86610,7 +86572,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
  */
   __pyx_v_buffer = ((const xmlChar *)__pyx_v_uchars);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":207
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":208
  *     cdef const_xmlChar* buffer = <const_xmlChar*>uchars
  *     # apparently, libxml2 can't detect UTF-16 on some systems
  *     if (buffer[0] == c'<' and buffer[1] == c'\0' and             # <<<<<<<<<<<<<<
@@ -86622,7 +86584,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
     __pyx_t_3 = (((__pyx_v_buffer[1]) == '\x00') != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":208
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":209
  *     # apparently, libxml2 can't detect UTF-16 on some systems
  *     if (buffer[0] == c'<' and buffer[1] == c'\0' and
  *             buffer[2] == c't' and buffer[3] == c'\0'):             # <<<<<<<<<<<<<<
@@ -86646,7 +86608,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":209
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":210
  *     if (buffer[0] == c'<' and buffer[1] == c'\0' and
  *             buffer[2] == c't' and buffer[3] == c'\0'):
  *         enc = "UTF-16LE"             # <<<<<<<<<<<<<<
@@ -86657,7 +86619,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
     goto __pyx_L3;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":210
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":211
  *             buffer[2] == c't' and buffer[3] == c'\0'):
  *         enc = "UTF-16LE"
  *     elif (buffer[0] == c'\0' and buffer[1] == c'<' and             # <<<<<<<<<<<<<<
@@ -86669,7 +86631,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
     __pyx_t_2 = (((__pyx_v_buffer[1]) == '<') != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":211
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":212
  *         enc = "UTF-16LE"
  *     elif (buffer[0] == c'\0' and buffer[1] == c'<' and
  *             buffer[2] == c'\0' and buffer[3] == c't'):             # <<<<<<<<<<<<<<
@@ -86693,7 +86655,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
   }
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":212
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":213
  *     elif (buffer[0] == c'\0' and buffer[1] == c'<' and
  *             buffer[2] == c'\0' and buffer[3] == c't'):
  *         enc = "UTF-16BE"             # <<<<<<<<<<<<<<
@@ -86705,7 +86667,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":215
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":216
  *     else:
  *         # let libxml2 give it a try
  *         enc = _findEncodingName(buffer, sizeof(Py_UNICODE) * 7)             # <<<<<<<<<<<<<<
@@ -86714,7 +86676,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
  */
     __pyx_v_enc = __pyx_f_4lxml_5etree__findEncodingName(__pyx_v_buffer, ((sizeof(Py_UNICODE)) * 7));
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":216
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":217
  *         # let libxml2 give it a try
  *         enc = _findEncodingName(buffer, sizeof(Py_UNICODE) * 7)
  *         if enc is NULL:             # <<<<<<<<<<<<<<
@@ -86724,7 +86686,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
     __pyx_t_2 = ((__pyx_v_enc == NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":218
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":219
  *         if enc is NULL:
  *             # not my fault, it's YOUR broken system :)
  *             return 0             # <<<<<<<<<<<<<<
@@ -86737,7 +86699,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":219
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":220
  *             # not my fault, it's YOUR broken system :)
  *             return 0
  *     enchandler = tree.xmlFindCharEncodingHandler(enc)             # <<<<<<<<<<<<<<
@@ -86746,7 +86708,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
  */
   __pyx_v_enchandler = xmlFindCharEncodingHandler(__pyx_v_enc);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":220
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":221
  *             return 0
  *     enchandler = tree.xmlFindCharEncodingHandler(enc)
  *     if enchandler is not NULL:             # <<<<<<<<<<<<<<
@@ -86756,7 +86718,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
   __pyx_t_2 = ((__pyx_v_enchandler != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":222
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":223
  *     if enchandler is not NULL:
  *         global _UNICODE_ENCODING
  *         tree.xmlCharEncCloseFunc(enchandler)             # <<<<<<<<<<<<<<
@@ -86765,7 +86727,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
  */
     xmlCharEncCloseFunc(__pyx_v_enchandler);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":223
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":224
  *         global _UNICODE_ENCODING
  *         tree.xmlCharEncCloseFunc(enchandler)
  *         _UNICODE_ENCODING = enc             # <<<<<<<<<<<<<<
@@ -86777,7 +86739,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":224
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":225
  *         tree.xmlCharEncCloseFunc(enchandler)
  *         _UNICODE_ENCODING = enc
  *     return 0             # <<<<<<<<<<<<<<
@@ -86787,7 +86749,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":195
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":196
  * cdef const_char* _UNICODE_ENCODING = NULL
  * 
  * cdef int _setupPythonUnicode() except -1:             # <<<<<<<<<<<<<<
@@ -86801,7 +86763,7 @@ static int __pyx_f_4lxml_5etree__setupPythonUnicode(void) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":226
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":227
  *     return 0
  * 
  * cdef const_char* _findEncodingName(const_xmlChar* buffer, int size):             # <<<<<<<<<<<<<<
@@ -86815,7 +86777,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_findEncodingName", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":229
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":230
  *     u"Work around bug in libxml2: find iconv name of encoding on our own."
  *     cdef tree.xmlCharEncoding enc
  *     enc = tree.xmlDetectCharEncoding(buffer, size)             # <<<<<<<<<<<<<<
@@ -86824,7 +86786,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
  */
   __pyx_v_enc = xmlDetectCharEncoding(__pyx_v_buffer, __pyx_v_size);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":238
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":239
  *     elif enc == tree.XML_CHAR_ENCODING_UCS4BE:
  *         return "UCS-4BE"
  *     elif enc == tree.XML_CHAR_ENCODING_NONE:             # <<<<<<<<<<<<<<
@@ -86833,7 +86795,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
  */
   switch (__pyx_v_enc) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":230
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":231
  *     cdef tree.xmlCharEncoding enc
  *     enc = tree.xmlDetectCharEncoding(buffer, size)
  *     if enc == tree.XML_CHAR_ENCODING_UTF16LE:             # <<<<<<<<<<<<<<
@@ -86842,7 +86804,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
  */
     case XML_CHAR_ENCODING_UTF16LE:
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":231
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":232
  *     enc = tree.xmlDetectCharEncoding(buffer, size)
  *     if enc == tree.XML_CHAR_ENCODING_UTF16LE:
  *         return "UTF-16LE"             # <<<<<<<<<<<<<<
@@ -86853,7 +86815,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
     goto __pyx_L0;
     break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":232
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":233
  *     if enc == tree.XML_CHAR_ENCODING_UTF16LE:
  *         return "UTF-16LE"
  *     elif enc == tree.XML_CHAR_ENCODING_UTF16BE:             # <<<<<<<<<<<<<<
@@ -86862,7 +86824,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
  */
     case XML_CHAR_ENCODING_UTF16BE:
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":233
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":234
  *         return "UTF-16LE"
  *     elif enc == tree.XML_CHAR_ENCODING_UTF16BE:
  *         return "UTF-16BE"             # <<<<<<<<<<<<<<
@@ -86873,7 +86835,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
     goto __pyx_L0;
     break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":234
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":235
  *     elif enc == tree.XML_CHAR_ENCODING_UTF16BE:
  *         return "UTF-16BE"
  *     elif enc == tree.XML_CHAR_ENCODING_UCS4LE:             # <<<<<<<<<<<<<<
@@ -86882,7 +86844,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
  */
     case XML_CHAR_ENCODING_UCS4LE:
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":235
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":236
  *         return "UTF-16BE"
  *     elif enc == tree.XML_CHAR_ENCODING_UCS4LE:
  *         return "UCS-4LE"             # <<<<<<<<<<<<<<
@@ -86893,7 +86855,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
     goto __pyx_L0;
     break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":236
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":237
  *     elif enc == tree.XML_CHAR_ENCODING_UCS4LE:
  *         return "UCS-4LE"
  *     elif enc == tree.XML_CHAR_ENCODING_UCS4BE:             # <<<<<<<<<<<<<<
@@ -86902,7 +86864,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
  */
     case XML_CHAR_ENCODING_UCS4BE:
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":237
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":238
  *         return "UCS-4LE"
  *     elif enc == tree.XML_CHAR_ENCODING_UCS4BE:
  *         return "UCS-4BE"             # <<<<<<<<<<<<<<
@@ -86913,7 +86875,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
     goto __pyx_L0;
     break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":238
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":239
  *     elif enc == tree.XML_CHAR_ENCODING_UCS4BE:
  *         return "UCS-4BE"
  *     elif enc == tree.XML_CHAR_ENCODING_NONE:             # <<<<<<<<<<<<<<
@@ -86922,7 +86884,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
  */
     case XML_CHAR_ENCODING_NONE:
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":239
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":240
  *         return "UCS-4BE"
  *     elif enc == tree.XML_CHAR_ENCODING_NONE:
  *         return NULL             # <<<<<<<<<<<<<<
@@ -86934,7 +86896,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
     break;
     default:
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":242
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":243
  *     else:
  *         # returns a constant char*, no need to free it
  *         return tree.xmlGetCharEncodingName(enc)             # <<<<<<<<<<<<<<
@@ -86946,7 +86908,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
     break;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":226
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":227
  *     return 0
  * 
  * cdef const_char* _findEncodingName(const_xmlChar* buffer, int size):             # <<<<<<<<<<<<<<
@@ -86960,7 +86922,7 @@ static const char *__pyx_f_4lxml_5etree__findEncodingName(const xmlChar *__pyx_v
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":262
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":263
  *     cdef bint _close_file_after_read
  * 
  *     def __cinit__(self, filelike, exc_context not None, url, encoding=None, bint close_file=False):             # <<<<<<<<<<<<<<
@@ -87006,12 +86968,12 @@ static int __pyx_pw_4lxml_5etree_18_FileReaderContext_1__cinit__(PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_exc_context)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_url)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
         if (kw_args > 0) {
@@ -87025,7 +86987,7 @@ static int __pyx_pw_4lxml_5etree_18_FileReaderContext_1__cinit__(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -87043,21 +87005,21 @@ static int __pyx_pw_4lxml_5etree_18_FileReaderContext_1__cinit__(PyObject *__pyx
     __pyx_v_url = values[2];
     __pyx_v_encoding = values[3];
     if (values[4]) {
-      __pyx_v_close_file = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_close_file == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_close_file = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_close_file == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
       __pyx_v_close_file = ((int)0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._FileReaderContext.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
   if (unlikely(((PyObject *)__pyx_v_exc_context) == Py_None)) {
-    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "exc_context"); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "exc_context"); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_r = __pyx_pf_4lxml_5etree_18_FileReaderContext___cinit__(((struct __pyx_obj_4lxml_5etree__FileReaderContext *)__pyx_v_self), __pyx_v_filelike, __pyx_v_exc_context, __pyx_v_url, __pyx_v_encoding, __pyx_v_close_file);
 
@@ -87082,14 +87044,14 @@ static int __pyx_pf_4lxml_5etree_18_FileReaderContext___cinit__(struct __pyx_obj
   __Pyx_RefNannySetupContext("__cinit__", 0);
   __Pyx_INCREF(__pyx_v_url);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":263
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":264
  * 
  *     def __cinit__(self, filelike, exc_context not None, url, encoding=None, bint close_file=False):
  *         self._exc_context = exc_context             # <<<<<<<<<<<<<<
  *         self._filelike = filelike
  *         self._close_file_after_read = close_file
  */
-  if (!(likely(__Pyx_TypeTest(__pyx_v_exc_context, __pyx_ptype_4lxml_5etree__ExceptionContext)))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_v_exc_context, __pyx_ptype_4lxml_5etree__ExceptionContext)))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = __pyx_v_exc_context;
   __Pyx_INCREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
@@ -87098,7 +87060,7 @@ static int __pyx_pf_4lxml_5etree_18_FileReaderContext___cinit__(struct __pyx_obj
   __pyx_v_self->_exc_context = ((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":264
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":265
  *     def __cinit__(self, filelike, exc_context not None, url, encoding=None, bint close_file=False):
  *         self._exc_context = exc_context
  *         self._filelike = filelike             # <<<<<<<<<<<<<<
@@ -87111,7 +87073,7 @@ static int __pyx_pf_4lxml_5etree_18_FileReaderContext___cinit__(struct __pyx_obj
   __Pyx_DECREF(__pyx_v_self->_filelike);
   __pyx_v_self->_filelike = __pyx_v_filelike;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":265
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":266
  *         self._exc_context = exc_context
  *         self._filelike = filelike
  *         self._close_file_after_read = close_file             # <<<<<<<<<<<<<<
@@ -87120,7 +87082,7 @@ static int __pyx_pf_4lxml_5etree_18_FileReaderContext___cinit__(struct __pyx_obj
  */
   __pyx_v_self->_close_file_after_read = __pyx_v_close_file;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":266
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":267
  *         self._filelike = filelike
  *         self._close_file_after_read = close_file
  *         self._encoding = encoding             # <<<<<<<<<<<<<<
@@ -87133,7 +87095,7 @@ static int __pyx_pf_4lxml_5etree_18_FileReaderContext___cinit__(struct __pyx_obj
   __Pyx_DECREF(__pyx_v_self->_encoding);
   __pyx_v_self->_encoding = __pyx_v_encoding;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":267
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":268
  *         self._close_file_after_read = close_file
  *         self._encoding = encoding
  *         if url is None:             # <<<<<<<<<<<<<<
@@ -87144,7 +87106,7 @@ static int __pyx_pf_4lxml_5etree_18_FileReaderContext___cinit__(struct __pyx_obj
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":268
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":269
  *         self._encoding = encoding
  *         if url is None:
  *             self._c_url = NULL             # <<<<<<<<<<<<<<
@@ -87156,19 +87118,19 @@ static int __pyx_pf_4lxml_5etree_18_FileReaderContext___cinit__(struct __pyx_obj
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":270
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":271
  *             self._c_url = NULL
  *         else:
  *             url = _encodeFilename(url)             # <<<<<<<<<<<<<<
  *             self._c_url = _cstr(url)
  *         self._url = url
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_url); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_url); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_url, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":271
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":272
  *         else:
  *             url = _encodeFilename(url)
  *             self._c_url = _cstr(url)             # <<<<<<<<<<<<<<
@@ -87179,7 +87141,7 @@ static int __pyx_pf_4lxml_5etree_18_FileReaderContext___cinit__(struct __pyx_obj
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":272
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":273
  *             url = _encodeFilename(url)
  *             self._c_url = _cstr(url)
  *         self._url = url             # <<<<<<<<<<<<<<
@@ -87192,7 +87154,7 @@ static int __pyx_pf_4lxml_5etree_18_FileReaderContext___cinit__(struct __pyx_obj
   __Pyx_DECREF(__pyx_v_self->_url);
   __pyx_v_self->_url = __pyx_v_url;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":273
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":274
  *             self._c_url = _cstr(url)
  *         self._url = url
  *         self._bytes  = b''             # <<<<<<<<<<<<<<
@@ -87205,7 +87167,7 @@ static int __pyx_pf_4lxml_5etree_18_FileReaderContext___cinit__(struct __pyx_obj
   __Pyx_DECREF(__pyx_v_self->_bytes);
   __pyx_v_self->_bytes = __pyx_kp_b__15;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":274
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":275
  *         self._url = url
  *         self._bytes  = b''
  *         self._bytes_read = 0             # <<<<<<<<<<<<<<
@@ -87214,7 +87176,7 @@ static int __pyx_pf_4lxml_5etree_18_FileReaderContext___cinit__(struct __pyx_obj
  */
   __pyx_v_self->_bytes_read = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":262
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":263
  *     cdef bint _close_file_after_read
  * 
  *     def __cinit__(self, filelike, exc_context not None, url, encoding=None, bint close_file=False):             # <<<<<<<<<<<<<<
@@ -87235,7 +87197,7 @@ static int __pyx_pf_4lxml_5etree_18_FileReaderContext___cinit__(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":276
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":277
  *         self._bytes_read = 0
  * 
  *     cdef _close_file(self):             # <<<<<<<<<<<<<<
@@ -87267,7 +87229,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_FileReaderContext__close_file(struct __
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_close_file", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":277
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":278
  * 
  *     cdef _close_file(self):
  *         if self._filelike is None or not self._close_file_after_read:             # <<<<<<<<<<<<<<
@@ -87283,7 +87245,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_FileReaderContext__close_file(struct __
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":278
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":279
  *     cdef _close_file(self):
  *         if self._filelike is None or not self._close_file_after_read:
  *             return             # <<<<<<<<<<<<<<
@@ -87295,7 +87257,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_FileReaderContext__close_file(struct __
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":279
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":280
  *         if self._filelike is None or not self._close_file_after_read:
  *             return
  *         try:             # <<<<<<<<<<<<<<
@@ -87310,14 +87272,14 @@ static PyObject *__pyx_f_4lxml_5etree_18_FileReaderContext__close_file(struct __
       __Pyx_XGOTREF(__pyx_t_6);
       /*try:*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":280
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":281
  *             return
  *         try:
  *             close = self._filelike.close             # <<<<<<<<<<<<<<
  *         except AttributeError:
  *             close = None
  */
-        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_filelike, __pyx_n_s_close); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 280; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_filelike, __pyx_n_s_close); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __pyx_v_close = __pyx_t_7;
         __pyx_t_7 = 0;
@@ -87329,7 +87291,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_FileReaderContext__close_file(struct __
       __pyx_L7_error:;
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":281
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":282
  *         try:
  *             close = self._filelike.close
  *         except AttributeError:             # <<<<<<<<<<<<<<
@@ -87339,12 +87301,12 @@ static PyObject *__pyx_f_4lxml_5etree_18_FileReaderContext__close_file(struct __
       __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_AttributeError);
       if (__pyx_t_8) {
         __Pyx_AddTraceback("lxml.etree._FileReaderContext._close_file", __pyx_clineno, __pyx_lineno, __pyx_filename);
-        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_9, &__pyx_t_10) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_9, &__pyx_t_10) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_GOTREF(__pyx_t_10);
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":282
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":283
  *             close = self._filelike.close
  *         except AttributeError:
  *             close = None             # <<<<<<<<<<<<<<
@@ -87374,7 +87336,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_FileReaderContext__close_file(struct __
     }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":284
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":285
  *             close = None
  *         finally:
  *             self._filelike = None             # <<<<<<<<<<<<<<
@@ -87429,7 +87391,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_FileReaderContext__close_file(struct __
     __pyx_L6:;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":285
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":286
  *         finally:
  *             self._filelike = None
  *         if close is not None:             # <<<<<<<<<<<<<<
@@ -87440,21 +87402,21 @@ static PyObject *__pyx_f_4lxml_5etree_18_FileReaderContext__close_file(struct __
   __pyx_t_1 = (__pyx_t_3 != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":286
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":287
  *             self._filelike = None
  *         if close is not None:
  *             close()             # <<<<<<<<<<<<<<
  * 
  *     cdef xmlparser.xmlParserInputBuffer* _createParserInputBuffer(self):
  */
-    __pyx_t_10 = PyObject_Call(__pyx_v_close, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = __Pyx_PyObject_Call(__pyx_v_close, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_10);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     goto __pyx_L19;
   }
   __pyx_L19:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":276
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":277
  *         self._bytes_read = 0
  * 
  *     cdef _close_file(self):             # <<<<<<<<<<<<<<
@@ -87478,7 +87440,7 @@ static PyObject *__pyx_f_4lxml_5etree_18_FileReaderContext__close_file(struct __
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":288
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":289
  *             close()
  * 
  *     cdef xmlparser.xmlParserInputBuffer* _createParserInputBuffer(self):             # <<<<<<<<<<<<<<
@@ -87495,7 +87457,7 @@ static xmlParserInputBuffer *__pyx_f_4lxml_5etree_18_FileReaderContext__createPa
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("_createParserInputBuffer", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":291
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":292
  *         cdef stdio.FILE* c_stream
  *         cdef xmlparser.xmlParserInputBuffer* c_buffer
  *         c_buffer = xmlparser.xmlAllocParserInputBuffer(0)             # <<<<<<<<<<<<<<
@@ -87504,7 +87466,7 @@ static xmlParserInputBuffer *__pyx_f_4lxml_5etree_18_FileReaderContext__createPa
  */
   __pyx_v_c_buffer = xmlAllocParserInputBuffer(0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":292
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":293
  *         cdef xmlparser.xmlParserInputBuffer* c_buffer
  *         c_buffer = xmlparser.xmlAllocParserInputBuffer(0)
  *         c_stream = python.PyFile_AsFile(self._filelike)             # <<<<<<<<<<<<<<
@@ -87516,7 +87478,7 @@ static xmlParserInputBuffer *__pyx_f_4lxml_5etree_18_FileReaderContext__createPa
   __pyx_v_c_stream = PyFile_AsFile(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":293
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":294
  *         c_buffer = xmlparser.xmlAllocParserInputBuffer(0)
  *         c_stream = python.PyFile_AsFile(self._filelike)
  *         if c_stream is NULL:             # <<<<<<<<<<<<<<
@@ -87526,7 +87488,7 @@ static xmlParserInputBuffer *__pyx_f_4lxml_5etree_18_FileReaderContext__createPa
   __pyx_t_2 = ((__pyx_v_c_stream == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":294
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":295
  *         c_stream = python.PyFile_AsFile(self._filelike)
  *         if c_stream is NULL:
  *             c_buffer.readcallback  = _readFilelikeParser             # <<<<<<<<<<<<<<
@@ -87535,7 +87497,7 @@ static xmlParserInputBuffer *__pyx_f_4lxml_5etree_18_FileReaderContext__createPa
  */
     __pyx_v_c_buffer->readcallback = __pyx_f_4lxml_5etree__readFilelikeParser;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":295
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":296
  *         if c_stream is NULL:
  *             c_buffer.readcallback  = _readFilelikeParser
  *             c_buffer.context = <python.PyObject*>self             # <<<<<<<<<<<<<<
@@ -87547,7 +87509,7 @@ static xmlParserInputBuffer *__pyx_f_4lxml_5etree_18_FileReaderContext__createPa
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":297
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":298
  *             c_buffer.context = <python.PyObject*>self
  *         else:
  *             c_buffer.readcallback  = _readFileParser             # <<<<<<<<<<<<<<
@@ -87556,7 +87518,7 @@ static xmlParserInputBuffer *__pyx_f_4lxml_5etree_18_FileReaderContext__createPa
  */
     __pyx_v_c_buffer->readcallback = __pyx_f_4lxml_5etree__readFileParser;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":298
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":299
  *         else:
  *             c_buffer.readcallback  = _readFileParser
  *             c_buffer.context = c_stream             # <<<<<<<<<<<<<<
@@ -87567,7 +87529,7 @@ static xmlParserInputBuffer *__pyx_f_4lxml_5etree_18_FileReaderContext__createPa
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":299
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":300
  *             c_buffer.readcallback  = _readFileParser
  *             c_buffer.context = c_stream
  *         return c_buffer             # <<<<<<<<<<<<<<
@@ -87577,7 +87539,7 @@ static xmlParserInputBuffer *__pyx_f_4lxml_5etree_18_FileReaderContext__createPa
   __pyx_r = __pyx_v_c_buffer;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":288
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":289
  *             close()
  * 
  *     cdef xmlparser.xmlParserInputBuffer* _createParserInputBuffer(self):             # <<<<<<<<<<<<<<
@@ -87591,7 +87553,7 @@ static xmlParserInputBuffer *__pyx_f_4lxml_5etree_18_FileReaderContext__createPa
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":301
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":302
  *         return c_buffer
  * 
  *     cdef xmlparser.xmlParserInput* _createParserInput(             # <<<<<<<<<<<<<<
@@ -87605,7 +87567,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree_18_FileReaderContext__createParserIn
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_createParserInput", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":304
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":305
  *             self, xmlparser.xmlParserCtxt* ctxt):
  *         cdef xmlparser.xmlParserInputBuffer* c_buffer
  *         c_buffer = self._createParserInputBuffer()             # <<<<<<<<<<<<<<
@@ -87614,7 +87576,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree_18_FileReaderContext__createParserIn
  */
   __pyx_v_c_buffer = __pyx_f_4lxml_5etree_18_FileReaderContext__createParserInputBuffer(__pyx_v_self);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":305
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":306
  *         cdef xmlparser.xmlParserInputBuffer* c_buffer
  *         c_buffer = self._createParserInputBuffer()
  *         return xmlparser.xmlNewIOInputStream(ctxt, c_buffer, 0)             # <<<<<<<<<<<<<<
@@ -87624,7 +87586,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree_18_FileReaderContext__createParserIn
   __pyx_r = xmlNewIOInputStream(__pyx_v_ctxt, __pyx_v_c_buffer, 0);
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":301
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":302
  *         return c_buffer
  * 
  *     cdef xmlparser.xmlParserInput* _createParserInput(             # <<<<<<<<<<<<<<
@@ -87638,7 +87600,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree_18_FileReaderContext__createParserIn
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":307
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":308
  *         return xmlparser.xmlNewIOInputStream(ctxt, c_buffer, 0)
  * 
  *     cdef tree.xmlDtd* _readDtd(self):             # <<<<<<<<<<<<<<
@@ -87652,7 +87614,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_18_FileReaderContext__readDtd(struct __pyx_o
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_readDtd", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":309
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":310
  *     cdef tree.xmlDtd* _readDtd(self):
  *         cdef xmlparser.xmlParserInputBuffer* c_buffer
  *         c_buffer = self._createParserInputBuffer()             # <<<<<<<<<<<<<<
@@ -87661,7 +87623,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_18_FileReaderContext__readDtd(struct __pyx_o
  */
   __pyx_v_c_buffer = __pyx_f_4lxml_5etree_18_FileReaderContext__createParserInputBuffer(__pyx_v_self);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":310
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":311
  *         cdef xmlparser.xmlParserInputBuffer* c_buffer
  *         c_buffer = self._createParserInputBuffer()
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -87675,7 +87637,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_18_FileReaderContext__readDtd(struct __pyx_o
       #endif
       /*try:*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":311
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":312
  *         c_buffer = self._createParserInputBuffer()
  *         with nogil:
  *             return xmlparser.xmlIOParseDTD(NULL, c_buffer, 0)             # <<<<<<<<<<<<<<
@@ -87686,7 +87648,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_18_FileReaderContext__readDtd(struct __pyx_o
         goto __pyx_L3_return;
       }
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":310
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":311
  *         cdef xmlparser.xmlParserInputBuffer* c_buffer
  *         c_buffer = self._createParserInputBuffer()
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -87703,7 +87665,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_18_FileReaderContext__readDtd(struct __pyx_o
       }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":307
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":308
  *         return xmlparser.xmlNewIOInputStream(ctxt, c_buffer, 0)
  * 
  *     cdef tree.xmlDtd* _readDtd(self):             # <<<<<<<<<<<<<<
@@ -87717,7 +87679,7 @@ static xmlDtd *__pyx_f_4lxml_5etree_18_FileReaderContext__readDtd(struct __pyx_o
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":313
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":314
  *             return xmlparser.xmlIOParseDTD(NULL, c_buffer, 0)
  * 
  *     cdef xmlDoc* _readDoc(self, xmlparser.xmlParserCtxt* ctxt, int options):             # <<<<<<<<<<<<<<
@@ -87751,7 +87713,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_readDoc", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":321
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":322
  *         cdef void* c_callback_context
  * 
  *         if self._encoding is None:             # <<<<<<<<<<<<<<
@@ -87762,7 +87724,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":322
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":323
  * 
  *         if self._encoding is None:
  *             c_encoding = NULL             # <<<<<<<<<<<<<<
@@ -87774,7 +87736,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":324
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":325
  *             c_encoding = NULL
  *         else:
  *             c_encoding = _cstr(self._encoding)             # <<<<<<<<<<<<<<
@@ -87788,7 +87750,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":326
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":327
  *             c_encoding = _cstr(self._encoding)
  * 
  *         c_stream = python.PyFile_AsFile(self._filelike)             # <<<<<<<<<<<<<<
@@ -87800,7 +87762,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
   __pyx_v_c_stream = PyFile_AsFile(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":327
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":328
  * 
  *         c_stream = python.PyFile_AsFile(self._filelike)
  *         if c_stream is NULL:             # <<<<<<<<<<<<<<
@@ -87810,7 +87772,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
   __pyx_t_2 = ((__pyx_v_c_stream == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":328
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":329
  *         c_stream = python.PyFile_AsFile(self._filelike)
  *         if c_stream is NULL:
  *             c_read_callback  = _readFilelikeParser             # <<<<<<<<<<<<<<
@@ -87819,7 +87781,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
  */
     __pyx_v_c_read_callback = __pyx_f_4lxml_5etree__readFilelikeParser;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":329
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":330
  *         if c_stream is NULL:
  *             c_read_callback  = _readFilelikeParser
  *             c_callback_context = <python.PyObject*>self             # <<<<<<<<<<<<<<
@@ -87831,7 +87793,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":331
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":332
  *             c_callback_context = <python.PyObject*>self
  *         else:
  *             c_read_callback  = _readFileParser             # <<<<<<<<<<<<<<
@@ -87840,7 +87802,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
  */
     __pyx_v_c_read_callback = __pyx_f_4lxml_5etree__readFileParser;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":332
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":333
  *         else:
  *             c_read_callback  = _readFileParser
  *             c_callback_context = c_stream             # <<<<<<<<<<<<<<
@@ -87851,7 +87813,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":334
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":335
  *             c_callback_context = c_stream
  * 
  *         orig_options = ctxt.options             # <<<<<<<<<<<<<<
@@ -87861,7 +87823,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
   __pyx_t_4 = __pyx_v_ctxt->options;
   __pyx_v_orig_options = __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":335
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":336
  * 
  *         orig_options = ctxt.options
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -87875,7 +87837,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
       #endif
       /*try:*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":336
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":337
  *         orig_options = ctxt.options
  *         with nogil:
  *             if ctxt.html:             # <<<<<<<<<<<<<<
@@ -87885,7 +87847,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
         __pyx_t_2 = (__pyx_v_ctxt->html != 0);
         if (__pyx_t_2) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":337
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":338
  *         with nogil:
  *             if ctxt.html:
  *                 result = htmlparser.htmlCtxtReadIO(             # <<<<<<<<<<<<<<
@@ -87894,7 +87856,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
  */
           __pyx_v_result = htmlCtxtReadIO(__pyx_v_ctxt, __pyx_v_c_read_callback, NULL, __pyx_v_c_callback_context, __pyx_v_self->_c_url, __pyx_v_c_encoding, __pyx_v_options);
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":340
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":341
  *                         ctxt, c_read_callback, NULL, c_callback_context,
  *                         self._c_url, c_encoding, options)
  *                 if result is not NULL:             # <<<<<<<<<<<<<<
@@ -87904,7 +87866,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
           __pyx_t_2 = ((__pyx_v_result != NULL) != 0);
           if (__pyx_t_2) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":341
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":342
  *                         self._c_url, c_encoding, options)
  *                 if result is not NULL:
  *                     if _fixHtmlDictNames(ctxt.dict, result) < 0:             # <<<<<<<<<<<<<<
@@ -87914,7 +87876,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
             __pyx_t_2 = ((__pyx_f_4lxml_5etree__fixHtmlDictNames(__pyx_v_ctxt->dict, __pyx_v_result) < 0) != 0);
             if (__pyx_t_2) {
 
-              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":342
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":343
  *                 if result is not NULL:
  *                     if _fixHtmlDictNames(ctxt.dict, result) < 0:
  *                         tree.xmlFreeDoc(result)             # <<<<<<<<<<<<<<
@@ -87923,7 +87885,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
  */
               xmlFreeDoc(__pyx_v_result);
 
-              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":343
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":344
  *                     if _fixHtmlDictNames(ctxt.dict, result) < 0:
  *                         tree.xmlFreeDoc(result)
  *                         result = NULL             # <<<<<<<<<<<<<<
@@ -87941,7 +87903,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
         }
         /*else*/ {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":345
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":346
  *                         result = NULL
  *             else:
  *                 result = xmlparser.xmlCtxtReadIO(             # <<<<<<<<<<<<<<
@@ -87953,7 +87915,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
         __pyx_L8:;
       }
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":335
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":336
  * 
  *         orig_options = ctxt.options
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -87971,7 +87933,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
       }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":348
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":349
  *                     ctxt, c_read_callback, NULL, c_callback_context,
  *                     self._c_url, c_encoding, options)
  *         ctxt.options = orig_options # work around libxml2 problem             # <<<<<<<<<<<<<<
@@ -87980,7 +87942,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
  */
   __pyx_v_ctxt->options = __pyx_v_orig_options;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":349
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":350
  *                     self._c_url, c_encoding, options)
  *         ctxt.options = orig_options # work around libxml2 problem
  *         try:             # <<<<<<<<<<<<<<
@@ -87995,14 +87957,14 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
       __Pyx_XGOTREF(__pyx_t_7);
       /*try:*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":350
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":351
  *         ctxt.options = orig_options # work around libxml2 problem
  *         try:
  *             self._close_file()             # <<<<<<<<<<<<<<
  *         except:
  *             self._exc_context._store_raised()
  */
-        __pyx_t_3 = __pyx_f_4lxml_5etree_18_FileReaderContext__close_file(__pyx_v_self); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 350; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
+        __pyx_t_3 = __pyx_f_4lxml_5etree_18_FileReaderContext__close_file(__pyx_v_self); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       }
@@ -88013,7 +87975,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
       __pyx_L14_error:;
       __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":351
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":352
  *         try:
  *             self._close_file()
  *         except:             # <<<<<<<<<<<<<<
@@ -88022,12 +87984,12 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
  */
       /*except:*/ {
         __Pyx_AddTraceback("lxml.etree._FileReaderContext._readDoc", __pyx_clineno, __pyx_lineno, __pyx_filename);
-        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_8, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L16_except_error;}
+        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_8, &__pyx_t_9) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L16_except_error;}
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_GOTREF(__pyx_t_8);
         __Pyx_GOTREF(__pyx_t_9);
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":352
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":353
  *             self._close_file()
  *         except:
  *             self._exc_context._store_raised()             # <<<<<<<<<<<<<<
@@ -88055,7 +88017,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
     }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":354
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":355
  *             self._exc_context._store_raised()
  *         finally:
  *             return result  # swallow any exceptions             # <<<<<<<<<<<<<<
@@ -88100,7 +88062,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
     }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":313
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":314
  *             return xmlparser.xmlIOParseDTD(NULL, c_buffer, 0)
  * 
  *     cdef xmlDoc* _readDoc(self, xmlparser.xmlParserCtxt* ctxt, int options):             # <<<<<<<<<<<<<<
@@ -88114,7 +88076,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(struct __pyx_o
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":356
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":357
  *             return result  # swallow any exceptions
  * 
  *     cdef int copyToBuffer(self, char* c_buffer, int c_requested):             # <<<<<<<<<<<<<<
@@ -88148,7 +88110,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("copyToBuffer", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":357
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":358
  * 
  *     cdef int copyToBuffer(self, char* c_buffer, int c_requested):
  *         cdef int c_byte_count = 0             # <<<<<<<<<<<<<<
@@ -88157,7 +88119,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
   __pyx_v_c_byte_count = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":360
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":361
  *         cdef char* c_start
  *         cdef Py_ssize_t byte_count, remaining
  *         if self._bytes_read < 0:             # <<<<<<<<<<<<<<
@@ -88167,7 +88129,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
   __pyx_t_1 = ((__pyx_v_self->_bytes_read < 0) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":361
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":362
  *         cdef Py_ssize_t byte_count, remaining
  *         if self._bytes_read < 0:
  *             return 0             # <<<<<<<<<<<<<<
@@ -88178,7 +88140,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":362
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":363
  *         if self._bytes_read < 0:
  *             return 0
  *         try:             # <<<<<<<<<<<<<<
@@ -88193,7 +88155,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
       __Pyx_XGOTREF(__pyx_t_4);
       /*try:*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":363
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":364
  *             return 0
  *         try:
  *             byte_count = python.PyBytes_GET_SIZE(self._bytes)             # <<<<<<<<<<<<<<
@@ -88205,7 +88167,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
         __pyx_v_byte_count = PyBytes_GET_SIZE(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":364
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":365
  *         try:
  *             byte_count = python.PyBytes_GET_SIZE(self._bytes)
  *             remaining  = byte_count - self._bytes_read             # <<<<<<<<<<<<<<
@@ -88214,7 +88176,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
         __pyx_v_remaining = (__pyx_v_byte_count - __pyx_v_self->_bytes_read);
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":365
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":366
  *             byte_count = python.PyBytes_GET_SIZE(self._bytes)
  *             remaining  = byte_count - self._bytes_read
  *             while c_requested > remaining:             # <<<<<<<<<<<<<<
@@ -88225,7 +88187,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
           __pyx_t_1 = ((__pyx_v_c_requested > __pyx_v_remaining) != 0);
           if (!__pyx_t_1) break;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":366
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":367
  *             remaining  = byte_count - self._bytes_read
  *             while c_requested > remaining:
  *                 c_start = _cstr(self._bytes) + self._bytes_read             # <<<<<<<<<<<<<<
@@ -88237,7 +88199,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
           __pyx_v_c_start = (PyBytes_AS_STRING(__pyx_t_5) + __pyx_v_self->_bytes_read);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":367
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":368
  *             while c_requested > remaining:
  *                 c_start = _cstr(self._bytes) + self._bytes_read
  *                 cstring_h.memcpy(c_buffer, c_start, remaining)             # <<<<<<<<<<<<<<
@@ -88246,7 +88208,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
           memcpy(__pyx_v_c_buffer, __pyx_v_c_start, __pyx_v_remaining);
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":368
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":369
  *                 c_start = _cstr(self._bytes) + self._bytes_read
  *                 cstring_h.memcpy(c_buffer, c_start, remaining)
  *                 c_byte_count += remaining             # <<<<<<<<<<<<<<
@@ -88255,7 +88217,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
           __pyx_v_c_byte_count = (__pyx_v_c_byte_count + __pyx_v_remaining);
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":369
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":370
  *                 cstring_h.memcpy(c_buffer, c_start, remaining)
  *                 c_byte_count += remaining
  *                 c_buffer += remaining             # <<<<<<<<<<<<<<
@@ -88264,7 +88226,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
           __pyx_v_c_buffer = (__pyx_v_c_buffer + __pyx_v_remaining);
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":370
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":371
  *                 c_byte_count += remaining
  *                 c_buffer += remaining
  *                 c_requested -= remaining             # <<<<<<<<<<<<<<
@@ -88273,23 +88235,23 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
           __pyx_v_c_requested = (__pyx_v_c_requested - __pyx_v_remaining);
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":372
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":373
  *                 c_requested -= remaining
  * 
  *                 self._bytes = self._filelike.read(c_requested)             # <<<<<<<<<<<<<<
  *                 if not isinstance(self._bytes, bytes):
  *                     if isinstance(self._bytes, unicode):
  */
-          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_filelike, __pyx_n_s_read); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_filelike, __pyx_n_s_read); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
           __Pyx_GOTREF(__pyx_t_5);
-          __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_c_requested); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_c_requested); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
           __Pyx_GOTREF(__pyx_t_6);
-          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
           __Pyx_GOTREF(__pyx_t_7);
           PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);
           __Pyx_GIVEREF(__pyx_t_6);
           __pyx_t_6 = 0;
-          __pyx_t_6 = PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -88299,7 +88261,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
           __pyx_v_self->_bytes = __pyx_t_6;
           __pyx_t_6 = 0;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":373
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":374
  * 
  *                 self._bytes = self._filelike.read(c_requested)
  *                 if not isinstance(self._bytes, bytes):             # <<<<<<<<<<<<<<
@@ -88313,7 +88275,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
           __pyx_t_8 = ((!(__pyx_t_1 != 0)) != 0);
           if (__pyx_t_8) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":374
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":375
  *                 self._bytes = self._filelike.read(c_requested)
  *                 if not isinstance(self._bytes, bytes):
  *                     if isinstance(self._bytes, unicode):             # <<<<<<<<<<<<<<
@@ -88327,7 +88289,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
             __pyx_t_1 = (__pyx_t_8 != 0);
             if (__pyx_t_1) {
 
-              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":375
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":376
  *                 if not isinstance(self._bytes, bytes):
  *                     if isinstance(self._bytes, unicode):
  *                         if self._encoding is None:             # <<<<<<<<<<<<<<
@@ -88338,7 +88300,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
               __pyx_t_8 = (__pyx_t_1 != 0);
               if (__pyx_t_8) {
 
-                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":376
+                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":377
  *                     if isinstance(self._bytes, unicode):
  *                         if self._encoding is None:
  *                             self._bytes = (<unicode>self._bytes).encode('utf8')             # <<<<<<<<<<<<<<
@@ -88347,9 +88309,9 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
                 if (unlikely(__pyx_v_self->_bytes == Py_None)) {
                   PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "encode");
-                  {__pyx_filename = __pyx_f[6]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                  {__pyx_filename = __pyx_f[6]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
                 }
-                __pyx_t_6 = PyUnicode_AsUTF8String(((PyObject*)__pyx_v_self->_bytes)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                __pyx_t_6 = PyUnicode_AsUTF8String(((PyObject*)__pyx_v_self->_bytes)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 377; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
                 __Pyx_GOTREF(__pyx_t_6);
                 __Pyx_GIVEREF(__pyx_t_6);
                 __Pyx_GOTREF(__pyx_v_self->_bytes);
@@ -88360,7 +88322,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
               }
               /*else*/ {
 
-                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":379
+                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":380
  *                         else:
  *                             self._bytes = python.PyUnicode_AsEncodedString(
  *                                 self._bytes, _cstr(self._encoding), NULL)             # <<<<<<<<<<<<<<
@@ -88372,14 +88334,14 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
                 __pyx_t_7 = __pyx_v_self->_encoding;
                 __Pyx_INCREF(__pyx_t_7);
 
-                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":378
+                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":379
  *                             self._bytes = (<unicode>self._bytes).encode('utf8')
  *                         else:
  *                             self._bytes = python.PyUnicode_AsEncodedString(             # <<<<<<<<<<<<<<
  *                                 self._bytes, _cstr(self._encoding), NULL)
  *                     else:
  */
-                __pyx_t_5 = PyUnicode_AsEncodedString(__pyx_t_6, PyBytes_AS_STRING(__pyx_t_7), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 378; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+                __pyx_t_5 = PyUnicode_AsEncodedString(__pyx_t_6, PyBytes_AS_STRING(__pyx_t_7), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 379; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
                 __Pyx_GOTREF(__pyx_t_5);
                 __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
                 __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -88394,18 +88356,18 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
             }
             /*else*/ {
 
-              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":381
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":382
  *                                 self._bytes, _cstr(self._encoding), NULL)
  *                     else:
  *                         self._close_file()             # <<<<<<<<<<<<<<
  *                         raise TypeError, \
  *                             u"reading from file-like objects must return byte strings or unicode strings"
  */
-              __pyx_t_5 = __pyx_f_4lxml_5etree_18_FileReaderContext__close_file(__pyx_v_self); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              __pyx_t_5 = __pyx_f_4lxml_5etree_18_FileReaderContext__close_file(__pyx_v_self); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
               __Pyx_GOTREF(__pyx_t_5);
               __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":382
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":383
  *                     else:
  *                         self._close_file()
  *                         raise TypeError, \             # <<<<<<<<<<<<<<
@@ -88413,14 +88375,14 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  * 
  */
               __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_reading_from_file_like_objects_m, 0, 0);
-              {__pyx_filename = __pyx_f[6]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+              {__pyx_filename = __pyx_f[6]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
             }
             __pyx_L18:;
             goto __pyx_L17;
           }
           __pyx_L17:;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":385
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":386
  *                             u"reading from file-like objects must return byte strings or unicode strings"
  * 
  *                 remaining = python.PyBytes_GET_SIZE(self._bytes)             # <<<<<<<<<<<<<<
@@ -88432,7 +88394,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
           __pyx_v_remaining = PyBytes_GET_SIZE(__pyx_t_5);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":386
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":387
  * 
  *                 remaining = python.PyBytes_GET_SIZE(self._bytes)
  *                 if remaining == 0:             # <<<<<<<<<<<<<<
@@ -88442,7 +88404,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
           __pyx_t_8 = ((__pyx_v_remaining == 0) != 0);
           if (__pyx_t_8) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":387
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":388
  *                 remaining = python.PyBytes_GET_SIZE(self._bytes)
  *                 if remaining == 0:
  *                     self._bytes_read = -1             # <<<<<<<<<<<<<<
@@ -88451,18 +88413,18 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
             __pyx_v_self->_bytes_read = -1;
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":388
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":389
  *                 if remaining == 0:
  *                     self._bytes_read = -1
  *                     self._close_file()             # <<<<<<<<<<<<<<
  *                     return c_byte_count
  *                 self._bytes_read = 0
  */
-            __pyx_t_5 = __pyx_f_4lxml_5etree_18_FileReaderContext__close_file(__pyx_v_self); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+            __pyx_t_5 = __pyx_f_4lxml_5etree_18_FileReaderContext__close_file(__pyx_v_self); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 389; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
             __Pyx_GOTREF(__pyx_t_5);
             __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":389
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":390
  *                     self._bytes_read = -1
  *                     self._close_file()
  *                     return c_byte_count             # <<<<<<<<<<<<<<
@@ -88473,7 +88435,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
             goto __pyx_L11_try_return;
           }
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":390
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":391
  *                     self._close_file()
  *                     return c_byte_count
  *                 self._bytes_read = 0             # <<<<<<<<<<<<<<
@@ -88483,7 +88445,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
           __pyx_v_self->_bytes_read = 0;
         }
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":392
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":393
  *                 self._bytes_read = 0
  * 
  *             if c_requested > 0:             # <<<<<<<<<<<<<<
@@ -88493,7 +88455,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
         __pyx_t_8 = ((__pyx_v_c_requested > 0) != 0);
         if (__pyx_t_8) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":393
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":394
  * 
  *             if c_requested > 0:
  *                 c_start = _cstr(self._bytes) + self._bytes_read             # <<<<<<<<<<<<<<
@@ -88505,7 +88467,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
           __pyx_v_c_start = (PyBytes_AS_STRING(__pyx_t_5) + __pyx_v_self->_bytes_read);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":394
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":395
  *             if c_requested > 0:
  *                 c_start = _cstr(self._bytes) + self._bytes_read
  *                 cstring_h.memcpy(c_buffer, c_start, c_requested)             # <<<<<<<<<<<<<<
@@ -88514,7 +88476,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
           memcpy(__pyx_v_c_buffer, __pyx_v_c_start, __pyx_v_c_requested);
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":395
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":396
  *                 c_start = _cstr(self._bytes) + self._bytes_read
  *                 cstring_h.memcpy(c_buffer, c_start, c_requested)
  *                 c_byte_count += c_requested             # <<<<<<<<<<<<<<
@@ -88523,7 +88485,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
           __pyx_v_c_byte_count = (__pyx_v_c_byte_count + __pyx_v_c_requested);
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":396
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":397
  *                 cstring_h.memcpy(c_buffer, c_start, c_requested)
  *                 c_byte_count += c_requested
  *                 self._bytes_read += c_requested             # <<<<<<<<<<<<<<
@@ -88544,7 +88506,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":397
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":398
  *                 c_byte_count += c_requested
  *                 self._bytes_read += c_requested
  *         except:             # <<<<<<<<<<<<<<
@@ -88553,12 +88515,12 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
       /*except:*/ {
         __Pyx_AddTraceback("lxml.etree._FileReaderContext.copyToBuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
-        if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_7, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 397; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
+        if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_7, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L9_except_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_GOTREF(__pyx_t_6);
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":398
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":399
  *                 self._bytes_read += c_requested
  *         except:
  *             c_byte_count = -1             # <<<<<<<<<<<<<<
@@ -88567,7 +88529,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
         __pyx_v_c_byte_count = -1;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":399
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":400
  *         except:
  *             c_byte_count = -1
  *             self._exc_context._store_raised()             # <<<<<<<<<<<<<<
@@ -88576,7 +88538,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
         ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_self->_exc_context->__pyx_vtab)->_store_raised(__pyx_v_self->_exc_context);
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":400
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":401
  *             c_byte_count = -1
  *             self._exc_context._store_raised()
  *             try:             # <<<<<<<<<<<<<<
@@ -88590,14 +88552,14 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
           __Pyx_XGOTREF(__pyx_t_11);
           /*try:*/ {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":401
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":402
  *             self._exc_context._store_raised()
  *             try:
  *                 self._close_file()             # <<<<<<<<<<<<<<
  *             except:
  *                 self._exc_context._store_raised()
  */
-            __pyx_t_12 = __pyx_f_4lxml_5etree_18_FileReaderContext__close_file(__pyx_v_self); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L24_error;}
+            __pyx_t_12 = __pyx_f_4lxml_5etree_18_FileReaderContext__close_file(__pyx_v_self); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L24_error;}
             __Pyx_GOTREF(__pyx_t_12);
             __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
           }
@@ -88608,7 +88570,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
           __pyx_L24_error:;
           __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":402
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":403
  *             try:
  *                 self._close_file()
  *             except:             # <<<<<<<<<<<<<<
@@ -88617,12 +88579,12 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
  */
           /*except:*/ {
             __Pyx_AddTraceback("lxml.etree._FileReaderContext.copyToBuffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
-            if (__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 402; __pyx_clineno = __LINE__; goto __pyx_L26_except_error;}
+            if (__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 403; __pyx_clineno = __LINE__; goto __pyx_L26_except_error;}
             __Pyx_GOTREF(__pyx_t_12);
             __Pyx_GOTREF(__pyx_t_13);
             __Pyx_GOTREF(__pyx_t_14);
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":403
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":404
  *                 self._close_file()
  *             except:
  *                 self._exc_context._store_raised()             # <<<<<<<<<<<<<<
@@ -88674,7 +88636,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
     }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":405
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":406
  *                 self._exc_context._store_raised()
  *         finally:
  *             return c_byte_count  # swallow any exceptions             # <<<<<<<<<<<<<<
@@ -88726,7 +88688,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
     }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":356
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":357
  *             return result  # swallow any exceptions
  * 
  *     cdef int copyToBuffer(self, char* c_buffer, int c_requested):             # <<<<<<<<<<<<<<
@@ -88740,7 +88702,7 @@ static int __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(struct __pyx_o
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":407
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":408
  *             return c_byte_count  # swallow any exceptions
  * 
  * cdef int _readFilelikeParser(void* ctxt, char* c_buffer, int c_size) with gil:             # <<<<<<<<<<<<<<
@@ -88756,7 +88718,7 @@ static int __pyx_f_4lxml_5etree__readFilelikeParser(void *__pyx_v_ctxt, char *__
   #endif
   __Pyx_RefNannySetupContext("_readFilelikeParser", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":408
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":409
  * 
  * cdef int _readFilelikeParser(void* ctxt, char* c_buffer, int c_size) with gil:
  *     return (<_FileReaderContext>ctxt).copyToBuffer(c_buffer, c_size)             # <<<<<<<<<<<<<<
@@ -88766,7 +88728,7 @@ static int __pyx_f_4lxml_5etree__readFilelikeParser(void *__pyx_v_ctxt, char *__
   __pyx_r = __pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer(((struct __pyx_obj_4lxml_5etree__FileReaderContext *)__pyx_v_ctxt), __pyx_v_c_buffer, __pyx_v_c_size);
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":407
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":408
  *             return c_byte_count  # swallow any exceptions
  * 
  * cdef int _readFilelikeParser(void* ctxt, char* c_buffer, int c_size) with gil:             # <<<<<<<<<<<<<<
@@ -88783,7 +88745,7 @@ static int __pyx_f_4lxml_5etree__readFilelikeParser(void *__pyx_v_ctxt, char *__
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":410
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":411
  *     return (<_FileReaderContext>ctxt).copyToBuffer(c_buffer, c_size)
  * 
  * cdef int _readFileParser(void* ctxt, char* c_buffer, int c_size) nogil:             # <<<<<<<<<<<<<<
@@ -88794,7 +88756,7 @@ static int __pyx_f_4lxml_5etree__readFilelikeParser(void *__pyx_v_ctxt, char *__
 static int __pyx_f_4lxml_5etree__readFileParser(void *__pyx_v_ctxt, char *__pyx_v_c_buffer, int __pyx_v_c_size) {
   int __pyx_r;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":411
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":412
  * 
  * cdef int _readFileParser(void* ctxt, char* c_buffer, int c_size) nogil:
  *     return stdio.fread(c_buffer, 1,  c_size, <stdio.FILE*>ctxt)             # <<<<<<<<<<<<<<
@@ -88804,7 +88766,7 @@ static int __pyx_f_4lxml_5etree__readFileParser(void *__pyx_v_ctxt, char *__pyx_
   __pyx_r = fread(__pyx_v_c_buffer, 1, __pyx_v_c_size, ((FILE *)__pyx_v_ctxt));
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":410
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":411
  *     return (<_FileReaderContext>ctxt).copyToBuffer(c_buffer, c_size)
  * 
  * cdef int _readFileParser(void* ctxt, char* c_buffer, int c_size) nogil:             # <<<<<<<<<<<<<<
@@ -88817,7 +88779,7 @@ static int __pyx_f_4lxml_5etree__readFileParser(void *__pyx_v_ctxt, char *__pyx_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":417
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":418
  * ############################################################
  * 
  * cdef xmlparser.xmlParserInput* _local_resolver(const_char* c_url, const_char* c_pubid,             # <<<<<<<<<<<<<<
@@ -88854,7 +88816,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
   #endif
   __Pyx_RefNannySetupContext("_local_resolver", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":426
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":427
  *     # passed, check to see if the thread state object has an implied
  *     # context.
  *     if c_context._private is not NULL:             # <<<<<<<<<<<<<<
@@ -88864,7 +88826,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
   __pyx_t_1 = ((__pyx_v_c_context->_private != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":427
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":428
  *     # context.
  *     if c_context._private is not NULL:
  *         context = <_ResolverContext>c_context._private             # <<<<<<<<<<<<<<
@@ -88879,21 +88841,21 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":429
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":430
  *         context = <_ResolverContext>c_context._private
  *     else:
  *         context = __GLOBAL_PARSER_CONTEXT.findImpliedContext()             # <<<<<<<<<<<<<<
  * 
  *     if context is None:
  */
-    __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_findImpliedContext(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 429; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_findImpliedContext(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ResolverContext *)__pyx_t_2);
     __pyx_t_2 = 0;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":431
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":432
  *         context = __GLOBAL_PARSER_CONTEXT.findImpliedContext()
  * 
  *     if context is None:             # <<<<<<<<<<<<<<
@@ -88904,7 +88866,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
   __pyx_t_3 = (__pyx_t_1 != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":432
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":433
  * 
  *     if context is None:
  *         if __DEFAULT_ENTITY_LOADER is NULL:             # <<<<<<<<<<<<<<
@@ -88914,7 +88876,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
     __pyx_t_3 = ((__pyx_v_4lxml_5etree___DEFAULT_ENTITY_LOADER == NULL) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":433
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":434
  *     if context is None:
  *         if __DEFAULT_ENTITY_LOADER is NULL:
  *             return NULL             # <<<<<<<<<<<<<<
@@ -88925,7 +88887,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       goto __pyx_L0;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":434
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":435
  *         if __DEFAULT_ENTITY_LOADER is NULL:
  *             return NULL
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -88939,7 +88901,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
         #endif
         /*try:*/ {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":436
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":437
  *         with nogil:
  *             # free the GIL as we might do serious I/O here (e.g. HTTP)
  *             c_input = __DEFAULT_ENTITY_LOADER(c_url, c_pubid, c_context)             # <<<<<<<<<<<<<<
@@ -88949,7 +88911,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
           __pyx_v_c_input = __pyx_v_4lxml_5etree___DEFAULT_ENTITY_LOADER(__pyx_v_c_url, __pyx_v_c_pubid, __pyx_v_c_context);
         }
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":434
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":435
  *         if __DEFAULT_ENTITY_LOADER is NULL:
  *             return NULL
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -88967,7 +88929,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
         }
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":437
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":438
  *             # free the GIL as we might do serious I/O here (e.g. HTTP)
  *             c_input = __DEFAULT_ENTITY_LOADER(c_url, c_pubid, c_context)
  *         return c_input             # <<<<<<<<<<<<<<
@@ -88978,7 +88940,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":439
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":440
  *         return c_input
  * 
  *     try:             # <<<<<<<<<<<<<<
@@ -88992,7 +88954,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":440
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":441
  * 
  *     try:
  *         if c_url is NULL:             # <<<<<<<<<<<<<<
@@ -89002,7 +88964,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       __pyx_t_3 = ((__pyx_v_c_url == NULL) != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":441
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":442
  *     try:
  *         if c_url is NULL:
  *             url = None             # <<<<<<<<<<<<<<
@@ -89015,21 +88977,21 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       }
       /*else*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":444
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":445
  *         else:
  *             # parsing a related document (DTD etc.) => UTF-8 encoded URL?
  *             url = _decodeFilename(<const_xmlChar*>c_url)             # <<<<<<<<<<<<<<
  *         if c_pubid is NULL:
  *             pubid = None
  */
-        __pyx_t_2 = __pyx_f_4lxml_5etree__decodeFilename(((const xmlChar *)__pyx_v_c_url)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+        __pyx_t_2 = __pyx_f_4lxml_5etree__decodeFilename(((const xmlChar *)__pyx_v_c_url)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 445; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
         __Pyx_GOTREF(__pyx_t_2);
         __pyx_v_url = __pyx_t_2;
         __pyx_t_2 = 0;
       }
       __pyx_L17:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":445
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":446
  *             # parsing a related document (DTD etc.) => UTF-8 encoded URL?
  *             url = _decodeFilename(<const_xmlChar*>c_url)
  *         if c_pubid is NULL:             # <<<<<<<<<<<<<<
@@ -89039,7 +89001,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       __pyx_t_3 = ((__pyx_v_c_pubid == NULL) != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":446
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":447
  *             url = _decodeFilename(<const_xmlChar*>c_url)
  *         if c_pubid is NULL:
  *             pubid = None             # <<<<<<<<<<<<<<
@@ -89052,30 +89014,30 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       }
       /*else*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":448
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":449
  *             pubid = None
  *         else:
  *             pubid = funicode(<const_xmlChar*>c_pubid) # always UTF-8             # <<<<<<<<<<<<<<
  * 
  *         doc_ref = context._resolvers.resolve(url, pubid, context)
  */
-        __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(((const xmlChar *)__pyx_v_c_pubid)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+        __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(((const xmlChar *)__pyx_v_c_pubid)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
         __Pyx_GOTREF(__pyx_t_2);
         __pyx_v_pubid = __pyx_t_2;
         __pyx_t_2 = 0;
       }
       __pyx_L18:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":450
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":451
  *             pubid = funicode(<const_xmlChar*>c_pubid) # always UTF-8
  * 
  *         doc_ref = context._resolvers.resolve(url, pubid, context)             # <<<<<<<<<<<<<<
  *     except:
  *         context._store_raised()
  */
-      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context->_resolvers), __pyx_n_s_resolve); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context->_resolvers), __pyx_n_s_resolve); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_INCREF(__pyx_v_url);
       PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_url);
@@ -89086,11 +89048,11 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       __Pyx_INCREF(((PyObject *)__pyx_v_context));
       PyTuple_SET_ITEM(__pyx_t_7, 2, ((PyObject *)__pyx_v_context));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_context));
-      __pyx_t_8 = PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_4lxml_5etree__InputDocument))))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+      if (!(likely(((__pyx_t_8) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_4lxml_5etree__InputDocument))))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
       __pyx_v_doc_ref = ((struct __pyx_obj_4lxml_5etree__InputDocument *)__pyx_t_8);
       __pyx_t_8 = 0;
     }
@@ -89103,7 +89065,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
     __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":451
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":452
  * 
  *         doc_ref = context._resolvers.resolve(url, pubid, context)
  *     except:             # <<<<<<<<<<<<<<
@@ -89112,12 +89074,12 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
  */
     /*except:*/ {
       __Pyx_AddTraceback("lxml.etree._local_resolver", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 451; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
+      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 452; __pyx_clineno = __LINE__; goto __pyx_L11_except_error;}
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_2);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":452
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":453
  *         doc_ref = context._resolvers.resolve(url, pubid, context)
  *     except:
  *         context._store_raised()             # <<<<<<<<<<<<<<
@@ -89126,7 +89088,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
  */
       ((struct __pyx_vtabstruct_4lxml_5etree__ResolverContext *)__pyx_v_context->__pyx_base.__pyx_vtab)->__pyx_base._store_raised(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_context));
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":453
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":454
  *     except:
  *         context._store_raised()
  *         return NULL             # <<<<<<<<<<<<<<
@@ -89163,7 +89125,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
     __pyx_L16_try_end:;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":455
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":456
  *         return NULL
  * 
  *     if doc_ref is not None:             # <<<<<<<<<<<<<<
@@ -89174,7 +89136,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
   __pyx_t_1 = (__pyx_t_3 != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":471
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":472
  *                 c_input = xmlparser.xmlNewInputFromFile(
  *                     c_context, c_filename)
  *         elif doc_ref._type == PARSER_DATA_FILE:             # <<<<<<<<<<<<<<
@@ -89183,7 +89145,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
  */
     switch (__pyx_v_doc_ref->_type) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":456
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":457
  * 
  *     if doc_ref is not None:
  *         if doc_ref._type == PARSER_DATA_STRING:             # <<<<<<<<<<<<<<
@@ -89192,7 +89154,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
  */
       case __pyx_e_4lxml_5etree_PARSER_DATA_STRING:
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":457
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":458
  *     if doc_ref is not None:
  *         if doc_ref._type == PARSER_DATA_STRING:
  *             data = doc_ref._data_bytes             # <<<<<<<<<<<<<<
@@ -89204,7 +89166,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       __pyx_v_data = __pyx_t_2;
       __pyx_t_2 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":458
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":459
  *         if doc_ref._type == PARSER_DATA_STRING:
  *             data = doc_ref._data_bytes
  *             c_input = xmlparser.xmlNewInputStream(c_context)             # <<<<<<<<<<<<<<
@@ -89213,7 +89175,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
  */
       __pyx_v_c_input = xmlNewInputStream(__pyx_v_c_context);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":459
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":460
  *             data = doc_ref._data_bytes
  *             c_input = xmlparser.xmlNewInputStream(c_context)
  *             if c_input is not NULL:             # <<<<<<<<<<<<<<
@@ -89223,7 +89185,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       __pyx_t_1 = ((__pyx_v_c_input != NULL) != 0);
       if (__pyx_t_1) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":460
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":461
  *             c_input = xmlparser.xmlNewInputStream(c_context)
  *             if c_input is not NULL:
  *                 c_input.base = _xcstr(data)             # <<<<<<<<<<<<<<
@@ -89232,7 +89194,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
  */
         __pyx_v_c_input->base = (const xmlChar*)PyBytes_AS_STRING(__pyx_v_data);
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":461
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":462
  *             if c_input is not NULL:
  *                 c_input.base = _xcstr(data)
  *                 c_input.length = python.PyBytes_GET_SIZE(data)             # <<<<<<<<<<<<<<
@@ -89241,7 +89203,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
  */
         __pyx_v_c_input->length = PyBytes_GET_SIZE(__pyx_v_data);
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":462
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":463
  *                 c_input.base = _xcstr(data)
  *                 c_input.length = python.PyBytes_GET_SIZE(data)
  *                 c_input.cur = c_input.base             # <<<<<<<<<<<<<<
@@ -89251,7 +89213,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
         __pyx_t_9 = __pyx_v_c_input->base;
         __pyx_v_c_input->cur = __pyx_t_9;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":463
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":464
  *                 c_input.length = python.PyBytes_GET_SIZE(data)
  *                 c_input.cur = c_input.base
  *                 c_input.end = c_input.base + c_input.length             # <<<<<<<<<<<<<<
@@ -89264,7 +89226,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       __pyx_L22:;
       break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":464
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":465
  *                 c_input.cur = c_input.base
  *                 c_input.end = c_input.base + c_input.length
  *         elif doc_ref._type == PARSER_DATA_FILENAME:             # <<<<<<<<<<<<<<
@@ -89273,7 +89235,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
  */
       case __pyx_e_4lxml_5etree_PARSER_DATA_FILENAME:
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":465
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":466
  *                 c_input.end = c_input.base + c_input.length
  *         elif doc_ref._type == PARSER_DATA_FILENAME:
  *             data = None             # <<<<<<<<<<<<<<
@@ -89283,7 +89245,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       __Pyx_INCREF(Py_None);
       __pyx_v_data = Py_None;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":466
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":467
  *         elif doc_ref._type == PARSER_DATA_FILENAME:
  *             data = None
  *             c_filename = _cstr(doc_ref._filename)             # <<<<<<<<<<<<<<
@@ -89295,7 +89257,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       __pyx_v_c_filename = PyBytes_AS_STRING(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":467
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":468
  *             data = None
  *             c_filename = _cstr(doc_ref._filename)
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -89309,7 +89271,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
           #endif
           /*try:*/ {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":469
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":470
  *             with nogil:
  *                 # free the GIL as we might do serious I/O here
  *                 c_input = xmlparser.xmlNewInputFromFile(             # <<<<<<<<<<<<<<
@@ -89319,7 +89281,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
             __pyx_v_c_input = xmlNewInputFromFile(__pyx_v_c_context, __pyx_v_c_filename);
           }
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":467
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":468
  *             data = None
  *             c_filename = _cstr(doc_ref._filename)
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -89338,7 +89300,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       }
       break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":471
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":472
  *                 c_input = xmlparser.xmlNewInputFromFile(
  *                     c_context, c_filename)
  *         elif doc_ref._type == PARSER_DATA_FILE:             # <<<<<<<<<<<<<<
@@ -89347,24 +89309,24 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
  */
       case __pyx_e_4lxml_5etree_PARSER_DATA_FILE:
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":473
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":474
  *         elif doc_ref._type == PARSER_DATA_FILE:
  *             file_context = _FileReaderContext(doc_ref._file, context, url,
  *                                               None, doc_ref._close_file)             # <<<<<<<<<<<<<<
  *             c_input = file_context._createParserInput(c_context)
  *             data = file_context
  */
-      __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_doc_ref->_close_file); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_doc_ref->_close_file); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":472
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":473
  *                     c_context, c_filename)
  *         elif doc_ref._type == PARSER_DATA_FILE:
  *             file_context = _FileReaderContext(doc_ref._file, context, url,             # <<<<<<<<<<<<<<
  *                                               None, doc_ref._close_file)
  *             c_input = file_context._createParserInput(c_context)
  */
-      __pyx_t_7 = PyTuple_New(5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_INCREF(__pyx_v_doc_ref->_file);
       PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_doc_ref->_file);
@@ -89381,13 +89343,13 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       PyTuple_SET_ITEM(__pyx_t_7, 4, __pyx_t_2);
       __Pyx_GIVEREF(__pyx_t_2);
       __pyx_t_2 = 0;
-      __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FileReaderContext)), __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FileReaderContext)), __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 473; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_v_file_context = ((struct __pyx_obj_4lxml_5etree__FileReaderContext *)__pyx_t_2);
       __pyx_t_2 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":474
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":475
  *             file_context = _FileReaderContext(doc_ref._file, context, url,
  *                                               None, doc_ref._close_file)
  *             c_input = file_context._createParserInput(c_context)             # <<<<<<<<<<<<<<
@@ -89396,7 +89358,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
  */
       __pyx_v_c_input = __pyx_f_4lxml_5etree_18_FileReaderContext__createParserInput(__pyx_v_file_context, __pyx_v_c_context);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":475
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":476
  *                                               None, doc_ref._close_file)
  *             c_input = file_context._createParserInput(c_context)
  *             data = file_context             # <<<<<<<<<<<<<<
@@ -89408,7 +89370,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       break;
       default:
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":477
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":478
  *             data = file_context
  *         else:
  *             data = None             # <<<<<<<<<<<<<<
@@ -89418,7 +89380,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       __Pyx_INCREF(Py_None);
       __pyx_v_data = Py_None;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":478
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":479
  *         else:
  *             data = None
  *             c_input = NULL             # <<<<<<<<<<<<<<
@@ -89429,7 +89391,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       break;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":480
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":481
  *             c_input = NULL
  * 
  *         if data is not None:             # <<<<<<<<<<<<<<
@@ -89440,19 +89402,19 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
     __pyx_t_3 = (__pyx_t_1 != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":481
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":482
  * 
  *         if data is not None:
  *             context._storage.add(data)             # <<<<<<<<<<<<<<
  *         if c_input is not NULL:
  *             return c_input
  */
-      __pyx_t_10 = __pyx_f_4lxml_5etree_10_TempStore_add(__pyx_v_context->_storage, __pyx_v_data); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = __pyx_f_4lxml_5etree_10_TempStore_add(__pyx_v_context->_storage, __pyx_v_data); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L26;
     }
     __pyx_L26:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":482
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":483
  *         if data is not None:
  *             context._storage.add(data)
  *         if c_input is not NULL:             # <<<<<<<<<<<<<<
@@ -89462,7 +89424,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
     __pyx_t_3 = ((__pyx_v_c_input != NULL) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":483
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":484
  *             context._storage.add(data)
  *         if c_input is not NULL:
  *             return c_input             # <<<<<<<<<<<<<<
@@ -89476,7 +89438,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
   }
   __pyx_L21:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":485
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":486
  *             return c_input
  * 
  *     if __DEFAULT_ENTITY_LOADER is NULL:             # <<<<<<<<<<<<<<
@@ -89486,7 +89448,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
   __pyx_t_3 = ((__pyx_v_4lxml_5etree___DEFAULT_ENTITY_LOADER == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":486
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":487
  * 
  *     if __DEFAULT_ENTITY_LOADER is NULL:
  *         return NULL             # <<<<<<<<<<<<<<
@@ -89497,7 +89459,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":488
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":489
  *         return NULL
  * 
  *     with nogil:             # <<<<<<<<<<<<<<
@@ -89511,7 +89473,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       #endif
       /*try:*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":490
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":491
  *     with nogil:
  *         # free the GIL as we might do serious I/O here (e.g. HTTP)
  *         c_input = __DEFAULT_ENTITY_LOADER(c_url, c_pubid, c_context)             # <<<<<<<<<<<<<<
@@ -89521,7 +89483,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
         __pyx_v_c_input = __pyx_v_4lxml_5etree___DEFAULT_ENTITY_LOADER(__pyx_v_c_url, __pyx_v_c_pubid, __pyx_v_c_context);
       }
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":488
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":489
  *         return NULL
  * 
  *     with nogil:             # <<<<<<<<<<<<<<
@@ -89539,7 +89501,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
       }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":491
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":492
  *         # free the GIL as we might do serious I/O here (e.g. HTTP)
  *         c_input = __DEFAULT_ENTITY_LOADER(c_url, c_pubid, c_context)
  *     return c_input             # <<<<<<<<<<<<<<
@@ -89549,7 +89511,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
   __pyx_r = __pyx_v_c_input;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":417
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":418
  * ############################################################
  * 
  * cdef xmlparser.xmlParserInput* _local_resolver(const_char* c_url, const_char* c_pubid,             # <<<<<<<<<<<<<<
@@ -89578,7 +89540,7 @@ static xmlParserInput *__pyx_f_4lxml_5etree__local_resolver(const char *__pyx_v_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":510
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":511
  *     cdef _Document _doc
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -89612,7 +89574,7 @@ static int __pyx_pf_4lxml_5etree_14_ParserContext___cinit__(struct __pyx_obj_4lx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":511
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":512
  * 
  *     def __cinit__(self):
  *         self._c_ctxt = NULL             # <<<<<<<<<<<<<<
@@ -89621,7 +89583,7 @@ static int __pyx_pf_4lxml_5etree_14_ParserContext___cinit__(struct __pyx_obj_4lx
  */
   __pyx_v_self->_c_ctxt = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":512
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":513
  *     def __cinit__(self):
  *         self._c_ctxt = NULL
  *         if not config.ENABLE_THREADING:             # <<<<<<<<<<<<<<
@@ -89631,7 +89593,7 @@ static int __pyx_pf_4lxml_5etree_14_ParserContext___cinit__(struct __pyx_obj_4lx
   __pyx_t_1 = ((!(ENABLE_THREADING != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":513
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":514
  *         self._c_ctxt = NULL
  *         if not config.ENABLE_THREADING:
  *             self._lock = NULL             # <<<<<<<<<<<<<<
@@ -89643,7 +89605,7 @@ static int __pyx_pf_4lxml_5etree_14_ParserContext___cinit__(struct __pyx_obj_4lx
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":515
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":516
  *             self._lock = NULL
  *         else:
  *             self._lock = python.PyThread_allocate_lock()             # <<<<<<<<<<<<<<
@@ -89654,14 +89616,14 @@ static int __pyx_pf_4lxml_5etree_14_ParserContext___cinit__(struct __pyx_obj_4lx
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":516
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":517
  *         else:
  *             self._lock = python.PyThread_allocate_lock()
  *         self._error_log = _ErrorLog()             # <<<<<<<<<<<<<<
  * 
  *     def __dealloc__(self):
  */
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __Pyx_GOTREF(__pyx_v_self->_error_log);
@@ -89669,7 +89631,7 @@ static int __pyx_pf_4lxml_5etree_14_ParserContext___cinit__(struct __pyx_obj_4lx
   __pyx_v_self->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":510
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":511
  *     cdef _Document _doc
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -89689,7 +89651,7 @@ static int __pyx_pf_4lxml_5etree_14_ParserContext___cinit__(struct __pyx_obj_4lx
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":518
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":519
  *         self._error_log = _ErrorLog()
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -89714,7 +89676,7 @@ static void __pyx_pf_4lxml_5etree_14_ParserContext_2__dealloc__(struct __pyx_obj
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":519
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":520
  * 
  *     def __dealloc__(self):
  *         if config.ENABLE_THREADING and self._lock is not NULL:             # <<<<<<<<<<<<<<
@@ -89729,7 +89691,7 @@ static void __pyx_pf_4lxml_5etree_14_ParserContext_2__dealloc__(struct __pyx_obj
   }
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":520
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":521
  *     def __dealloc__(self):
  *         if config.ENABLE_THREADING and self._lock is not NULL:
  *             python.PyThread_free_lock(self._lock)             # <<<<<<<<<<<<<<
@@ -89741,7 +89703,7 @@ static void __pyx_pf_4lxml_5etree_14_ParserContext_2__dealloc__(struct __pyx_obj
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":521
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":522
  *         if config.ENABLE_THREADING and self._lock is not NULL:
  *             python.PyThread_free_lock(self._lock)
  *         if self._c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -89751,7 +89713,7 @@ static void __pyx_pf_4lxml_5etree_14_ParserContext_2__dealloc__(struct __pyx_obj
   __pyx_t_2 = ((__pyx_v_self->_c_ctxt != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":522
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":523
  *             python.PyThread_free_lock(self._lock)
  *         if self._c_ctxt is not NULL:
  *             xmlparser.xmlFreeParserCtxt(self._c_ctxt)             # <<<<<<<<<<<<<<
@@ -89763,7 +89725,7 @@ static void __pyx_pf_4lxml_5etree_14_ParserContext_2__dealloc__(struct __pyx_obj
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":518
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":519
  *         self._error_log = _ErrorLog()
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -89775,7 +89737,7 @@ static void __pyx_pf_4lxml_5etree_14_ParserContext_2__dealloc__(struct __pyx_obj
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":524
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":525
  *             xmlparser.xmlFreeParserCtxt(self._c_ctxt)
  * 
  *     cdef _ParserContext _copy(self):             # <<<<<<<<<<<<<<
@@ -89794,30 +89756,30 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_14_Par
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_copy", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":526
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":527
  *     cdef _ParserContext _copy(self):
  *         cdef _ParserContext context
  *         context = self.__class__()             # <<<<<<<<<<<<<<
  *         context._validator = self._validator.copy()
  *         _initParserContext(context, self._resolvers._copy(), NULL)
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_4lxml_5etree__ParserContext))))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_4lxml_5etree__ParserContext))))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":527
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":528
  *         cdef _ParserContext context
  *         context = self.__class__()
  *         context._validator = self._validator.copy()             # <<<<<<<<<<<<<<
  *         _initParserContext(context, self._resolvers._copy(), NULL)
  *         return context
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_copy(__pyx_v_self->_validator)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_copy(__pyx_v_self->_validator)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __Pyx_GOTREF(__pyx_v_context->_validator);
@@ -89825,21 +89787,21 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_14_Par
   __pyx_v_context->_validator = ((struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":528
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":529
  *         context = self.__class__()
  *         context._validator = self._validator.copy()
  *         _initParserContext(context, self._resolvers._copy(), NULL)             # <<<<<<<<<<<<<<
  *         return context
  * 
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree_17_ResolverRegistry__copy(__pyx_v_self->__pyx_base._resolvers)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree_17_ResolverRegistry__copy(__pyx_v_self->__pyx_base._resolvers)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__initParserContext(__pyx_v_context, ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_4lxml_5etree__initParserContext(__pyx_v_context, ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":529
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":530
  *         context._validator = self._validator.copy()
  *         _initParserContext(context, self._resolvers._copy(), NULL)
  *         return context             # <<<<<<<<<<<<<<
@@ -89851,7 +89813,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_14_Par
   __pyx_r = __pyx_v_context;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":524
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":525
  *             xmlparser.xmlFreeParserCtxt(self._c_ctxt)
  * 
  *     cdef _ParserContext _copy(self):             # <<<<<<<<<<<<<<
@@ -89872,7 +89834,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_14_Par
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":531
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":532
  *         return context
  * 
  *     cdef void _initParserContext(self, xmlparser.xmlParserCtxt* c_ctxt):             # <<<<<<<<<<<<<<
@@ -89884,7 +89846,7 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__initParserContext(struct __py
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_initParserContext", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":532
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":533
  * 
  *     cdef void _initParserContext(self, xmlparser.xmlParserCtxt* c_ctxt):
  *         self._c_ctxt = c_ctxt             # <<<<<<<<<<<<<<
@@ -89893,7 +89855,7 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__initParserContext(struct __py
  */
   __pyx_v_self->_c_ctxt = __pyx_v_c_ctxt;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":533
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":534
  *     cdef void _initParserContext(self, xmlparser.xmlParserCtxt* c_ctxt):
  *         self._c_ctxt = c_ctxt
  *         c_ctxt._private = <void*>self             # <<<<<<<<<<<<<<
@@ -89902,7 +89864,7 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__initParserContext(struct __py
  */
   __pyx_v_c_ctxt->_private = ((void *)__pyx_v_self);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":531
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":532
  *         return context
  * 
  *     cdef void _initParserContext(self, xmlparser.xmlParserCtxt* c_ctxt):             # <<<<<<<<<<<<<<
@@ -89914,7 +89876,7 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__initParserContext(struct __py
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":535
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":536
  *         c_ctxt._private = <void*>self
  * 
  *     cdef void _resetParserContext(self):             # <<<<<<<<<<<<<<
@@ -89929,7 +89891,7 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__resetParserContext(struct __p
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("_resetParserContext", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":536
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":537
  * 
  *     cdef void _resetParserContext(self):
  *         if self._c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -89939,7 +89901,7 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__resetParserContext(struct __p
   __pyx_t_1 = ((__pyx_v_self->_c_ctxt != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":537
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":538
  *     cdef void _resetParserContext(self):
  *         if self._c_ctxt is not NULL:
  *             if self._c_ctxt.html:             # <<<<<<<<<<<<<<
@@ -89949,7 +89911,7 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__resetParserContext(struct __p
     __pyx_t_1 = (__pyx_v_self->_c_ctxt->html != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":538
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":539
  *         if self._c_ctxt is not NULL:
  *             if self._c_ctxt.html:
  *                 htmlparser.htmlCtxtReset(self._c_ctxt)             # <<<<<<<<<<<<<<
@@ -89958,7 +89920,7 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__resetParserContext(struct __p
  */
       htmlCtxtReset(__pyx_v_self->_c_ctxt);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":539
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":540
  *             if self._c_ctxt.html:
  *                 htmlparser.htmlCtxtReset(self._c_ctxt)
  *                 self._c_ctxt.disableSAX = 0 # work around bug in libxml2             # <<<<<<<<<<<<<<
@@ -89969,7 +89931,7 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__resetParserContext(struct __p
       goto __pyx_L4;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":540
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":541
  *                 htmlparser.htmlCtxtReset(self._c_ctxt)
  *                 self._c_ctxt.disableSAX = 0 # work around bug in libxml2
  *             elif self._c_ctxt.spaceTab is not NULL or \             # <<<<<<<<<<<<<<
@@ -89979,7 +89941,7 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__resetParserContext(struct __p
     __pyx_t_1 = ((__pyx_v_self->_c_ctxt->spaceTab != NULL) != 0);
     if (!__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":541
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":542
  *                 self._c_ctxt.disableSAX = 0 # work around bug in libxml2
  *             elif self._c_ctxt.spaceTab is not NULL or \
  *                     _LIBXML_VERSION_INT >= 20629: # work around bug in libxml2             # <<<<<<<<<<<<<<
@@ -89993,7 +89955,7 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__resetParserContext(struct __p
     }
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":542
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":543
  *             elif self._c_ctxt.spaceTab is not NULL or \
  *                     _LIBXML_VERSION_INT >= 20629: # work around bug in libxml2
  *                 xmlparser.xmlClearParserCtxt(self._c_ctxt)             # <<<<<<<<<<<<<<
@@ -90008,7 +89970,7 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__resetParserContext(struct __p
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":535
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":536
  *         c_ctxt._private = <void*>self
  * 
  *     cdef void _resetParserContext(self):             # <<<<<<<<<<<<<<
@@ -90020,7 +89982,7 @@ static void __pyx_f_4lxml_5etree_14_ParserContext__resetParserContext(struct __p
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":544
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":545
  *                 xmlparser.xmlClearParserCtxt(self._c_ctxt)
  * 
  *     cdef int prepare(self) except -1:             # <<<<<<<<<<<<<<
@@ -90041,7 +90003,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("prepare", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":546
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":547
  *     cdef int prepare(self) except -1:
  *         cdef int result
  *         if config.ENABLE_THREADING and self._lock is not NULL:             # <<<<<<<<<<<<<<
@@ -90056,7 +90018,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
   }
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":547
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":548
  *         cdef int result
  *         if config.ENABLE_THREADING and self._lock is not NULL:
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -90070,7 +90032,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
         #endif
         /*try:*/ {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":548
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":549
  *         if config.ENABLE_THREADING and self._lock is not NULL:
  *             with nogil:
  *                 result = python.PyThread_acquire_lock(             # <<<<<<<<<<<<<<
@@ -90080,7 +90042,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
           __pyx_v_result = PyThread_acquire_lock(__pyx_v_self->_lock, WAIT_LOCK);
         }
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":547
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":548
  *         cdef int result
  *         if config.ENABLE_THREADING and self._lock is not NULL:
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -90098,7 +90060,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
         }
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":550
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":551
  *                 result = python.PyThread_acquire_lock(
  *                     self._lock, python.WAIT_LOCK)
  *             if result == 0:             # <<<<<<<<<<<<<<
@@ -90108,35 +90070,35 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
     __pyx_t_2 = ((__pyx_v_result == 0) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":551
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":552
  *                     self._lock, python.WAIT_LOCK)
  *             if result == 0:
  *                 raise ParserError, u"parser locking failed"             # <<<<<<<<<<<<<<
  *         self._error_log.clear()
  *         self._doc = None
  */
-      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_ParserError); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 551; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_ParserError); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, __pyx_kp_u_parser_locking_failed, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 551; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":552
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":553
  *             if result == 0:
  *                 raise ParserError, u"parser locking failed"
  *         self._error_log.clear()             # <<<<<<<<<<<<<<
  *         self._doc = None
  *         self._c_ctxt.sax.serror = _receiveParserError
  */
-  __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_self->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->clear(__pyx_v_self->_error_log, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 552; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_self->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->clear(__pyx_v_self->_error_log, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 553; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":553
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":554
  *                 raise ParserError, u"parser locking failed"
  *         self._error_log.clear()
  *         self._doc = None             # <<<<<<<<<<<<<<
@@ -90149,7 +90111,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_doc));
   __pyx_v_self->_doc = ((struct LxmlDocument *)Py_None);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":554
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":555
  *         self._error_log.clear()
  *         self._doc = None
  *         self._c_ctxt.sax.serror = _receiveParserError             # <<<<<<<<<<<<<<
@@ -90158,7 +90120,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
  */
   __pyx_v_self->_c_ctxt->sax->serror = __pyx_f_4lxml_5etree__receiveParserError;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":555
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":556
  *         self._doc = None
  *         self._c_ctxt.sax.serror = _receiveParserError
  *         if self._validator is not None:             # <<<<<<<<<<<<<<
@@ -90169,7 +90131,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":556
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":557
  *         self._c_ctxt.sax.serror = _receiveParserError
  *         if self._validator is not None:
  *             self._validator.connect(self._c_ctxt, self._error_log)             # <<<<<<<<<<<<<<
@@ -90178,13 +90140,13 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
  */
     __pyx_t_3 = ((PyObject *)__pyx_v_self->_error_log);
     __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_4 = __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_connect(__pyx_v_self->_validator, __pyx_v_self->_c_ctxt, ((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_t_3)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_connect(__pyx_v_self->_validator, __pyx_v_self->_c_ctxt, ((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_t_3)); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L8;
   }
   __pyx_L8:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":557
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":558
  *         if self._validator is not None:
  *             self._validator.connect(self._c_ctxt, self._error_log)
  *         return 0             # <<<<<<<<<<<<<<
@@ -90194,7 +90156,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":544
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":545
  *                 xmlparser.xmlClearParserCtxt(self._c_ctxt)
  * 
  *     cdef int prepare(self) except -1:             # <<<<<<<<<<<<<<
@@ -90212,7 +90174,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_prepare(struct __pyx_obj_4lxml_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":559
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":560
  *         return 0
  * 
  *     cdef int cleanup(self) except -1:             # <<<<<<<<<<<<<<
@@ -90227,7 +90189,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("cleanup", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":560
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":561
  * 
  *     cdef int cleanup(self) except -1:
  *         if self._validator is not None:             # <<<<<<<<<<<<<<
@@ -90238,7 +90200,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":561
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":562
  *     cdef int cleanup(self) except -1:
  *         if self._validator is not None:
  *             self._validator.disconnect()             # <<<<<<<<<<<<<<
@@ -90250,7 +90212,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":562
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":563
  *         if self._validator is not None:
  *             self._validator.disconnect()
  *         self._resetParserContext()             # <<<<<<<<<<<<<<
@@ -90259,7 +90221,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
  */
   ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->_resetParserContext(__pyx_v_self);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":563
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":564
  *             self._validator.disconnect()
  *         self._resetParserContext()
  *         self.clear()             # <<<<<<<<<<<<<<
@@ -90268,7 +90230,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
  */
   ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.clear(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_self));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":564
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":565
  *         self._resetParserContext()
  *         self.clear()
  *         self._doc = None             # <<<<<<<<<<<<<<
@@ -90281,7 +90243,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_doc));
   __pyx_v_self->_doc = ((struct LxmlDocument *)Py_None);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":565
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":566
  *         self.clear()
  *         self._doc = None
  *         self._c_ctxt.sax.serror = NULL             # <<<<<<<<<<<<<<
@@ -90290,7 +90252,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
  */
   __pyx_v_self->_c_ctxt->sax->serror = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":566
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":567
  *         self._doc = None
  *         self._c_ctxt.sax.serror = NULL
  *         if config.ENABLE_THREADING and self._lock is not NULL:             # <<<<<<<<<<<<<<
@@ -90305,7 +90267,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
   }
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":567
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":568
  *         self._c_ctxt.sax.serror = NULL
  *         if config.ENABLE_THREADING and self._lock is not NULL:
  *             python.PyThread_release_lock(self._lock)             # <<<<<<<<<<<<<<
@@ -90317,7 +90279,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":568
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":569
  *         if config.ENABLE_THREADING and self._lock is not NULL:
  *             python.PyThread_release_lock(self._lock)
  *         return 0             # <<<<<<<<<<<<<<
@@ -90327,7 +90289,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":559
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":560
  *         return 0
  * 
  *     cdef int cleanup(self) except -1:             # <<<<<<<<<<<<<<
@@ -90341,7 +90303,7 @@ static int __pyx_f_4lxml_5etree_14_ParserContext_cleanup(struct __pyx_obj_4lxml_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":570
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":571
  *         return 0
  * 
  *     cdef object _handleParseResult(self, _BaseParser parser,             # <<<<<<<<<<<<<<
@@ -90363,17 +90325,17 @@ static PyObject *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResult(struct
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_handleParseResult", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":572
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":573
  *     cdef object _handleParseResult(self, _BaseParser parser,
  *                                    xmlDoc* result, filename):
  *         c_doc = self._handleParseResultDoc(parser, result, filename)             # <<<<<<<<<<<<<<
  *         if self._doc is not None and self._doc._c_doc is c_doc:
  *             return self._doc
  */
-  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_self, __pyx_v_parser, __pyx_v_result, __pyx_v_filename); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_self, __pyx_v_parser, __pyx_v_result, __pyx_v_filename); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_c_doc = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":573
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":574
  *                                    xmlDoc* result, filename):
  *         c_doc = self._handleParseResultDoc(parser, result, filename)
  *         if self._doc is not None and self._doc._c_doc is c_doc:             # <<<<<<<<<<<<<<
@@ -90389,7 +90351,7 @@ static PyObject *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResult(struct
   }
   if (__pyx_t_4) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":574
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":575
  *         c_doc = self._handleParseResultDoc(parser, result, filename)
  *         if self._doc is not None and self._doc._c_doc is c_doc:
  *             return self._doc             # <<<<<<<<<<<<<<
@@ -90403,7 +90365,7 @@ static PyObject *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResult(struct
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":576
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":577
  *             return self._doc
  *         else:
  *             return _documentFactory(c_doc, parser)             # <<<<<<<<<<<<<<
@@ -90411,14 +90373,14 @@ static PyObject *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResult(struct
  *     cdef xmlDoc* _handleParseResultDoc(self, _BaseParser parser,
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_r = __pyx_t_5;
     __pyx_t_5 = 0;
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":570
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":571
  *         return 0
  * 
  *     cdef object _handleParseResult(self, _BaseParser parser,             # <<<<<<<<<<<<<<
@@ -90437,7 +90399,7 @@ static PyObject *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResult(struct
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":578
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":579
  *             return _documentFactory(c_doc, parser)
  * 
  *     cdef xmlDoc* _handleParseResultDoc(self, _BaseParser parser,             # <<<<<<<<<<<<<<
@@ -90456,7 +90418,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResultDoc(struc
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_handleParseResultDoc", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":580
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":581
  *     cdef xmlDoc* _handleParseResultDoc(self, _BaseParser parser,
  *                                        xmlDoc* result, filename) except NULL:
  *         recover = parser._parse_options & xmlparser.XML_PARSE_RECOVER             # <<<<<<<<<<<<<<
@@ -90465,7 +90427,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResultDoc(struc
  */
   __pyx_v_recover = (__pyx_v_parser->_parse_options & XML_PARSE_RECOVER);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":583
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":584
  *         return _handleParseResult(self, self._c_ctxt, result,
  *                                   filename, recover,
  *                                   free_doc=self._doc is None)             # <<<<<<<<<<<<<<
@@ -90474,18 +90436,18 @@ static xmlDoc *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResultDoc(struc
  */
   __pyx_t_1 = (((PyObject *)__pyx_v_self->_doc) == Py_None);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":581
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":582
  *                                        xmlDoc* result, filename) except NULL:
  *         recover = parser._parse_options & xmlparser.XML_PARSE_RECOVER
  *         return _handleParseResult(self, self._c_ctxt, result,             # <<<<<<<<<<<<<<
  *                                   filename, recover,
  *                                   free_doc=self._doc is None)
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__handleParseResult(__pyx_v_self, __pyx_v_self->_c_ctxt, __pyx_v_result, __pyx_v_filename, __pyx_v_recover, __pyx_t_1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_4lxml_5etree__handleParseResult(__pyx_v_self, __pyx_v_self->_c_ctxt, __pyx_v_result, __pyx_v_filename, __pyx_v_recover, __pyx_t_1); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 582; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_t_2;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":578
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":579
  *             return _documentFactory(c_doc, parser)
  * 
  *     cdef xmlDoc* _handleParseResultDoc(self, _BaseParser parser,             # <<<<<<<<<<<<<<
@@ -90502,7 +90464,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_14_ParserContext__handleParseResultDoc(struc
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":585
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":586
  *                                   free_doc=self._doc is None)
  * 
  * cdef _initParserContext(_ParserContext context,             # <<<<<<<<<<<<<<
@@ -90520,18 +90482,18 @@ static PyObject *__pyx_f_4lxml_5etree__initParserContext(struct __pyx_obj_4lxml_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_initParserContext", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":588
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":589
  *                         _ResolverRegistry resolvers,
  *                         xmlparser.xmlParserCtxt* c_ctxt):
  *     _initResolverContext(context, resolvers)             # <<<<<<<<<<<<<<
  *     if c_ctxt is not NULL:
  *         context._initParserContext(c_ctxt)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__initResolverContext(((struct __pyx_obj_4lxml_5etree__ResolverContext *)__pyx_v_context), __pyx_v_resolvers); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_4lxml_5etree__initResolverContext(((struct __pyx_obj_4lxml_5etree__ResolverContext *)__pyx_v_context), __pyx_v_resolvers); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":589
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":590
  *                         xmlparser.xmlParserCtxt* c_ctxt):
  *     _initResolverContext(context, resolvers)
  *     if c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -90541,7 +90503,7 @@ static PyObject *__pyx_f_4lxml_5etree__initParserContext(struct __pyx_obj_4lxml_
   __pyx_t_2 = ((__pyx_v_c_ctxt != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":590
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":591
  *     _initResolverContext(context, resolvers)
  *     if c_ctxt is not NULL:
  *         context._initParserContext(c_ctxt)             # <<<<<<<<<<<<<<
@@ -90553,7 +90515,7 @@ static PyObject *__pyx_f_4lxml_5etree__initParserContext(struct __pyx_obj_4lxml_
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":585
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":586
  *                                   free_doc=self._doc is None)
  * 
  * cdef _initParserContext(_ParserContext context,             # <<<<<<<<<<<<<<
@@ -90574,7 +90536,7 @@ static PyObject *__pyx_f_4lxml_5etree__initParserContext(struct __pyx_obj_4lxml_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":592
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":593
  *         context._initParserContext(c_ctxt)
  * 
  * cdef void _forwardParserError(xmlparser.xmlParserCtxt* _parser_context, xmlerror.xmlError* error) with gil:             # <<<<<<<<<<<<<<
@@ -90589,7 +90551,7 @@ static void __pyx_f_4lxml_5etree__forwardParserError(xmlParserCtxt *__pyx_v__par
   #endif
   __Pyx_RefNannySetupContext("_forwardParserError", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":593
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":594
  * 
  * cdef void _forwardParserError(xmlparser.xmlParserCtxt* _parser_context, xmlerror.xmlError* error) with gil:
  *     (<_ParserContext>_parser_context._private)._error_log._receive(error)             # <<<<<<<<<<<<<<
@@ -90598,7 +90560,7 @@ static void __pyx_f_4lxml_5etree__forwardParserError(xmlParserCtxt *__pyx_v__par
  */
   __pyx_f_4lxml_5etree_13_BaseErrorLog__receive(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_v__parser_context->_private)->_error_log), __pyx_v_error);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":592
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":593
  *         context._initParserContext(c_ctxt)
  * 
  * cdef void _forwardParserError(xmlparser.xmlParserCtxt* _parser_context, xmlerror.xmlError* error) with gil:             # <<<<<<<<<<<<<<
@@ -90613,7 +90575,7 @@ static void __pyx_f_4lxml_5etree__forwardParserError(xmlParserCtxt *__pyx_v__par
   #endif
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":595
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":596
  *     (<_ParserContext>_parser_context._private)._error_log._receive(error)
  * 
  * cdef void _receiveParserError(void* c_context, xmlerror.xmlError* error) nogil:             # <<<<<<<<<<<<<<
@@ -90626,7 +90588,7 @@ static void __pyx_f_4lxml_5etree__receiveParserError(void *__pyx_v_c_context, xm
   int __pyx_t_2;
   int __pyx_t_3;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":597
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":598
  * cdef void _receiveParserError(void* c_context, xmlerror.xmlError* error) nogil:
  *     if __DEBUG:
  *         if c_context is NULL or (<xmlparser.xmlParserCtxt*>c_context)._private is NULL:             # <<<<<<<<<<<<<<
@@ -90642,7 +90604,7 @@ static void __pyx_f_4lxml_5etree__receiveParserError(void *__pyx_v_c_context, xm
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":598
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":599
  *     if __DEBUG:
  *         if c_context is NULL or (<xmlparser.xmlParserCtxt*>c_context)._private is NULL:
  *             _forwardError(NULL, error)             # <<<<<<<<<<<<<<
@@ -90654,7 +90616,7 @@ static void __pyx_f_4lxml_5etree__receiveParserError(void *__pyx_v_c_context, xm
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":600
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":601
  *             _forwardError(NULL, error)
  *         else:
  *             _forwardParserError(<xmlparser.xmlParserCtxt*>c_context, error)             # <<<<<<<<<<<<<<
@@ -90665,7 +90627,7 @@ static void __pyx_f_4lxml_5etree__receiveParserError(void *__pyx_v_c_context, xm
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":595
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":596
  *     (<_ParserContext>_parser_context._private)._error_log._receive(error)
  * 
  * cdef void _receiveParserError(void* c_context, xmlerror.xmlError* error) nogil:             # <<<<<<<<<<<<<<
@@ -90676,7 +90638,7 @@ static void __pyx_f_4lxml_5etree__receiveParserError(void *__pyx_v_c_context, xm
   /* function exit code */
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":602
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":603
  *             _forwardParserError(<xmlparser.xmlParserCtxt*>c_context, error)
  * 
  * cdef int _raiseParseError(xmlparser.xmlParserCtxt* ctxt, filename,             # <<<<<<<<<<<<<<
@@ -90712,7 +90674,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
   __Pyx_RefNannySetupContext("_raiseParseError", 0);
   __Pyx_INCREF(__pyx_v_filename);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":604
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":605
  * cdef int _raiseParseError(xmlparser.xmlParserCtxt* ctxt, filename,
  *                           _ErrorLog error_log) except 0:
  *     if filename is not None and \             # <<<<<<<<<<<<<<
@@ -90722,7 +90684,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
   __pyx_t_1 = (__pyx_v_filename != Py_None);
   if ((__pyx_t_1 != 0)) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":605
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":606
  *                           _ErrorLog error_log) except 0:
  *     if filename is not None and \
  *            ctxt.lastError.domain == xmlerror.XML_FROM_IO:             # <<<<<<<<<<<<<<
@@ -90736,7 +90698,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":606
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":607
  *     if filename is not None and \
  *            ctxt.lastError.domain == xmlerror.XML_FROM_IO:
  *         if isinstance(filename, bytes):             # <<<<<<<<<<<<<<
@@ -90747,28 +90709,28 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     __pyx_t_1 = (__pyx_t_3 != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":608
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":609
  *         if isinstance(filename, bytes):
  *             filename = _decodeFilenameWithLength(
  *                 <bytes>filename, len(<bytes>filename))             # <<<<<<<<<<<<<<
  *         if ctxt.lastError.message is not NULL:
  *             try:
  */
-      __pyx_t_4 = __Pyx_PyObject_AsUString(__pyx_v_filename); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_AsUString(__pyx_v_filename); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       if (unlikely(__pyx_v_filename == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __pyx_t_5 = PyBytes_GET_SIZE(((PyObject*)__pyx_v_filename)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyBytes_GET_SIZE(((PyObject*)__pyx_v_filename)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":607
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":608
  *            ctxt.lastError.domain == xmlerror.XML_FROM_IO:
  *         if isinstance(filename, bytes):
  *             filename = _decodeFilenameWithLength(             # <<<<<<<<<<<<<<
  *                 <bytes>filename, len(<bytes>filename))
  *         if ctxt.lastError.message is not NULL:
  */
-      __pyx_t_6 = __pyx_f_4lxml_5etree__decodeFilenameWithLength(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __pyx_f_4lxml_5etree__decodeFilenameWithLength(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_6);
       __pyx_t_6 = 0;
@@ -90776,7 +90738,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":609
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":610
  *             filename = _decodeFilenameWithLength(
  *                 <bytes>filename, len(<bytes>filename))
  *         if ctxt.lastError.message is not NULL:             # <<<<<<<<<<<<<<
@@ -90786,7 +90748,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     __pyx_t_1 = ((__pyx_v_ctxt->lastError.message != NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":610
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":611
  *                 <bytes>filename, len(<bytes>filename))
  *         if ctxt.lastError.message is not NULL:
  *             try:             # <<<<<<<<<<<<<<
@@ -90800,7 +90762,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
         __Pyx_XGOTREF(__pyx_t_9);
         /*try:*/ {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":611
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":612
  *         if ctxt.lastError.message is not NULL:
  *             try:
  *                 message = (ctxt.lastError.message).decode('utf-8')             # <<<<<<<<<<<<<<
@@ -90808,7 +90770,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  *                 # the filename may be in there => play safe
  */
           __pyx_t_10 = __pyx_v_ctxt->lastError.message;
-          __pyx_t_6 = __Pyx_decode_c_string(__pyx_t_10, 0, strlen(__pyx_t_10), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 611; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+          __pyx_t_6 = __Pyx_decode_c_string(__pyx_t_10, 0, strlen(__pyx_t_10), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_INCREF(__pyx_t_6);
           __pyx_v_message = __pyx_t_6;
@@ -90821,7 +90783,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
         __pyx_L6_error:;
         __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":612
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":613
  *             try:
  *                 message = (ctxt.lastError.message).decode('utf-8')
  *             except UnicodeDecodeError:             # <<<<<<<<<<<<<<
@@ -90831,12 +90793,12 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
         __pyx_t_11 = PyErr_ExceptionMatches(__pyx_builtin_UnicodeDecodeError);
         if (__pyx_t_11) {
           __Pyx_AddTraceback("lxml.etree._raiseParseError", __pyx_clineno, __pyx_lineno, __pyx_filename);
-          if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_12, &__pyx_t_13) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 612; __pyx_clineno = __LINE__; goto __pyx_L8_except_error;}
+          if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_12, &__pyx_t_13) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 613; __pyx_clineno = __LINE__; goto __pyx_L8_except_error;}
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_GOTREF(__pyx_t_12);
           __Pyx_GOTREF(__pyx_t_13);
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":614
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":615
  *             except UnicodeDecodeError:
  *                 # the filename may be in there => play safe
  *                 message = (ctxt.lastError.message).decode('iso8859-1')             # <<<<<<<<<<<<<<
@@ -90844,7 +90806,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  *                 filename, message.strip())
  */
           __pyx_t_10 = __pyx_v_ctxt->lastError.message;
-          __pyx_t_14 = __Pyx_decode_c_string(__pyx_t_10, 0, strlen(__pyx_t_10), NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 614; __pyx_clineno = __LINE__; goto __pyx_L8_except_error;}
+          __pyx_t_14 = __Pyx_decode_c_string(__pyx_t_10, 0, strlen(__pyx_t_10), NULL, NULL, PyUnicode_DecodeLatin1); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L8_except_error;}
           __Pyx_GOTREF(__pyx_t_14);
           __Pyx_INCREF(__pyx_t_14);
           __Pyx_XDECREF_SET(__pyx_v_message, __pyx_t_14);
@@ -90869,19 +90831,19 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
         __pyx_L13_try_end:;
       }
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":616
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":617
  *                 message = (ctxt.lastError.message).decode('iso8859-1')
  *             message = u"Error reading file '%s': %s" % (
  *                 filename, message.strip())             # <<<<<<<<<<<<<<
  *         else:
  *             message = u"Error reading '%s'" % filename
  */
-      __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_message, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_message, __pyx_n_s_strip); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_13);
-      __pyx_t_12 = PyObject_Call(__pyx_t_13, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-      __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_13);
       __Pyx_INCREF(__pyx_v_filename);
       PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_filename);
@@ -90890,14 +90852,14 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
       __Pyx_GIVEREF(__pyx_t_12);
       __pyx_t_12 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":615
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":616
  *                 # the filename may be in there => play safe
  *                 message = (ctxt.lastError.message).decode('iso8859-1')
  *             message = u"Error reading file '%s': %s" % (             # <<<<<<<<<<<<<<
  *                 filename, message.strip())
  *         else:
  */
-      __pyx_t_12 = PyUnicode_Format(__pyx_kp_u_Error_reading_file_s_s, __pyx_t_13); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_12 = PyUnicode_Format(__pyx_kp_u_Error_reading_file_s_s, __pyx_t_13); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 616; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_12);
       __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
       __Pyx_DECREF_SET(__pyx_v_message, __pyx_t_12);
@@ -90906,21 +90868,21 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":618
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":619
  *                 filename, message.strip())
  *         else:
  *             message = u"Error reading '%s'" % filename             # <<<<<<<<<<<<<<
  *         raise IOError, message
  *     elif error_log:
  */
-      __pyx_t_12 = PyUnicode_Format(__pyx_kp_u_Error_reading_s, __pyx_v_filename); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 618; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_12 = PyUnicode_Format(__pyx_kp_u_Error_reading_s, __pyx_v_filename); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_12);
       __pyx_v_message = __pyx_t_12;
       __pyx_t_12 = 0;
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":619
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":620
  *         else:
  *             message = u"Error reading '%s'" % filename
  *         raise IOError, message             # <<<<<<<<<<<<<<
@@ -90928,45 +90890,45 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
  *         raise error_log._buildParseException(
  */
     __Pyx_Raise(__pyx_builtin_IOError, __pyx_v_message, 0, 0);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":620
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":621
  *             message = u"Error reading '%s'" % filename
  *         raise IOError, message
  *     elif error_log:             # <<<<<<<<<<<<<<
  *         raise error_log._buildParseException(
  *             XMLSyntaxError, u"Document is not well formed")
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_error_log)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_error_log)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":622
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":623
  *     elif error_log:
  *         raise error_log._buildParseException(
  *             XMLSyntaxError, u"Document is not well formed")             # <<<<<<<<<<<<<<
  *     elif ctxt.lastError.message is not NULL:
  *         message = (ctxt.lastError.message).strip()
  */
-    __pyx_t_12 = __Pyx_GetModuleGlobalName(__pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_12 = __Pyx_GetModuleGlobalName(__pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_12);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":621
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":622
  *         raise IOError, message
  *     elif error_log:
  *         raise error_log._buildParseException(             # <<<<<<<<<<<<<<
  *             XMLSyntaxError, u"Document is not well formed")
  *     elif ctxt.lastError.message is not NULL:
  */
-    __pyx_t_13 = __pyx_f_4lxml_5etree_13_BaseErrorLog__buildParseException(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_error_log), __pyx_t_12, __pyx_kp_u_Document_is_not_well_formed); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_13 = __pyx_f_4lxml_5etree_13_BaseErrorLog__buildParseException(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_error_log), __pyx_t_12, __pyx_kp_u_Document_is_not_well_formed); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_13);
     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
     __Pyx_Raise(__pyx_t_13, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":623
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":624
  *         raise error_log._buildParseException(
  *             XMLSyntaxError, u"Document is not well formed")
  *     elif ctxt.lastError.message is not NULL:             # <<<<<<<<<<<<<<
@@ -90976,25 +90938,25 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
   __pyx_t_1 = ((__pyx_v_ctxt->lastError.message != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":624
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":625
  *             XMLSyntaxError, u"Document is not well formed")
  *     elif ctxt.lastError.message is not NULL:
  *         message = (ctxt.lastError.message).strip()             # <<<<<<<<<<<<<<
  *         code = ctxt.lastError.code
  *         line = ctxt.lastError.line
  */
-    __pyx_t_13 = __Pyx_PyBytes_FromString(__pyx_v_ctxt->lastError.message); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_13 = __Pyx_PyBytes_FromString(__pyx_v_ctxt->lastError.message); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_13);
-    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_strip); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_strip); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_12);
     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-    __pyx_t_13 = PyObject_Call(__pyx_t_12, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 624; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_13);
     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
     __pyx_v_message = __pyx_t_13;
     __pyx_t_13 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":625
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":626
  *     elif ctxt.lastError.message is not NULL:
  *         message = (ctxt.lastError.message).strip()
  *         code = ctxt.lastError.code             # <<<<<<<<<<<<<<
@@ -91004,7 +90966,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     __pyx_t_11 = __pyx_v_ctxt->lastError.code;
     __pyx_v_code = __pyx_t_11;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":626
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":627
  *         message = (ctxt.lastError.message).strip()
  *         code = ctxt.lastError.code
  *         line = ctxt.lastError.line             # <<<<<<<<<<<<<<
@@ -91014,7 +90976,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     __pyx_t_11 = __pyx_v_ctxt->lastError.line;
     __pyx_v_line = __pyx_t_11;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":627
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":628
  *         code = ctxt.lastError.code
  *         line = ctxt.lastError.line
  *         column = ctxt.lastError.int2             # <<<<<<<<<<<<<<
@@ -91024,7 +90986,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     __pyx_t_11 = __pyx_v_ctxt->lastError.int2;
     __pyx_v_column = __pyx_t_11;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":628
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":629
  *         line = ctxt.lastError.line
  *         column = ctxt.lastError.int2
  *         if ctxt.lastError.line > 0:             # <<<<<<<<<<<<<<
@@ -91034,16 +90996,16 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     __pyx_t_1 = ((__pyx_v_ctxt->lastError.line > 0) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":629
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":630
  *         column = ctxt.lastError.int2
  *         if ctxt.lastError.line > 0:
  *             message = u"line %d: %s" % (line, message)             # <<<<<<<<<<<<<<
  *         raise XMLSyntaxError(message, code, line, column)
  *     else:
  */
-      __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_13 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_13);
-      __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_12);
       PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_13);
       __Pyx_GIVEREF(__pyx_t_13);
@@ -91051,7 +91013,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
       PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_v_message);
       __Pyx_GIVEREF(__pyx_v_message);
       __pyx_t_13 = 0;
-      __pyx_t_13 = PyUnicode_Format(__pyx_kp_u_line_d_s, __pyx_t_12); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_13 = PyUnicode_Format(__pyx_kp_u_line_d_s, __pyx_t_12); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_13);
       __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
       __Pyx_DECREF_SET(__pyx_v_message, __pyx_t_13);
@@ -91060,22 +91022,22 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     }
     __pyx_L16:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":630
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":631
  *         if ctxt.lastError.line > 0:
  *             message = u"line %d: %s" % (line, message)
  *         raise XMLSyntaxError(message, code, line, column)             # <<<<<<<<<<<<<<
  *     else:
  *         raise XMLSyntaxError(None, xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0)
  */
-    __pyx_t_13 = __Pyx_GetModuleGlobalName(__pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_13 = __Pyx_GetModuleGlobalName(__pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_13);
-    __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_code); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_12 = __Pyx_PyInt_From_int(__pyx_v_code); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_12);
-    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_column); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_14 = __Pyx_PyInt_From_int(__pyx_v_column); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_14);
-    __pyx_t_15 = PyTuple_New(4); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_15 = PyTuple_New(4); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_15);
     __Pyx_INCREF(__pyx_v_message);
     PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_v_message);
@@ -91089,28 +91051,28 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     __pyx_t_12 = 0;
     __pyx_t_6 = 0;
     __pyx_t_14 = 0;
-    __pyx_t_14 = PyObject_Call(__pyx_t_13, __pyx_t_15, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_15, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_14);
     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
     __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
     __Pyx_Raise(__pyx_t_14, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 630; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":632
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":633
  *         raise XMLSyntaxError(message, code, line, column)
  *     else:
  *         raise XMLSyntaxError(None, xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0)             # <<<<<<<<<<<<<<
  * 
  * cdef xmlDoc* _handleParseResult(_ParserContext context,
  */
-    __pyx_t_14 = __Pyx_GetModuleGlobalName(__pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_14 = __Pyx_GetModuleGlobalName(__pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_14);
-    __pyx_t_15 = PyInt_FromLong(XML_ERR_INTERNAL_ERROR); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_15 = PyInt_FromLong(XML_ERR_INTERNAL_ERROR); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_15);
-    __pyx_t_13 = PyTuple_New(4); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_13 = PyTuple_New(4); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_13);
     __Pyx_INCREF(Py_None);
     PyTuple_SET_ITEM(__pyx_t_13, 0, Py_None);
@@ -91124,16 +91086,16 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
     PyTuple_SET_ITEM(__pyx_t_13, 3, __pyx_int_0);
     __Pyx_GIVEREF(__pyx_int_0);
     __pyx_t_15 = 0;
-    __pyx_t_15 = PyObject_Call(__pyx_t_14, __pyx_t_13, NULL); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_13, NULL); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_15);
     __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
     __Pyx_Raise(__pyx_t_15, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":602
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":603
  *             _forwardParserError(<xmlparser.xmlParserCtxt*>c_context, error)
  * 
  * cdef int _raiseParseError(xmlparser.xmlParserCtxt* ctxt, filename,             # <<<<<<<<<<<<<<
@@ -91156,7 +91118,7 @@ static int __pyx_f_4lxml_5etree__raiseParseError(xmlParserCtxt *__pyx_v_ctxt, Py
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":634
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":635
  *         raise XMLSyntaxError(None, xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0)
  * 
  * cdef xmlDoc* _handleParseResult(_ParserContext context,             # <<<<<<<<<<<<<<
@@ -91185,7 +91147,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_handleParseResult", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":639
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":640
  *                                 bint recover, bint free_doc) except NULL:
  *     cdef bint well_formed
  *     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -91195,7 +91157,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   __pyx_t_1 = ((__pyx_v_result != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":640
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":641
  *     cdef bint well_formed
  *     if result is not NULL:
  *         __GLOBAL_PARSER_CONTEXT.initDocDict(result)             # <<<<<<<<<<<<<<
@@ -91207,7 +91169,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":642
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":643
  *         __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  * 
  *     if c_ctxt.myDoc is not NULL:             # <<<<<<<<<<<<<<
@@ -91217,7 +91179,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   __pyx_t_1 = ((__pyx_v_c_ctxt->myDoc != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":643
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":644
  * 
  *     if c_ctxt.myDoc is not NULL:
  *         if c_ctxt.myDoc is not result:             # <<<<<<<<<<<<<<
@@ -91227,7 +91189,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_1 = ((__pyx_v_c_ctxt->myDoc != __pyx_v_result) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":644
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":645
  *     if c_ctxt.myDoc is not NULL:
  *         if c_ctxt.myDoc is not result:
  *             __GLOBAL_PARSER_CONTEXT.initDocDict(c_ctxt.myDoc)             # <<<<<<<<<<<<<<
@@ -91236,7 +91198,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_c_ctxt->myDoc);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":645
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":646
  *         if c_ctxt.myDoc is not result:
  *             __GLOBAL_PARSER_CONTEXT.initDocDict(c_ctxt.myDoc)
  *             tree.xmlFreeDoc(c_ctxt.myDoc)             # <<<<<<<<<<<<<<
@@ -91248,7 +91210,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":646
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":647
  *             __GLOBAL_PARSER_CONTEXT.initDocDict(c_ctxt.myDoc)
  *             tree.xmlFreeDoc(c_ctxt.myDoc)
  *         c_ctxt.myDoc = NULL             # <<<<<<<<<<<<<<
@@ -91260,7 +91222,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":648
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":649
  *         c_ctxt.myDoc = NULL
  * 
  *     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -91270,7 +91232,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   __pyx_t_1 = ((__pyx_v_result != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":649
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":650
  * 
  *     if result is not NULL:
  *         if context._validator is not None and \             # <<<<<<<<<<<<<<
@@ -91280,7 +91242,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_1 = (((PyObject *)__pyx_v_context->_validator) != Py_None);
     if ((__pyx_t_1 != 0)) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":650
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":651
  *     if result is not NULL:
  *         if context._validator is not None and \
  *                 not context._validator.isvalid():             # <<<<<<<<<<<<<<
@@ -91294,7 +91256,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     }
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":651
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":652
  *         if context._validator is not None and \
  *                 not context._validator.isvalid():
  *             well_formed = 0 # actually not 'valid', but anyway ...             # <<<<<<<<<<<<<<
@@ -91305,7 +91267,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       goto __pyx_L7;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":652
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":653
  *                 not context._validator.isvalid():
  *             well_formed = 0 # actually not 'valid', but anyway ...
  *         elif recover or (c_ctxt.wellFormed and             # <<<<<<<<<<<<<<
@@ -91315,7 +91277,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     if (!(__pyx_v_recover != 0)) {
       if ((__pyx_v_c_ctxt->wellFormed != 0)) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":653
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":654
  *             well_formed = 0 # actually not 'valid', but anyway ...
  *         elif recover or (c_ctxt.wellFormed and
  *                          c_ctxt.lastError.level < xmlerror.XML_ERR_ERROR):             # <<<<<<<<<<<<<<
@@ -91333,7 +91295,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     }
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":654
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":655
  *         elif recover or (c_ctxt.wellFormed and
  *                          c_ctxt.lastError.level < xmlerror.XML_ERR_ERROR):
  *             well_formed = 1             # <<<<<<<<<<<<<<
@@ -91344,7 +91306,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       goto __pyx_L7;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":655
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":656
  *                          c_ctxt.lastError.level < xmlerror.XML_ERR_ERROR):
  *             well_formed = 1
  *         elif not c_ctxt.replaceEntities and not c_ctxt.validate \             # <<<<<<<<<<<<<<
@@ -91354,7 +91316,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_3 = ((!(__pyx_v_c_ctxt->replaceEntities != 0)) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":656
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":657
  *             well_formed = 1
  *         elif not c_ctxt.replaceEntities and not c_ctxt.validate \
  *                  and context is not None:             # <<<<<<<<<<<<<<
@@ -91374,23 +91336,23 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     }
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":658
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":659
  *                  and context is not None:
  *             # in this mode, we ignore errors about undefined entities
  *             for error in context._error_log.filter_from_errors():             # <<<<<<<<<<<<<<
  *                 if error.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \
  *                        error.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context->_error_log), __pyx_n_s_filter_from_errors); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context->_error_log), __pyx_n_s_filter_from_errors); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       if (PyList_CheckExact(__pyx_t_6) || PyTuple_CheckExact(__pyx_t_6)) {
         __pyx_t_5 = __pyx_t_6; __Pyx_INCREF(__pyx_t_5); __pyx_t_7 = 0;
         __pyx_t_8 = NULL;
       } else {
-        __pyx_t_7 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __pyx_t_8 = Py_TYPE(__pyx_t_5)->tp_iternext;
       }
@@ -91399,16 +91361,16 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
         if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_5)) {
           if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_5)) break;
           #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_6 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_6); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_6 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_6); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #else
-          __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #endif
         } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_5)) {
           if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
           #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_6); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_7); __Pyx_INCREF(__pyx_t_6); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #else
-          __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_6 = PySequence_ITEM(__pyx_t_5, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #endif
         } else {
           __pyx_t_6 = __pyx_t_8(__pyx_t_5);
@@ -91416,7 +91378,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
               if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-              else {__pyx_filename = __pyx_f[6]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              else {__pyx_filename = __pyx_f[6]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             break;
           }
@@ -91425,45 +91387,45 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
         __Pyx_XDECREF_SET(__pyx_v_error, __pyx_t_6);
         __pyx_t_6 = 0;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":659
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":660
  *             # in this mode, we ignore errors about undefined entities
  *             for error in context._error_log.filter_from_errors():
  *                 if error.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \             # <<<<<<<<<<<<<<
  *                        error.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  *                     well_formed = 0
  */
-        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_type); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_type); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = __Pyx_GetModuleGlobalName(__pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_9);
-        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_WAR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_WAR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-        __pyx_t_9 = PyObject_RichCompare(__pyx_t_6, __pyx_t_10, Py_NE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = PyObject_RichCompare(__pyx_t_6, __pyx_t_10, Py_NE); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-        __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 659; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         if (__pyx_t_1) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":660
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":661
  *             for error in context._error_log.filter_from_errors():
  *                 if error.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \
  *                        error.type != ErrorTypes.ERR_UNDECLARED_ENTITY:             # <<<<<<<<<<<<<<
  *                     well_formed = 0
  *                     break
  */
-          __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_type); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_error, __pyx_n_s_type); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_9);
-          __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_10 = __Pyx_GetModuleGlobalName(__pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_10);
-          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_ERR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_ERR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-          __pyx_t_10 = PyObject_RichCompare(__pyx_t_9, __pyx_t_6, Py_NE); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_10 = PyObject_RichCompare(__pyx_t_9, __pyx_t_6, Py_NE); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-          __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
           __pyx_t_4 = __pyx_t_3;
         } else {
@@ -91471,7 +91433,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
         }
         if (__pyx_t_4) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":661
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":662
  *                 if error.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \
  *                        error.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  *                     well_formed = 0             # <<<<<<<<<<<<<<
@@ -91480,7 +91442,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
           __pyx_v_well_formed = 0;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":662
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":663
  *                        error.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  *                     well_formed = 0
  *                     break             # <<<<<<<<<<<<<<
@@ -91492,7 +91454,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       }
       /*else*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":664
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":665
  *                     break
  *             else:
  *                 well_formed = 1             # <<<<<<<<<<<<<<
@@ -91507,7 +91469,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":666
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":667
  *                 well_formed = 1
  *         else:
  *             well_formed = 0             # <<<<<<<<<<<<<<
@@ -91518,7 +91480,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     }
     __pyx_L7:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":668
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":669
  *             well_formed = 0
  * 
  *         if not well_formed:             # <<<<<<<<<<<<<<
@@ -91528,7 +91490,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_4 = ((!(__pyx_v_well_formed != 0)) != 0);
     if (__pyx_t_4) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":669
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":670
  * 
  *         if not well_formed:
  *             if free_doc:             # <<<<<<<<<<<<<<
@@ -91538,7 +91500,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       __pyx_t_4 = (__pyx_v_free_doc != 0);
       if (__pyx_t_4) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":670
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":671
  *         if not well_formed:
  *             if free_doc:
  *                 tree.xmlFreeDoc(result)             # <<<<<<<<<<<<<<
@@ -91550,7 +91512,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       }
       __pyx_L13:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":671
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":672
  *             if free_doc:
  *                 tree.xmlFreeDoc(result)
  *             result = NULL             # <<<<<<<<<<<<<<
@@ -91565,7 +91527,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   }
   __pyx_L6:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":673
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":674
  *             result = NULL
  * 
  *     if context is not None and context._has_raised():             # <<<<<<<<<<<<<<
@@ -91581,7 +91543,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":674
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":675
  * 
  *     if context is not None and context._has_raised():
  *         if result is not NULL:             # <<<<<<<<<<<<<<
@@ -91591,7 +91553,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_3 = ((__pyx_v_result != NULL) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":675
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":676
  *     if context is not None and context._has_raised():
  *         if result is not NULL:
  *             if free_doc:             # <<<<<<<<<<<<<<
@@ -91601,7 +91563,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       __pyx_t_3 = (__pyx_v_free_doc != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":676
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":677
  *         if result is not NULL:
  *             if free_doc:
  *                 tree.xmlFreeDoc(result)             # <<<<<<<<<<<<<<
@@ -91613,7 +91575,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
       }
       __pyx_L16:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":677
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":678
  *             if free_doc:
  *                 tree.xmlFreeDoc(result)
  *             result = NULL             # <<<<<<<<<<<<<<
@@ -91625,19 +91587,19 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     }
     __pyx_L15:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":678
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":679
  *                 tree.xmlFreeDoc(result)
  *             result = NULL
  *         context._raise_if_stored()             # <<<<<<<<<<<<<<
  * 
  *     if result is NULL:
  */
-    __pyx_t_11 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._raise_if_stored(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_context)); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_11 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base._raise_if_stored(((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_v_context)); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L14;
   }
   __pyx_L14:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":680
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":681
  *         context._raise_if_stored()
  * 
  *     if result is NULL:             # <<<<<<<<<<<<<<
@@ -91647,7 +91609,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   __pyx_t_3 = ((__pyx_v_result == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":681
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":682
  * 
  *     if result is NULL:
  *         if context is not None:             # <<<<<<<<<<<<<<
@@ -91658,7 +91620,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_4 = (__pyx_t_3 != 0);
     if (__pyx_t_4) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":682
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":683
  *     if result is NULL:
  *         if context is not None:
  *             _raiseParseError(c_ctxt, filename, context._error_log)             # <<<<<<<<<<<<<<
@@ -91667,27 +91629,27 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
  */
       __pyx_t_5 = ((PyObject *)__pyx_v_context->_error_log);
       __Pyx_INCREF(__pyx_t_5);
-      __pyx_t_11 = __pyx_f_4lxml_5etree__raiseParseError(__pyx_v_c_ctxt, __pyx_v_filename, ((struct __pyx_obj_4lxml_5etree__ErrorLog *)__pyx_t_5)); if (unlikely(__pyx_t_11 == 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_11 = __pyx_f_4lxml_5etree__raiseParseError(__pyx_v_c_ctxt, __pyx_v_filename, ((struct __pyx_obj_4lxml_5etree__ErrorLog *)__pyx_t_5)); if (unlikely(__pyx_t_11 == 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       goto __pyx_L18;
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":684
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":685
  *             _raiseParseError(c_ctxt, filename, context._error_log)
  *         else:
  *             _raiseParseError(c_ctxt, filename, None)             # <<<<<<<<<<<<<<
  *     else:
  *         if result.URL is NULL and filename is not None:
  */
-      __pyx_t_11 = __pyx_f_4lxml_5etree__raiseParseError(__pyx_v_c_ctxt, __pyx_v_filename, ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None)); if (unlikely(__pyx_t_11 == 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_11 = __pyx_f_4lxml_5etree__raiseParseError(__pyx_v_c_ctxt, __pyx_v_filename, ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None)); if (unlikely(__pyx_t_11 == 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 685; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __pyx_L18:;
     goto __pyx_L17;
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":686
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":687
  *             _raiseParseError(c_ctxt, filename, None)
  *     else:
  *         if result.URL is NULL and filename is not None:             # <<<<<<<<<<<<<<
@@ -91703,7 +91665,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     }
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":687
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":688
  *     else:
  *         if result.URL is NULL and filename is not None:
  *             result.URL = tree.xmlStrdup(_xcstr(filename))             # <<<<<<<<<<<<<<
@@ -91715,7 +91677,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     }
     __pyx_L19:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":688
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":689
  *         if result.URL is NULL and filename is not None:
  *             result.URL = tree.xmlStrdup(_xcstr(filename))
  *         if result.encoding is NULL:             # <<<<<<<<<<<<<<
@@ -91725,7 +91687,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
     __pyx_t_1 = ((__pyx_v_result->encoding == NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":689
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":690
  *             result.URL = tree.xmlStrdup(_xcstr(filename))
  *         if result.encoding is NULL:
  *             result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")             # <<<<<<<<<<<<<<
@@ -91739,7 +91701,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   }
   __pyx_L17:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":691
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":692
  *             result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")
  * 
  *     if context._validator is not None and \             # <<<<<<<<<<<<<<
@@ -91749,7 +91711,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   __pyx_t_1 = (((PyObject *)__pyx_v_context->_validator) != Py_None);
   if ((__pyx_t_1 != 0)) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":692
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":693
  * 
  *     if context._validator is not None and \
  *            context._validator._add_default_attributes:             # <<<<<<<<<<<<<<
@@ -91762,7 +91724,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   }
   if (__pyx_t_4) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":696
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":697
  *         # support inserting default attributes during parse-time
  *         # validation
  *         context._validator.inject_default_attributes(result)             # <<<<<<<<<<<<<<
@@ -91774,7 +91736,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   }
   __pyx_L21:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":698
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":699
  *         context._validator.inject_default_attributes(result)
  * 
  *     return result             # <<<<<<<<<<<<<<
@@ -91784,7 +91746,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":634
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":635
  *         raise XMLSyntaxError(None, xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0)
  * 
  * cdef xmlDoc* _handleParseResult(_ParserContext context,             # <<<<<<<<<<<<<<
@@ -91806,7 +91768,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__handleParseResult(struct __pyx_obj_4lxml_5e
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":700
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":701
  *     return result
  * 
  * cdef int _fixHtmlDictNames(tree.xmlDict* c_dict, xmlDoc* c_doc) nogil:             # <<<<<<<<<<<<<<
@@ -91820,7 +91782,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
   int __pyx_t_1;
   xmlNode *__pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":702
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":703
  * cdef int _fixHtmlDictNames(tree.xmlDict* c_dict, xmlDoc* c_doc) nogil:
  *     cdef xmlNode* c_node
  *     if c_doc is NULL:             # <<<<<<<<<<<<<<
@@ -91830,39 +91792,39 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
   __pyx_t_1 = ((__pyx_v_c_doc == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":703
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":704
  *     cdef xmlNode* c_node
  *     if c_doc is NULL:
  *         return 0             # <<<<<<<<<<<<<<
  *     c_node = c_doc.children
- *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 0)
+ *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
  */
     __pyx_r = 0;
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":704
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":705
  *     if c_doc is NULL:
  *         return 0
  *     c_node = c_doc.children             # <<<<<<<<<<<<<<
- *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 0)
+ *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:
  */
   __pyx_t_2 = __pyx_v_c_doc->children;
   __pyx_v_c_node = __pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":705
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":706
  *         return 0
  *     c_node = c_doc.children
- *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 0)             # <<<<<<<<<<<<<<
+ *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)             # <<<<<<<<<<<<<<
  *     if c_node.type == tree.XML_ELEMENT_NODE:
  *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
  */
-  BEGIN_FOR_EACH_ELEMENT_FROM(((xmlNode *)__pyx_v_c_doc), __pyx_v_c_node, 0);
+  BEGIN_FOR_EACH_ELEMENT_FROM(((xmlNode *)__pyx_v_c_doc), __pyx_v_c_node, 1);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":706
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":707
  *     c_node = c_doc.children
- *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 0)
+ *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
  *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
  *             return -1
@@ -91870,8 +91832,8 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
   __pyx_t_1 = ((__pyx_v_c_node->type == XML_ELEMENT_NODE) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":707
- *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 0)
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":708
+ *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
  *     if c_node.type == tree.XML_ELEMENT_NODE:
  *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:             # <<<<<<<<<<<<<<
  *             return -1
@@ -91880,7 +91842,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
     __pyx_t_1 = ((__pyx_f_4lxml_5etree__fixHtmlDictNodeNames(__pyx_v_c_dict, __pyx_v_c_node) < 0) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":708
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":709
  *     if c_node.type == tree.XML_ELEMENT_NODE:
  *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
  *             return -1             # <<<<<<<<<<<<<<
@@ -91894,7 +91856,7 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":709
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":710
  *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
  *             return -1
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)             # <<<<<<<<<<<<<<
@@ -91903,17 +91865,17 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
  */
   END_FOR_EACH_ELEMENT_FROM(__pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":710
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":711
  *             return -1
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)
  *     return 0             # <<<<<<<<<<<<<<
  * 
- * cdef inline int _fixHtmlDictNodeNames(tree.xmlDict* c_dict,
+ * cdef int _fixHtmlDictSubtreeNames(tree.xmlDict* c_dict, xmlDoc* c_doc,
  */
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":700
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":701
  *     return result
  * 
  * cdef int _fixHtmlDictNames(tree.xmlDict* c_dict, xmlDoc* c_doc) nogil:             # <<<<<<<<<<<<<<
@@ -91926,7 +91888,146 @@ static int __pyx_f_4lxml_5etree__fixHtmlDictNames(xmlDict *__pyx_v_c_dict, xmlDo
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":712
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":713
+ *     return 0
+ * 
+ * cdef int _fixHtmlDictSubtreeNames(tree.xmlDict* c_dict, xmlDoc* c_doc,             # <<<<<<<<<<<<<<
+ *                                   xmlNode* c_start_node) nogil:
+ *     """
+ */
+
+static int __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(xmlDict *__pyx_v_c_dict, xmlDoc *__pyx_v_c_doc, xmlNode *__pyx_v_c_start_node) {
+  xmlNode *__pyx_v_c_node;
+  int __pyx_r;
+  int __pyx_t_1;
+
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":720
+ *     """
+ *     cdef xmlNode* c_node
+ *     if not c_doc:             # <<<<<<<<<<<<<<
+ *         return 0
+ *     if not c_start_node:
+ */
+  __pyx_t_1 = ((!(__pyx_v_c_doc != 0)) != 0);
+  if (__pyx_t_1) {
+
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":721
+ *     cdef xmlNode* c_node
+ *     if not c_doc:
+ *         return 0             # <<<<<<<<<<<<<<
+ *     if not c_start_node:
+ *         return _fixHtmlDictNames(c_dict, c_doc)
+ */
+    __pyx_r = 0;
+    goto __pyx_L0;
+  }
+
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":722
+ *     if not c_doc:
+ *         return 0
+ *     if not c_start_node:             # <<<<<<<<<<<<<<
+ *         return _fixHtmlDictNames(c_dict, c_doc)
+ *     c_node = c_start_node
+ */
+  __pyx_t_1 = ((!(__pyx_v_c_start_node != 0)) != 0);
+  if (__pyx_t_1) {
+
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":723
+ *         return 0
+ *     if not c_start_node:
+ *         return _fixHtmlDictNames(c_dict, c_doc)             # <<<<<<<<<<<<<<
+ *     c_node = c_start_node
+ *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
+ */
+    __pyx_r = __pyx_f_4lxml_5etree__fixHtmlDictNames(__pyx_v_c_dict, __pyx_v_c_doc);
+    goto __pyx_L0;
+  }
+
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":724
+ *     if not c_start_node:
+ *         return _fixHtmlDictNames(c_dict, c_doc)
+ *     c_node = c_start_node             # <<<<<<<<<<<<<<
+ *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
+ *     if c_node.type == tree.XML_ELEMENT_NODE:
+ */
+  __pyx_v_c_node = __pyx_v_c_start_node;
+
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":725
+ *         return _fixHtmlDictNames(c_dict, c_doc)
+ *     c_node = c_start_node
+ *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)             # <<<<<<<<<<<<<<
+ *     if c_node.type == tree.XML_ELEMENT_NODE:
+ *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
+ */
+  BEGIN_FOR_EACH_ELEMENT_FROM(((xmlNode *)__pyx_v_c_doc), __pyx_v_c_node, 1);
+
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":726
+ *     c_node = c_start_node
+ *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
+ *     if c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
+ *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
+ *             return -1
+ */
+  __pyx_t_1 = ((__pyx_v_c_node->type == XML_ELEMENT_NODE) != 0);
+  if (__pyx_t_1) {
+
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":727
+ *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
+ *     if c_node.type == tree.XML_ELEMENT_NODE:
+ *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:             # <<<<<<<<<<<<<<
+ *             return -1
+ *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)
+ */
+    __pyx_t_1 = ((__pyx_f_4lxml_5etree__fixHtmlDictNodeNames(__pyx_v_c_dict, __pyx_v_c_node) < 0) != 0);
+    if (__pyx_t_1) {
+
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":728
+ *     if c_node.type == tree.XML_ELEMENT_NODE:
+ *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
+ *             return -1             # <<<<<<<<<<<<<<
+ *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)
+ *     return 0
+ */
+      __pyx_r = -1;
+      goto __pyx_L0;
+    }
+    goto __pyx_L5;
+  }
+  __pyx_L5:;
+
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":729
+ *         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
+ *             return -1
+ *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  END_FOR_EACH_ELEMENT_FROM(__pyx_v_c_node);
+
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":730
+ *             return -1
+ *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline int _fixHtmlDictNodeNames(tree.xmlDict* c_dict,
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":713
+ *     return 0
+ * 
+ * cdef int _fixHtmlDictSubtreeNames(tree.xmlDict* c_dict, xmlDoc* c_doc,             # <<<<<<<<<<<<<<
+ *                                   xmlNode* c_start_node) nogil:
+ *     """
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  return __pyx_r;
+}
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":732
  *     return 0
  * 
  * cdef inline int _fixHtmlDictNodeNames(tree.xmlDict* c_dict,             # <<<<<<<<<<<<<<
@@ -91941,7 +92042,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
   int __pyx_t_1;
   xmlNode *__pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":715
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":735
  *                                       xmlNode* c_node) nogil:
  *     cdef xmlNode* c_attr
  *     c_name = tree.xmlDictLookup(c_dict, c_node.name, -1)             # <<<<<<<<<<<<<<
@@ -91950,7 +92051,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
   __pyx_v_c_name = xmlDictLookup(__pyx_v_c_dict, __pyx_v_c_node->name, -1);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":716
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":736
  *     cdef xmlNode* c_attr
  *     c_name = tree.xmlDictLookup(c_dict, c_node.name, -1)
  *     if c_name is NULL:             # <<<<<<<<<<<<<<
@@ -91960,7 +92061,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
   __pyx_t_1 = ((__pyx_v_c_name == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":717
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":737
  *     c_name = tree.xmlDictLookup(c_dict, c_node.name, -1)
  *     if c_name is NULL:
  *         return -1             # <<<<<<<<<<<<<<
@@ -91971,7 +92072,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":718
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":738
  *     if c_name is NULL:
  *         return -1
  *     if c_name is not c_node.name:             # <<<<<<<<<<<<<<
@@ -91981,7 +92082,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
   __pyx_t_1 = ((__pyx_v_c_name != __pyx_v_c_node->name) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":719
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":739
  *         return -1
  *     if c_name is not c_node.name:
  *         tree.xmlFree(<char*>c_node.name)             # <<<<<<<<<<<<<<
@@ -91990,7 +92091,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
     xmlFree(((char *)__pyx_v_c_node->name));
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":720
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":740
  *     if c_name is not c_node.name:
  *         tree.xmlFree(<char*>c_node.name)
  *         c_node.name = c_name             # <<<<<<<<<<<<<<
@@ -92002,7 +92103,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":721
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":741
  *         tree.xmlFree(<char*>c_node.name)
  *         c_node.name = c_name
  *     c_attr = <xmlNode*>c_node.properties             # <<<<<<<<<<<<<<
@@ -92011,7 +92112,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
   __pyx_v_c_attr = ((xmlNode *)__pyx_v_c_node->properties);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":722
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":742
  *         c_node.name = c_name
  *     c_attr = <xmlNode*>c_node.properties
  *     while c_attr is not NULL:             # <<<<<<<<<<<<<<
@@ -92022,7 +92123,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
     __pyx_t_1 = ((__pyx_v_c_attr != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":723
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":743
  *     c_attr = <xmlNode*>c_node.properties
  *     while c_attr is not NULL:
  *         c_name = tree.xmlDictLookup(c_dict, c_attr.name, -1)             # <<<<<<<<<<<<<<
@@ -92031,7 +92132,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
     __pyx_v_c_name = xmlDictLookup(__pyx_v_c_dict, __pyx_v_c_attr->name, -1);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":724
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":744
  *     while c_attr is not NULL:
  *         c_name = tree.xmlDictLookup(c_dict, c_attr.name, -1)
  *         if c_name is NULL:             # <<<<<<<<<<<<<<
@@ -92041,7 +92142,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
     __pyx_t_1 = ((__pyx_v_c_name == NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":725
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":745
  *         c_name = tree.xmlDictLookup(c_dict, c_attr.name, -1)
  *         if c_name is NULL:
  *             return -1             # <<<<<<<<<<<<<<
@@ -92052,7 +92153,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
       goto __pyx_L0;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":726
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":746
  *         if c_name is NULL:
  *             return -1
  *         if c_name is not c_attr.name:             # <<<<<<<<<<<<<<
@@ -92062,7 +92163,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
     __pyx_t_1 = ((__pyx_v_c_name != __pyx_v_c_attr->name) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":727
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":747
  *             return -1
  *         if c_name is not c_attr.name:
  *             tree.xmlFree(<char*>c_attr.name)             # <<<<<<<<<<<<<<
@@ -92071,7 +92172,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
  */
       xmlFree(((char *)__pyx_v_c_attr->name));
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":728
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":748
  *         if c_name is not c_attr.name:
  *             tree.xmlFree(<char*>c_attr.name)
  *             c_attr.name = c_name             # <<<<<<<<<<<<<<
@@ -92083,7 +92184,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
     }
     __pyx_L8:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":729
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":749
  *             tree.xmlFree(<char*>c_attr.name)
  *             c_attr.name = c_name
  *         c_attr = c_attr.next             # <<<<<<<<<<<<<<
@@ -92094,7 +92195,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
     __pyx_v_c_attr = __pyx_t_2;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":730
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":750
  *             c_attr.name = c_name
  *         c_attr = c_attr.next
  *     return 0             # <<<<<<<<<<<<<<
@@ -92104,7 +92205,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":712
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":732
  *     return 0
  * 
  * cdef inline int _fixHtmlDictNodeNames(tree.xmlDict* c_dict,             # <<<<<<<<<<<<<<
@@ -92117,7 +92218,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__fixHtmlDictNodeNames(xmlDict *__p
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":749
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":769
  *     cdef tuple _events_to_collect  # (event_types, tag)
  * 
  *     def __init__(self, int parse_options, bint for_html, XMLSchema schema,             # <<<<<<<<<<<<<<
@@ -92168,41 +92269,41 @@ static int __pyx_pw_4lxml_5etree_11_BaseParser_1__init__(PyObject *__pyx_v_self,
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_for_html)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 1); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 1); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_schema)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 2); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 2); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_remove_comments)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 3); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 3); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  4:
         if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_remove_pis)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 4); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 4); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  5:
         if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_strip_cdata)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 5); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 5); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  6:
         if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_target)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 6); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 6); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  7:
         if (likely((values[7] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_encoding)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 7); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, 7); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 8) {
       goto __pyx_L5_argtuple_error;
@@ -92216,8 +92317,8 @@ static int __pyx_pw_4lxml_5etree_11_BaseParser_1__init__(PyObject *__pyx_v_self,
       values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
       values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
     }
-    __pyx_v_parse_options = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_parse_options == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
-    __pyx_v_for_html = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_for_html == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_parse_options = __Pyx_PyInt_As_int(values[0]); if (unlikely((__pyx_v_parse_options == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+    __pyx_v_for_html = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_for_html == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     __pyx_v_schema = ((struct __pyx_obj_4lxml_5etree_XMLSchema *)values[2]);
     __pyx_v_remove_comments = values[3];
     __pyx_v_remove_pis = values[4];
@@ -92227,13 +92328,13 @@ static int __pyx_pw_4lxml_5etree_11_BaseParser_1__init__(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 8, 8, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._BaseParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_4lxml_5etree_XMLSchema, 1, "schema", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_4lxml_5etree_XMLSchema, 1, "schema", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_4lxml_5etree_11_BaseParser___init__(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_parse_options, __pyx_v_for_html, __pyx_v_schema, __pyx_v_remove_comments, __pyx_v_remove_pis, __pyx_v_strip_cdata, __pyx_v_target, __pyx_v_encoding);
 
   /* function exit code */
@@ -92249,38 +92350,34 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   xmlCharEncodingHandler *__pyx_v_enchandler;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
-  struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  int __pyx_t_4;
-  PyObject *__pyx_t_5 = NULL;
+  PyObject *__pyx_t_4 = NULL;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_encoding);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":753
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":773
  *         cdef tree.xmlCharEncodingHandler* enchandler
  *         cdef int c_encoding
  *         if not isinstance(self, (XMLParser, HTMLParser)):             # <<<<<<<<<<<<<<
  *             raise TypeError, u"This class cannot be instantiated"
  * 
  */
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_t_1 = __pyx_v_self;
-  __pyx_t_2 = __Pyx_TypeCheck(((PyObject *)__pyx_t_1), ((PyObject*)__pyx_ptype_4lxml_5etree_XMLParser)); 
-  if (!__pyx_t_2) {
-    __pyx_t_3 = __Pyx_TypeCheck(((PyObject *)__pyx_t_1), ((PyObject*)__pyx_ptype_4lxml_5etree_HTMLParser)); 
-    __pyx_t_4 = __pyx_t_3;
+  __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), ((PyObject*)__pyx_ptype_4lxml_5etree_XMLParser)); 
+  if (!__pyx_t_1) {
+    __pyx_t_2 = __Pyx_TypeCheck(((PyObject *)__pyx_v_self), ((PyObject*)__pyx_ptype_4lxml_5etree_HTMLParser)); 
+    __pyx_t_3 = __pyx_t_2;
   } else {
-    __pyx_t_4 = __pyx_t_2;
+    __pyx_t_3 = __pyx_t_1;
   }
-  __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
-  __pyx_t_2 = ((!(__pyx_t_4 != 0)) != 0);
-  if (__pyx_t_2) {
+  __pyx_t_1 = ((!(__pyx_t_3 != 0)) != 0);
+  if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":754
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":774
  *         cdef int c_encoding
  *         if not isinstance(self, (XMLParser, HTMLParser)):
  *             raise TypeError, u"This class cannot be instantiated"             # <<<<<<<<<<<<<<
@@ -92288,10 +92385,10 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
  *         self._parse_options = parse_options
  */
     __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_This_class_cannot_be_instantiate, 0, 0);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 754; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":756
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":776
  *             raise TypeError, u"This class cannot be instantiated"
  * 
  *         self._parse_options = parse_options             # <<<<<<<<<<<<<<
@@ -92300,7 +92397,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
  */
   __pyx_v_self->_parse_options = __pyx_v_parse_options;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":757
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":777
  * 
  *         self._parse_options = parse_options
  *         self.target = target             # <<<<<<<<<<<<<<
@@ -92313,7 +92410,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   __Pyx_DECREF(__pyx_v_self->target);
   __pyx_v_self->target = __pyx_v_target;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":758
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":778
  *         self._parse_options = parse_options
  *         self.target = target
  *         self._for_html = for_html             # <<<<<<<<<<<<<<
@@ -92322,37 +92419,37 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
  */
   __pyx_v_self->_for_html = __pyx_v_for_html;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":759
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":779
  *         self.target = target
  *         self._for_html = for_html
  *         self._remove_comments = remove_comments             # <<<<<<<<<<<<<<
  *         self._remove_pis = remove_pis
  *         self._strip_cdata = strip_cdata
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_remove_comments); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 759; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->_remove_comments = __pyx_t_2;
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_remove_comments); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 779; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->_remove_comments = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":760
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":780
  *         self._for_html = for_html
  *         self._remove_comments = remove_comments
  *         self._remove_pis = remove_pis             # <<<<<<<<<<<<<<
  *         self._strip_cdata = strip_cdata
  *         self._schema = schema
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_remove_pis); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->_remove_pis = __pyx_t_2;
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_remove_pis); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->_remove_pis = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":761
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":781
  *         self._remove_comments = remove_comments
  *         self._remove_pis = remove_pis
  *         self._strip_cdata = strip_cdata             # <<<<<<<<<<<<<<
  *         self._schema = schema
  * 
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_strip_cdata); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_v_self->_strip_cdata = __pyx_t_2;
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_strip_cdata); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 781; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_v_self->_strip_cdata = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":762
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":782
  *         self._remove_pis = remove_pis
  *         self._strip_cdata = strip_cdata
  *         self._schema = schema             # <<<<<<<<<<<<<<
@@ -92365,33 +92462,33 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_schema));
   __pyx_v_self->_schema = __pyx_v_schema;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":764
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":784
  *         self._schema = schema
  * 
  *         self._resolvers = _ResolverRegistry()             # <<<<<<<<<<<<<<
  * 
  *         if encoding is None:
  */
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ResolverRegistry)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __Pyx_GOTREF(__pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_5);
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ResolverRegistry)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_GIVEREF(__pyx_t_4);
   __Pyx_GOTREF(__pyx_v_self->_resolvers);
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_resolvers));
-  __pyx_v_self->_resolvers = ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_5);
-  __pyx_t_5 = 0;
+  __pyx_v_self->_resolvers = ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_4);
+  __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":766
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":786
  *         self._resolvers = _ResolverRegistry()
  * 
  *         if encoding is None:             # <<<<<<<<<<<<<<
  *             self._default_encoding = None
  *         else:
  */
-  __pyx_t_2 = (__pyx_v_encoding == Py_None);
-  __pyx_t_4 = (__pyx_t_2 != 0);
-  if (__pyx_t_4) {
+  __pyx_t_1 = (__pyx_v_encoding == Py_None);
+  __pyx_t_3 = (__pyx_t_1 != 0);
+  if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":767
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":787
  * 
  *         if encoding is None:
  *             self._default_encoding = None             # <<<<<<<<<<<<<<
@@ -92407,19 +92504,19 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":769
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":789
  *             self._default_encoding = None
  *         else:
  *             encoding = _utf8(encoding)             # <<<<<<<<<<<<<<
  *             enchandler = tree.xmlFindCharEncodingHandler(_cstr(encoding))
  *             if enchandler is NULL:
  */
-    __pyx_t_5 = __pyx_f_4lxml_5etree__utf8(__pyx_v_encoding); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_t_5);
-    __pyx_t_5 = 0;
+    __pyx_t_4 = __pyx_f_4lxml_5etree__utf8(__pyx_v_encoding); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_t_4);
+    __pyx_t_4 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":770
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":790
  *         else:
  *             encoding = _utf8(encoding)
  *             enchandler = tree.xmlFindCharEncodingHandler(_cstr(encoding))             # <<<<<<<<<<<<<<
@@ -92428,31 +92525,31 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
  */
     __pyx_v_enchandler = xmlFindCharEncodingHandler(PyBytes_AS_STRING(__pyx_v_encoding));
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":771
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":791
  *             encoding = _utf8(encoding)
  *             enchandler = tree.xmlFindCharEncodingHandler(_cstr(encoding))
  *             if enchandler is NULL:             # <<<<<<<<<<<<<<
  *                 raise LookupError, u"unknown encoding: '%s'" % encoding
  *             tree.xmlCharEncCloseFunc(enchandler)
  */
-    __pyx_t_4 = ((__pyx_v_enchandler == NULL) != 0);
-    if (__pyx_t_4) {
+    __pyx_t_3 = ((__pyx_v_enchandler == NULL) != 0);
+    if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":772
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":792
  *             enchandler = tree.xmlFindCharEncodingHandler(_cstr(encoding))
  *             if enchandler is NULL:
  *                 raise LookupError, u"unknown encoding: '%s'" % encoding             # <<<<<<<<<<<<<<
  *             tree.xmlCharEncCloseFunc(enchandler)
  *             self._default_encoding = encoding
  */
-      __pyx_t_5 = PyUnicode_Format(__pyx_kp_u_unknown_encoding_s, __pyx_v_encoding); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_Raise(__pyx_builtin_LookupError, __pyx_t_5, 0, 0);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyUnicode_Format(__pyx_kp_u_unknown_encoding_s, __pyx_v_encoding); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_Raise(__pyx_builtin_LookupError, __pyx_t_4, 0, 0);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":773
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":793
  *             if enchandler is NULL:
  *                 raise LookupError, u"unknown encoding: '%s'" % encoding
  *             tree.xmlCharEncCloseFunc(enchandler)             # <<<<<<<<<<<<<<
@@ -92461,7 +92558,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
  */
     xmlCharEncCloseFunc(__pyx_v_enchandler);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":774
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":794
  *                 raise LookupError, u"unknown encoding: '%s'" % encoding
  *             tree.xmlCharEncCloseFunc(enchandler)
  *             self._default_encoding = encoding             # <<<<<<<<<<<<<<
@@ -92476,7 +92573,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":749
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":769
  *     cdef tuple _events_to_collect  # (event_types, tag)
  * 
  *     def __init__(self, int parse_options, bint for_html, XMLSchema schema,             # <<<<<<<<<<<<<<
@@ -92488,8 +92585,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   __pyx_r = 0;
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(((PyObject *)__pyx_t_1));
-  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("lxml.etree._BaseParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
@@ -92498,7 +92594,7 @@ static int __pyx_pf_4lxml_5etree_11_BaseParser___init__(struct __pyx_obj_4lxml_5
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":776
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":796
  *             self._default_encoding = encoding
  * 
  *     cdef _setBaseURL(self, base_url):             # <<<<<<<<<<<<<<
@@ -92515,23 +92611,23 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__setBaseURL(struct __pyx_obj
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_setBaseURL", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":777
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":797
  * 
  *     cdef _setBaseURL(self, base_url):
  *         self._filename = _encodeFilename(base_url)             # <<<<<<<<<<<<<<
  * 
  *     cdef _collectEvents(self, event_types, tag):
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_base_url); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_base_url); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 797; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_filename);
   __Pyx_DECREF(__pyx_v_self->_filename);
   __pyx_v_self->_filename = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":776
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":796
  *             self._default_encoding = encoding
  * 
  *     cdef _setBaseURL(self, base_url):             # <<<<<<<<<<<<<<
@@ -92552,7 +92648,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__setBaseURL(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":779
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":799
  *         self._filename = _encodeFilename(base_url)
  * 
  *     cdef _collectEvents(self, event_types, tag):             # <<<<<<<<<<<<<<
@@ -92574,7 +92670,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__collectEvents(struct __pyx_
   __Pyx_RefNannySetupContext("_collectEvents", 0);
   __Pyx_INCREF(__pyx_v_event_types);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":780
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":800
  * 
  *     cdef _collectEvents(self, event_types, tag):
  *         if event_types is None:             # <<<<<<<<<<<<<<
@@ -92585,7 +92681,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__collectEvents(struct __pyx_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":781
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":801
  *     cdef _collectEvents(self, event_types, tag):
  *         if event_types is None:
  *             event_types = ()             # <<<<<<<<<<<<<<
@@ -92598,51 +92694,51 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__collectEvents(struct __pyx_
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":783
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":803
  *             event_types = ()
  *         else:
  *             event_types = tuple(set(event_types))             # <<<<<<<<<<<<<<
  *             _buildParseEventFilter(event_types)  # purely for validation
  *         self._events_to_collect = (event_types, tag)
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_event_types);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_event_types);
     __Pyx_GIVEREF(__pyx_v_event_types);
-    __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PySet_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyTuple_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_event_types, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":784
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":804
  *         else:
  *             event_types = tuple(set(event_types))
  *             _buildParseEventFilter(event_types)  # purely for validation             # <<<<<<<<<<<<<<
  *         self._events_to_collect = (event_types, tag)
  * 
  */
-    __pyx_t_5 = __pyx_f_4lxml_5etree__buildParseEventFilter(__pyx_v_event_types); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_4lxml_5etree__buildParseEventFilter(__pyx_v_event_types); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":785
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":805
  *             event_types = tuple(set(event_types))
  *             _buildParseEventFilter(event_types)  # purely for validation
  *         self._events_to_collect = (event_types, tag)             # <<<<<<<<<<<<<<
  * 
  *     cdef _ParserContext _getParserContext(self):
  */
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 805; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_event_types);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_event_types);
@@ -92656,7 +92752,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__collectEvents(struct __pyx_
   __pyx_v_self->_events_to_collect = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":779
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":799
  *         self._filename = _encodeFilename(base_url)
  * 
  *     cdef _collectEvents(self, event_types, tag):             # <<<<<<<<<<<<<<
@@ -92679,7 +92775,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_BaseParser__collectEvents(struct __pyx_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":787
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":807
  *         self._events_to_collect = (event_types, tag)
  * 
  *     cdef _ParserContext _getParserContext(self):             # <<<<<<<<<<<<<<
@@ -92702,7 +92798,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_getParserContext", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":789
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":809
  *     cdef _ParserContext _getParserContext(self):
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         if self._parser_context is None:             # <<<<<<<<<<<<<<
@@ -92713,7 +92809,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":790
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":810
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         if self._parser_context is None:
  *             self._parser_context = self._createContext(self.target, None)             # <<<<<<<<<<<<<<
@@ -92722,7 +92818,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
  */
     __pyx_t_3 = __pyx_v_self->target;
     __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_createContext(__pyx_v_self, __pyx_t_3, Py_None)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_createContext(__pyx_v_self, __pyx_t_3, Py_None)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_GIVEREF(__pyx_t_4);
@@ -92731,7 +92827,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_v_self->_parser_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":791
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":811
  *         if self._parser_context is None:
  *             self._parser_context = self._createContext(self.target, None)
  *             if self._schema is not None:             # <<<<<<<<<<<<<<
@@ -92742,17 +92838,17 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":793
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":813
  *             if self._schema is not None:
  *                 self._parser_context._validator = \
  *                     self._schema._newSaxValidator(             # <<<<<<<<<<<<<<
  *                         self._parse_options & xmlparser.XML_PARSE_DTDATTR)
  *             pctxt = self._newParserCtxt()
  */
-      __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_XMLSchema *)__pyx_v_self->_schema->__pyx_base.__pyx_vtab)->_newSaxValidator(__pyx_v_self->_schema, (__pyx_v_self->_parse_options & XML_PARSE_DTDATTR))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 793; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_XMLSchema *)__pyx_v_self->_schema->__pyx_base.__pyx_vtab)->_newSaxValidator(__pyx_v_self->_schema, (__pyx_v_self->_parse_options & XML_PARSE_DTDATTR))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":792
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":812
  *             self._parser_context = self._createContext(self.target, None)
  *             if self._schema is not None:
  *                 self._parser_context._validator = \             # <<<<<<<<<<<<<<
@@ -92768,17 +92864,17 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":795
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":815
  *                     self._schema._newSaxValidator(
  *                         self._parse_options & xmlparser.XML_PARSE_DTDATTR)
  *             pctxt = self._newParserCtxt()             # <<<<<<<<<<<<<<
  *             _initParserContext(self._parser_context, self._resolvers, pctxt)
  *             if self._remove_comments:
  */
-    __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_newParserCtxt(__pyx_v_self); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_newParserCtxt(__pyx_v_self); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 815; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_pctxt = __pyx_t_5;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":796
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":816
  *                         self._parse_options & xmlparser.XML_PARSE_DTDATTR)
  *             pctxt = self._newParserCtxt()
  *             _initParserContext(self._parser_context, self._resolvers, pctxt)             # <<<<<<<<<<<<<<
@@ -92789,13 +92885,13 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __Pyx_INCREF(__pyx_t_4);
     __pyx_t_3 = ((PyObject *)__pyx_v_self->_resolvers);
     __Pyx_INCREF(__pyx_t_3);
-    __pyx_t_6 = __pyx_f_4lxml_5etree__initParserContext(((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_4), ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_3), __pyx_v_pctxt); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 796; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_4lxml_5etree__initParserContext(((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_4), ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_3), __pyx_v_pctxt); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":797
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":817
  *             pctxt = self._newParserCtxt()
  *             _initParserContext(self._parser_context, self._resolvers, pctxt)
  *             if self._remove_comments:             # <<<<<<<<<<<<<<
@@ -92805,7 +92901,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_1 = (__pyx_v_self->_remove_comments != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":798
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":818
  *             _initParserContext(self._parser_context, self._resolvers, pctxt)
  *             if self._remove_comments:
  *                 pctxt.sax.comment = NULL             # <<<<<<<<<<<<<<
@@ -92817,7 +92913,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":799
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":819
  *             if self._remove_comments:
  *                 pctxt.sax.comment = NULL
  *             if self._remove_pis:             # <<<<<<<<<<<<<<
@@ -92827,7 +92923,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_1 = (__pyx_v_self->_remove_pis != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":800
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":820
  *                 pctxt.sax.comment = NULL
  *             if self._remove_pis:
  *                 pctxt.sax.processingInstruction = NULL             # <<<<<<<<<<<<<<
@@ -92839,7 +92935,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     }
     __pyx_L6:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":801
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":821
  *             if self._remove_pis:
  *                 pctxt.sax.processingInstruction = NULL
  *             if self._strip_cdata:             # <<<<<<<<<<<<<<
@@ -92849,7 +92945,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_1 = (__pyx_v_self->_strip_cdata != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":803
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":823
  *             if self._strip_cdata:
  *                 # hard switch-off for CDATA nodes => makes them plain text
  *                 pctxt.sax.cdataBlock = NULL             # <<<<<<<<<<<<<<
@@ -92864,7 +92960,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":804
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":824
  *                 # hard switch-off for CDATA nodes => makes them plain text
  *                 pctxt.sax.cdataBlock = NULL
  *         return self._parser_context             # <<<<<<<<<<<<<<
@@ -92876,7 +92972,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   __pyx_r = __pyx_v_self->_parser_context;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":787
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":807
  *         self._events_to_collect = (event_types, tag)
  * 
  *     cdef _ParserContext _getParserContext(self):             # <<<<<<<<<<<<<<
@@ -92897,7 +92993,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":806
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":826
  *         return self._parser_context
  * 
  *     cdef _ParserContext _getPushParserContext(self):             # <<<<<<<<<<<<<<
@@ -92920,7 +93016,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_getPushParserContext", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":808
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":828
  *     cdef _ParserContext _getPushParserContext(self):
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         if self._push_parser_context is None:             # <<<<<<<<<<<<<<
@@ -92931,7 +93027,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":810
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":830
  *         if self._push_parser_context is None:
  *             self._push_parser_context = self._createContext(
  *                 self.target, self._events_to_collect)             # <<<<<<<<<<<<<<
@@ -92943,14 +93039,14 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_4 = __pyx_v_self->_events_to_collect;
     __Pyx_INCREF(__pyx_t_4);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":809
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":829
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         if self._push_parser_context is None:
  *             self._push_parser_context = self._createContext(             # <<<<<<<<<<<<<<
  *                 self.target, self._events_to_collect)
  *             if self._schema is not None:
  */
-    __pyx_t_5 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_createContext(__pyx_v_self, __pyx_t_3, __pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 809; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_createContext(__pyx_v_self, __pyx_t_3, __pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -92960,7 +93056,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_v_self->_push_parser_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":811
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":831
  *             self._push_parser_context = self._createContext(
  *                 self.target, self._events_to_collect)
  *             if self._schema is not None:             # <<<<<<<<<<<<<<
@@ -92971,17 +93067,17 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":813
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":833
  *             if self._schema is not None:
  *                 self._push_parser_context._validator = \
  *                     self._schema._newSaxValidator(             # <<<<<<<<<<<<<<
  *                         self._parse_options & xmlparser.XML_PARSE_DTDATTR)
  *             pctxt = self._newPushParserCtxt()
  */
-      __pyx_t_5 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_XMLSchema *)__pyx_v_self->_schema->__pyx_base.__pyx_vtab)->_newSaxValidator(__pyx_v_self->_schema, (__pyx_v_self->_parse_options & XML_PARSE_DTDATTR))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_XMLSchema *)__pyx_v_self->_schema->__pyx_base.__pyx_vtab)->_newSaxValidator(__pyx_v_self->_schema, (__pyx_v_self->_parse_options & XML_PARSE_DTDATTR))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":812
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":832
  *                 self.target, self._events_to_collect)
  *             if self._schema is not None:
  *                 self._push_parser_context._validator = \             # <<<<<<<<<<<<<<
@@ -92997,17 +93093,17 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":815
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":835
  *                     self._schema._newSaxValidator(
  *                         self._parse_options & xmlparser.XML_PARSE_DTDATTR)
  *             pctxt = self._newPushParserCtxt()             # <<<<<<<<<<<<<<
  *             _initParserContext(
  *                 self._push_parser_context, self._resolvers, pctxt)
  */
-    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_newPushParserCtxt(__pyx_v_self); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 815; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_newPushParserCtxt(__pyx_v_self); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_pctxt = __pyx_t_6;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":817
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":837
  *             pctxt = self._newPushParserCtxt()
  *             _initParserContext(
  *                 self._push_parser_context, self._resolvers, pctxt)             # <<<<<<<<<<<<<<
@@ -93019,20 +93115,20 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_4 = ((PyObject *)__pyx_v_self->_resolvers);
     __Pyx_INCREF(__pyx_t_4);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":816
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":836
  *                         self._parse_options & xmlparser.XML_PARSE_DTDATTR)
  *             pctxt = self._newPushParserCtxt()
  *             _initParserContext(             # <<<<<<<<<<<<<<
  *                 self._push_parser_context, self._resolvers, pctxt)
  *             if self._remove_comments:
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__initParserContext(((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_5), ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_4), __pyx_v_pctxt); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_4lxml_5etree__initParserContext(((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_5), ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_4), __pyx_v_pctxt); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":818
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":838
  *             _initParserContext(
  *                 self._push_parser_context, self._resolvers, pctxt)
  *             if self._remove_comments:             # <<<<<<<<<<<<<<
@@ -93042,7 +93138,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_1 = (__pyx_v_self->_remove_comments != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":819
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":839
  *                 self._push_parser_context, self._resolvers, pctxt)
  *             if self._remove_comments:
  *                 pctxt.sax.comment = NULL             # <<<<<<<<<<<<<<
@@ -93054,7 +93150,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":820
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":840
  *             if self._remove_comments:
  *                 pctxt.sax.comment = NULL
  *             if self._remove_pis:             # <<<<<<<<<<<<<<
@@ -93064,7 +93160,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_1 = (__pyx_v_self->_remove_pis != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":821
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":841
  *                 pctxt.sax.comment = NULL
  *             if self._remove_pis:
  *                 pctxt.sax.processingInstruction = NULL             # <<<<<<<<<<<<<<
@@ -93076,7 +93172,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     }
     __pyx_L6:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":822
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":842
  *             if self._remove_pis:
  *                 pctxt.sax.processingInstruction = NULL
  *             if self._strip_cdata:             # <<<<<<<<<<<<<<
@@ -93086,7 +93182,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_t_1 = (__pyx_v_self->_strip_cdata != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":824
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":844
  *             if self._strip_cdata:
  *                 # hard switch-off for CDATA nodes => makes them plain text
  *                 pctxt.sax.cdataBlock = NULL             # <<<<<<<<<<<<<<
@@ -93101,7 +93197,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":825
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":845
  *                 # hard switch-off for CDATA nodes => makes them plain text
  *                 pctxt.sax.cdataBlock = NULL
  *         return self._push_parser_context             # <<<<<<<<<<<<<<
@@ -93113,7 +93209,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   __pyx_r = __pyx_v_self->_push_parser_context;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":806
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":826
  *         return self._parser_context
  * 
  *     cdef _ParserContext _getPushParserContext(self):             # <<<<<<<<<<<<<<
@@ -93134,7 +93230,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":827
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":847
  *         return self._push_parser_context
  * 
  *     cdef _ParserContext _createContext(self, target, events_to_collect):             # <<<<<<<<<<<<<<
@@ -93160,7 +93256,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_createContext", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":829
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":849
  *     cdef _ParserContext _createContext(self, target, events_to_collect):
  *         cdef _SaxParserContext sax_context
  *         if target is not None:             # <<<<<<<<<<<<<<
@@ -93171,58 +93267,58 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":830
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":850
  *         cdef _SaxParserContext sax_context
  *         if target is not None:
  *             sax_context = _TargetParserContext(self)             # <<<<<<<<<<<<<<
  *             (<_TargetParserContext>sax_context)._setTarget(target)
  *         elif events_to_collect:
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 850; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__TargetParserContext)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__TargetParserContext)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 850; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_v_sax_context = ((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":831
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":851
  *         if target is not None:
  *             sax_context = _TargetParserContext(self)
  *             (<_TargetParserContext>sax_context)._setTarget(target)             # <<<<<<<<<<<<<<
  *         elif events_to_collect:
  *             sax_context = _SaxParserContext(self)
  */
-    __pyx_t_5 = __pyx_f_4lxml_5etree_20_TargetParserContext__setTarget(((struct __pyx_obj_4lxml_5etree__TargetParserContext *)__pyx_v_sax_context), __pyx_v_target); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 831; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_4lxml_5etree_20_TargetParserContext__setTarget(((struct __pyx_obj_4lxml_5etree__TargetParserContext *)__pyx_v_sax_context), __pyx_v_target); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 851; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":832
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":852
  *             sax_context = _TargetParserContext(self)
  *             (<_TargetParserContext>sax_context)._setTarget(target)
  *         elif events_to_collect:             # <<<<<<<<<<<<<<
  *             sax_context = _SaxParserContext(self)
  *         else:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_events_to_collect); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 832; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_events_to_collect); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 852; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":833
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":853
  *             (<_TargetParserContext>sax_context)._setTarget(target)
  *         elif events_to_collect:
  *             sax_context = _SaxParserContext(self)             # <<<<<<<<<<<<<<
  *         else:
  *             # nothing special to configure
  */
-    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_self));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__SaxParserContext)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 833; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__SaxParserContext)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_v_sax_context = ((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_t_3);
@@ -93231,7 +93327,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":836
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":856
  *         else:
  *             # nothing special to configure
  *             return _ParserContext()             # <<<<<<<<<<<<<<
@@ -93239,7 +93335,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
  *             events, tag = events_to_collect
  */
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ParserContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ParserContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 856; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_3);
     __pyx_t_3 = 0;
@@ -93247,17 +93343,17 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":837
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":857
  *             # nothing special to configure
  *             return _ParserContext()
  *         if events_to_collect:             # <<<<<<<<<<<<<<
  *             events, tag = events_to_collect
  *             sax_context._setEventFilter(events, tag)
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_events_to_collect); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 837; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_events_to_collect); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 857; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":838
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":858
  *             return _ParserContext()
  *         if events_to_collect:
  *             events, tag = events_to_collect             # <<<<<<<<<<<<<<
@@ -93274,7 +93370,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -93287,21 +93383,21 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
       __Pyx_INCREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_4);
       #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_6 = PyObject_GetIter(__pyx_v_events_to_collect); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyObject_GetIter(__pyx_v_events_to_collect); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
       index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_3);
       index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_4);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L6_unpacking_done;
@@ -93309,7 +93405,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_L6_unpacking_done:;
     }
     __pyx_v_events = __pyx_t_3;
@@ -93317,21 +93413,21 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
     __pyx_v_tag = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":839
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":859
  *         if events_to_collect:
  *             events, tag = events_to_collect
  *             sax_context._setEventFilter(events, tag)             # <<<<<<<<<<<<<<
  *         return sax_context
  * 
  */
-    __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__SaxParserContext *)__pyx_v_sax_context->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->_setEventFilter(__pyx_v_sax_context, __pyx_v_events, __pyx_v_tag); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__SaxParserContext *)__pyx_v_sax_context->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->_setEventFilter(__pyx_v_sax_context, __pyx_v_events, __pyx_v_tag); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 859; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L4;
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":840
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":860
  *             events, tag = events_to_collect
  *             sax_context._setEventFilter(events, tag)
  *         return sax_context             # <<<<<<<<<<<<<<
@@ -93343,7 +93439,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   __pyx_r = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_v_sax_context);
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":827
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":847
  *         return self._push_parser_context
  * 
  *     cdef _ParserContext _createContext(self, target, events_to_collect):             # <<<<<<<<<<<<<<
@@ -93367,7 +93463,7 @@ static struct __pyx_obj_4lxml_5etree__ParserContext *__pyx_f_4lxml_5etree_11_Bas
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":842
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":862
  *         return sax_context
  * 
  *     cdef int _registerHtmlErrorHandler(self, xmlparser.xmlParserCtxt* c_ctxt) except -1:             # <<<<<<<<<<<<<<
@@ -93388,7 +93484,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_registerHtmlErrorHandler", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":843
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":863
  * 
  *     cdef int _registerHtmlErrorHandler(self, xmlparser.xmlParserCtxt* c_ctxt) except -1:
  *         cdef xmlparser.xmlSAXHandler* sax = c_ctxt.sax             # <<<<<<<<<<<<<<
@@ -93398,7 +93494,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
   __pyx_t_1 = __pyx_v_c_ctxt->sax;
   __pyx_v_sax = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":844
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":864
  *     cdef int _registerHtmlErrorHandler(self, xmlparser.xmlParserCtxt* c_ctxt) except -1:
  *         cdef xmlparser.xmlSAXHandler* sax = c_ctxt.sax
  *         if sax is not NULL and sax.initialized and sax.initialized != xmlparser.XML_SAX2_MAGIC:             # <<<<<<<<<<<<<<
@@ -93419,7 +93515,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":846
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":866
  *         if sax is not NULL and sax.initialized and sax.initialized != xmlparser.XML_SAX2_MAGIC:
  *             # need to extend SAX1 context to SAX2 to get proper error reports
  *             if <xmlparser.xmlSAXHandlerV1*>sax is &htmlparser.htmlDefaultSAXHandler:             # <<<<<<<<<<<<<<
@@ -93429,7 +93525,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
     __pyx_t_3 = ((((xmlSAXHandlerV1 *)__pyx_v_sax) == (&htmlDefaultSAXHandler)) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":847
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":867
  *             # need to extend SAX1 context to SAX2 to get proper error reports
  *             if <xmlparser.xmlSAXHandlerV1*>sax is &htmlparser.htmlDefaultSAXHandler:
  *                 sax = <xmlparser.xmlSAXHandler*> stdlib.malloc(sizeof(xmlparser.xmlSAXHandler))             # <<<<<<<<<<<<<<
@@ -93438,7 +93534,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
       __pyx_v_sax = ((xmlSAXHandler *)malloc((sizeof(xmlSAXHandler))));
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":848
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":868
  *             if <xmlparser.xmlSAXHandlerV1*>sax is &htmlparser.htmlDefaultSAXHandler:
  *                 sax = <xmlparser.xmlSAXHandler*> stdlib.malloc(sizeof(xmlparser.xmlSAXHandler))
  *                 if sax is NULL:             # <<<<<<<<<<<<<<
@@ -93448,17 +93544,17 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
       __pyx_t_3 = ((__pyx_v_sax == NULL) != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":849
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":869
  *                 sax = <xmlparser.xmlSAXHandler*> stdlib.malloc(sizeof(xmlparser.xmlSAXHandler))
  *                 if sax is NULL:
  *                     raise MemoryError()             # <<<<<<<<<<<<<<
  *                 cstring_h.memcpy(sax, &htmlparser.htmlDefaultSAXHandler,
  *                                  sizeof(htmlparser.htmlDefaultSAXHandler))
  */
-        PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":850
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":870
  *                 if sax is NULL:
  *                     raise MemoryError()
  *                 cstring_h.memcpy(sax, &htmlparser.htmlDefaultSAXHandler,             # <<<<<<<<<<<<<<
@@ -93467,7 +93563,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
       memcpy(__pyx_v_sax, (&htmlDefaultSAXHandler), (sizeof(htmlDefaultSAXHandler)));
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":852
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":872
  *                 cstring_h.memcpy(sax, &htmlparser.htmlDefaultSAXHandler,
  *                                  sizeof(htmlparser.htmlDefaultSAXHandler))
  *                 c_ctxt.sax = sax             # <<<<<<<<<<<<<<
@@ -93479,7 +93575,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":853
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":873
  *                                  sizeof(htmlparser.htmlDefaultSAXHandler))
  *                 c_ctxt.sax = sax
  *             sax.initialized = xmlparser.XML_SAX2_MAGIC             # <<<<<<<<<<<<<<
@@ -93488,7 +93584,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
     __pyx_v_sax->initialized = XML_SAX2_MAGIC;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":854
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":874
  *                 c_ctxt.sax = sax
  *             sax.initialized = xmlparser.XML_SAX2_MAGIC
  *             sax.serror = _receiveParserError             # <<<<<<<<<<<<<<
@@ -93497,7 +93593,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
     __pyx_v_sax->serror = __pyx_f_4lxml_5etree__receiveParserError;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":855
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":875
  *             sax.initialized = xmlparser.XML_SAX2_MAGIC
  *             sax.serror = _receiveParserError
  *             sax.startElementNs = NULL             # <<<<<<<<<<<<<<
@@ -93506,7 +93602,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
     __pyx_v_sax->startElementNs = NULL;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":856
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":876
  *             sax.serror = _receiveParserError
  *             sax.startElementNs = NULL
  *             sax.endElementNs = NULL             # <<<<<<<<<<<<<<
@@ -93515,7 +93611,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
  */
     __pyx_v_sax->endElementNs = NULL;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":857
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":877
  *             sax.startElementNs = NULL
  *             sax.endElementNs = NULL
  *             sax._private = NULL             # <<<<<<<<<<<<<<
@@ -93527,7 +93623,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":858
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":878
  *             sax.endElementNs = NULL
  *             sax._private = NULL
  *         return 0             # <<<<<<<<<<<<<<
@@ -93537,7 +93633,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":842
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":862
  *         return sax_context
  * 
  *     cdef int _registerHtmlErrorHandler(self, xmlparser.xmlParserCtxt* c_ctxt) except -1:             # <<<<<<<<<<<<<<
@@ -93554,7 +93650,7 @@ static int __pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler(CYTHON_U
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":860
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":880
  *         return 0
  * 
  *     cdef xmlparser.xmlParserCtxt* _newParserCtxt(self) except NULL:             # <<<<<<<<<<<<<<
@@ -93573,7 +93669,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_newParserCtxt", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":862
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":882
  *     cdef xmlparser.xmlParserCtxt* _newParserCtxt(self) except NULL:
  *         cdef xmlparser.xmlParserCtxt* c_ctxt
  *         if self._for_html:             # <<<<<<<<<<<<<<
@@ -93583,7 +93679,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
   __pyx_t_1 = (__pyx_v_self->_for_html != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":863
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":883
  *         cdef xmlparser.xmlParserCtxt* c_ctxt
  *         if self._for_html:
  *             c_ctxt = htmlparser.htmlCreateMemoryParserCtxt('dummy', 5)             # <<<<<<<<<<<<<<
@@ -93592,7 +93688,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
  */
     __pyx_v_c_ctxt = htmlCreateMemoryParserCtxt(__pyx_k_dummy, 5);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":864
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":884
  *         if self._for_html:
  *             c_ctxt = htmlparser.htmlCreateMemoryParserCtxt('dummy', 5)
  *             if c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -93602,14 +93698,14 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
     __pyx_t_1 = ((__pyx_v_c_ctxt != NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":865
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":885
  *             c_ctxt = htmlparser.htmlCreateMemoryParserCtxt('dummy', 5)
  *             if c_ctxt is not NULL:
  *                 self._registerHtmlErrorHandler(c_ctxt)             # <<<<<<<<<<<<<<
  *         else:
  *             c_ctxt = xmlparser.xmlNewParserCtxt()
  */
-      __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_registerHtmlErrorHandler(__pyx_v_self, __pyx_v_c_ctxt); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 865; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_registerHtmlErrorHandler(__pyx_v_self, __pyx_v_c_ctxt); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 885; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L4;
     }
     __pyx_L4:;
@@ -93617,7 +93713,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":867
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":887
  *                 self._registerHtmlErrorHandler(c_ctxt)
  *         else:
  *             c_ctxt = xmlparser.xmlNewParserCtxt()             # <<<<<<<<<<<<<<
@@ -93628,7 +93724,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":868
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":888
  *         else:
  *             c_ctxt = xmlparser.xmlNewParserCtxt()
  *         if c_ctxt is NULL:             # <<<<<<<<<<<<<<
@@ -93638,17 +93734,17 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
   __pyx_t_1 = ((__pyx_v_c_ctxt == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":869
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":889
  *             c_ctxt = xmlparser.xmlNewParserCtxt()
  *         if c_ctxt is NULL:
  *             raise MemoryError             # <<<<<<<<<<<<<<
  *         return c_ctxt
  * 
  */
-    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":870
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":890
  *         if c_ctxt is NULL:
  *             raise MemoryError
  *         return c_ctxt             # <<<<<<<<<<<<<<
@@ -93658,7 +93754,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
   __pyx_r = __pyx_v_c_ctxt;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":860
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":880
  *         return 0
  * 
  *     cdef xmlparser.xmlParserCtxt* _newParserCtxt(self) except NULL:             # <<<<<<<<<<<<<<
@@ -93675,7 +93771,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt(struct _
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":872
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":892
  *         return c_ctxt
  * 
  *     cdef xmlparser.xmlParserCtxt* _newPushParserCtxt(self) except NULL:             # <<<<<<<<<<<<<<
@@ -93697,7 +93793,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_newPushParserCtxt", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":874
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":894
  *     cdef xmlparser.xmlParserCtxt* _newPushParserCtxt(self) except NULL:
  *         cdef xmlparser.xmlParserCtxt* c_ctxt
  *         cdef char* c_filename = _cstr(self._filename) if self._filename is not None else NULL             # <<<<<<<<<<<<<<
@@ -93715,7 +93811,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   }
   __pyx_v_c_filename = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":875
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":895
  *         cdef xmlparser.xmlParserCtxt* c_ctxt
  *         cdef char* c_filename = _cstr(self._filename) if self._filename is not None else NULL
  *         if self._for_html:             # <<<<<<<<<<<<<<
@@ -93725,7 +93821,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   __pyx_t_2 = (__pyx_v_self->_for_html != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":876
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":896
  *         cdef char* c_filename = _cstr(self._filename) if self._filename is not None else NULL
  *         if self._for_html:
  *             c_ctxt = htmlparser.htmlCreatePushParserCtxt(             # <<<<<<<<<<<<<<
@@ -93734,7 +93830,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
  */
     __pyx_v_c_ctxt = htmlCreatePushParserCtxt(NULL, NULL, NULL, 0, __pyx_v_c_filename, XML_CHAR_ENCODING_NONE);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":878
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":898
  *             c_ctxt = htmlparser.htmlCreatePushParserCtxt(
  *                 NULL, NULL, NULL, 0, c_filename, tree.XML_CHAR_ENCODING_NONE)
  *             if c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -93744,16 +93840,16 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
     __pyx_t_2 = ((__pyx_v_c_ctxt != NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":879
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":899
  *                 NULL, NULL, NULL, 0, c_filename, tree.XML_CHAR_ENCODING_NONE)
  *             if c_ctxt is not NULL:
  *                 self._registerHtmlErrorHandler(c_ctxt)             # <<<<<<<<<<<<<<
  *                 htmlparser.htmlCtxtUseOptions(c_ctxt, self._parse_options)
  *         else:
  */
-      __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_registerHtmlErrorHandler(__pyx_v_self, __pyx_v_c_ctxt); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_registerHtmlErrorHandler(__pyx_v_self, __pyx_v_c_ctxt); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":880
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":900
  *             if c_ctxt is not NULL:
  *                 self._registerHtmlErrorHandler(c_ctxt)
  *                 htmlparser.htmlCtxtUseOptions(c_ctxt, self._parse_options)             # <<<<<<<<<<<<<<
@@ -93768,7 +93864,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":882
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":902
  *                 htmlparser.htmlCtxtUseOptions(c_ctxt, self._parse_options)
  *         else:
  *             c_ctxt = xmlparser.xmlCreatePushParserCtxt(             # <<<<<<<<<<<<<<
@@ -93777,7 +93873,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
  */
     __pyx_v_c_ctxt = xmlCreatePushParserCtxt(NULL, NULL, NULL, 0, __pyx_v_c_filename);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":884
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":904
  *             c_ctxt = xmlparser.xmlCreatePushParserCtxt(
  *                 NULL, NULL, NULL, 0, c_filename)
  *             if c_ctxt is not NULL:             # <<<<<<<<<<<<<<
@@ -93787,7 +93883,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
     __pyx_t_2 = ((__pyx_v_c_ctxt != NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":885
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":905
  *                 NULL, NULL, NULL, 0, c_filename)
  *             if c_ctxt is not NULL:
  *                 xmlparser.xmlCtxtUseOptions(c_ctxt, self._parse_options)             # <<<<<<<<<<<<<<
@@ -93801,7 +93897,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":886
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":906
  *             if c_ctxt is not NULL:
  *                 xmlparser.xmlCtxtUseOptions(c_ctxt, self._parse_options)
  *         if c_ctxt is NULL:             # <<<<<<<<<<<<<<
@@ -93811,17 +93907,17 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   __pyx_t_2 = ((__pyx_v_c_ctxt == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":887
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":907
  *                 xmlparser.xmlCtxtUseOptions(c_ctxt, self._parse_options)
  *         if c_ctxt is NULL:
  *             raise MemoryError()             # <<<<<<<<<<<<<<
  *         return c_ctxt
  * 
  */
-    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 907; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":888
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":908
  *         if c_ctxt is NULL:
  *             raise MemoryError()
  *         return c_ctxt             # <<<<<<<<<<<<<<
@@ -93831,7 +93927,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   __pyx_r = __pyx_v_c_ctxt;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":872
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":892
  *         return c_ctxt
  * 
  *     cdef xmlparser.xmlParserCtxt* _newPushParserCtxt(self) except NULL:             # <<<<<<<<<<<<<<
@@ -93849,7 +93945,7 @@ static xmlParserCtxt *__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt(stru
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":893
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":913
  *         u"""The error log of the last parser run.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -93880,19 +93976,19 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_9error_log___get__(struct _
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":895
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":915
  *         def __get__(self):
  *             cdef _ParserContext context
  *             context = self._getParserContext()             # <<<<<<<<<<<<<<
  *             return context._error_log.copy()
  * 
  */
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 895; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 915; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":896
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":916
  *             cdef _ParserContext context
  *             context = self._getParserContext()
  *             return context._error_log.copy()             # <<<<<<<<<<<<<<
@@ -93900,13 +93996,13 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_9error_log___get__(struct _
  *     property resolvers:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_context->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.copy(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_context->_error_log), 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 896; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)__pyx_v_context->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.copy(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_v_context->_error_log), 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 916; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":893
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":913
  *         u"""The error log of the last parser run.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -93926,7 +94022,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_9error_log___get__(struct _
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":900
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":920
  *     property resolvers:
  *         u"The custom resolver registry of this parser."
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -93952,7 +94048,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_9resolvers___get__(struct _
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":901
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":921
  *         u"The custom resolver registry of this parser."
  *         def __get__(self):
  *             return self._resolvers             # <<<<<<<<<<<<<<
@@ -93964,7 +94060,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_9resolvers___get__(struct _
   __pyx_r = ((PyObject *)__pyx_v_self->_resolvers);
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":900
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":920
  *     property resolvers:
  *         u"The custom resolver registry of this parser."
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -93979,7 +94075,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_9resolvers___get__(struct _
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":905
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":925
  *     property version:
  *         u"The version of the underlying XML parser."
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -94010,7 +94106,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_7version___get__(CYTHON_UNU
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":906
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":926
  *         u"The version of the underlying XML parser."
  *         def __get__(self):
  *             return u"libxml2 %d.%d.%d" % LIBXML_VERSION             # <<<<<<<<<<<<<<
@@ -94018,16 +94114,16 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_7version___get__(CYTHON_UNU
  *     def setElementClassLookup(self, ElementClassLookup lookup = None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_LIBXML_VERSION); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_LIBXML_VERSION); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyUnicode_Format(__pyx_kp_u_libxml2_d_d_d, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 906; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyUnicode_Format(__pyx_kp_u_libxml2_d_d_d, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 926; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":905
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":925
  *     property version:
  *         u"The version of the underlying XML parser."
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -94047,7 +94143,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_7version___get__(CYTHON_UNU
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":908
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":928
  *             return u"libxml2 %d.%d.%d" % LIBXML_VERSION
  * 
  *     def setElementClassLookup(self, ElementClassLookup lookup = None):             # <<<<<<<<<<<<<<
@@ -94087,7 +94183,7 @@ static PyObject *__pyx_pw_4lxml_5etree_11_BaseParser_3setElementClassLookup(PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setElementClassLookup") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setElementClassLookup") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -94100,13 +94196,13 @@ static PyObject *__pyx_pw_4lxml_5etree_11_BaseParser_3setElementClassLookup(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setElementClassLookup", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("setElementClassLookup", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._BaseParser.setElementClassLookup", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lookup), __pyx_ptype_4lxml_5etree_ElementClassLookup, 1, "lookup", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 908; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lookup), __pyx_ptype_4lxml_5etree_ElementClassLookup, 1, "lookup", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_4lxml_5etree_11_BaseParser_2setElementClassLookup(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_lookup);
 
   /* function exit code */
@@ -94129,27 +94225,27 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_2setElementClassLookup(stru
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("setElementClassLookup", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":910
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":930
  *     def setElementClassLookup(self, ElementClassLookup lookup = None):
  *         u":deprecated: use ``parser.set_element_class_lookup(lookup)`` instead."
  *         self.set_element_class_lookup(lookup)             # <<<<<<<<<<<<<<
  * 
  *     def set_element_class_lookup(self, ElementClassLookup lookup = None):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_element_class_lookup); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_set_element_class_lookup); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 930; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 930; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(((PyObject *)__pyx_v_lookup));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_lookup));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_lookup));
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 910; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 930; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":908
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":928
  *             return u"libxml2 %d.%d.%d" % LIBXML_VERSION
  * 
  *     def setElementClassLookup(self, ElementClassLookup lookup = None):             # <<<<<<<<<<<<<<
@@ -94172,7 +94268,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_2setElementClassLookup(stru
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":912
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":932
  *         self.set_element_class_lookup(lookup)
  * 
  *     def set_element_class_lookup(self, ElementClassLookup lookup = None):             # <<<<<<<<<<<<<<
@@ -94212,7 +94308,7 @@ static PyObject *__pyx_pw_4lxml_5etree_11_BaseParser_5set_element_class_lookup(P
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_element_class_lookup") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 912; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_element_class_lookup") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -94225,13 +94321,13 @@ static PyObject *__pyx_pw_4lxml_5etree_11_BaseParser_5set_element_class_lookup(P
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_element_class_lookup", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 912; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_element_class_lookup", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._BaseParser.set_element_class_lookup", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lookup), __pyx_ptype_4lxml_5etree_ElementClassLookup, 1, "lookup", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 912; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lookup), __pyx_ptype_4lxml_5etree_ElementClassLookup, 1, "lookup", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_4lxml_5etree_11_BaseParser_4set_element_class_lookup(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_lookup);
 
   /* function exit code */
@@ -94248,7 +94344,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_4set_element_class_lookup(s
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("set_element_class_lookup", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":919
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":939
  *         Reset it by passing None or nothing.
  *         """
  *         self._class_lookup = lookup             # <<<<<<<<<<<<<<
@@ -94261,7 +94357,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_4set_element_class_lookup(s
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_class_lookup));
   __pyx_v_self->_class_lookup = __pyx_v_lookup;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":912
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":932
  *         self.set_element_class_lookup(lookup)
  * 
  *     def set_element_class_lookup(self, ElementClassLookup lookup = None):             # <<<<<<<<<<<<<<
@@ -94276,7 +94372,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_4set_element_class_lookup(s
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":921
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":941
  *         self._class_lookup = lookup
  * 
  *     cdef _BaseParser _copy(self):             # <<<<<<<<<<<<<<
@@ -94297,23 +94393,23 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_copy", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":924
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":944
  *         u"Create a new parser with the same configuration."
  *         cdef _BaseParser parser
  *         parser = self.__class__()             # <<<<<<<<<<<<<<
  *         parser._parse_options = self._parse_options
  *         parser._for_html = self._for_html
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_class); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_4lxml_5etree__BaseParser))))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_4lxml_5etree__BaseParser))))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_parser = ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":925
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":945
  *         cdef _BaseParser parser
  *         parser = self.__class__()
  *         parser._parse_options = self._parse_options             # <<<<<<<<<<<<<<
@@ -94323,7 +94419,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_t_3 = __pyx_v_self->_parse_options;
   __pyx_v_parser->_parse_options = __pyx_t_3;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":926
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":946
  *         parser = self.__class__()
  *         parser._parse_options = self._parse_options
  *         parser._for_html = self._for_html             # <<<<<<<<<<<<<<
@@ -94333,7 +94429,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_t_4 = __pyx_v_self->_for_html;
   __pyx_v_parser->_for_html = __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":927
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":947
  *         parser._parse_options = self._parse_options
  *         parser._for_html = self._for_html
  *         parser._remove_comments = self._remove_comments             # <<<<<<<<<<<<<<
@@ -94343,7 +94439,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_t_4 = __pyx_v_self->_remove_comments;
   __pyx_v_parser->_remove_comments = __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":928
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":948
  *         parser._for_html = self._for_html
  *         parser._remove_comments = self._remove_comments
  *         parser._remove_pis = self._remove_pis             # <<<<<<<<<<<<<<
@@ -94353,7 +94449,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_t_4 = __pyx_v_self->_remove_pis;
   __pyx_v_parser->_remove_pis = __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":929
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":949
  *         parser._remove_comments = self._remove_comments
  *         parser._remove_pis = self._remove_pis
  *         parser._strip_cdata = self._strip_cdata             # <<<<<<<<<<<<<<
@@ -94363,7 +94459,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_t_4 = __pyx_v_self->_strip_cdata;
   __pyx_v_parser->_strip_cdata = __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":930
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":950
  *         parser._remove_pis = self._remove_pis
  *         parser._strip_cdata = self._strip_cdata
  *         parser._filename = self._filename             # <<<<<<<<<<<<<<
@@ -94378,7 +94474,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->_filename = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":931
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":951
  *         parser._strip_cdata = self._strip_cdata
  *         parser._filename = self._filename
  *         parser._resolvers = self._resolvers             # <<<<<<<<<<<<<<
@@ -94393,7 +94489,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->_resolvers = ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":932
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":952
  *         parser._filename = self._filename
  *         parser._resolvers = self._resolvers
  *         parser.target = self.target             # <<<<<<<<<<<<<<
@@ -94408,7 +94504,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->target = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":933
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":953
  *         parser._resolvers = self._resolvers
  *         parser.target = self.target
  *         parser._class_lookup  = self._class_lookup             # <<<<<<<<<<<<<<
@@ -94423,7 +94519,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->_class_lookup = ((struct LxmlElementClassLookup *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":934
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":954
  *         parser.target = self.target
  *         parser._class_lookup  = self._class_lookup
  *         parser._default_encoding = self._default_encoding             # <<<<<<<<<<<<<<
@@ -94438,7 +94534,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->_default_encoding = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":935
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":955
  *         parser._class_lookup  = self._class_lookup
  *         parser._default_encoding = self._default_encoding
  *         parser._schema = self._schema             # <<<<<<<<<<<<<<
@@ -94453,7 +94549,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->_schema = ((struct __pyx_obj_4lxml_5etree_XMLSchema *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":936
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":956
  *         parser._default_encoding = self._default_encoding
  *         parser._schema = self._schema
  *         parser._events_to_collect = self._events_to_collect             # <<<<<<<<<<<<<<
@@ -94468,7 +94564,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_v_parser->_events_to_collect = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":937
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":957
  *         parser._schema = self._schema
  *         parser._events_to_collect = self._events_to_collect
  *         return parser             # <<<<<<<<<<<<<<
@@ -94480,7 +94576,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   __pyx_r = __pyx_v_parser;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":921
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":941
  *         self._class_lookup = lookup
  * 
  *     cdef _BaseParser _copy(self):             # <<<<<<<<<<<<<<
@@ -94501,7 +94597,7 @@ static struct __pyx_obj_4lxml_5etree__BaseParser *__pyx_f_4lxml_5etree_11_BasePa
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":939
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":959
  *         return parser
  * 
  *     def copy(self):             # <<<<<<<<<<<<<<
@@ -94532,7 +94628,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_6copy(struct __pyx_obj_4lxm
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("copy", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":944
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":964
  *         Create a new parser with the same configuration.
  *         """
  *         return self._copy()             # <<<<<<<<<<<<<<
@@ -94540,13 +94636,13 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_6copy(struct __pyx_obj_4lxm
  *     def makeelement(self, _tag, attrib=None, nsmap=None, **_extra):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_copy(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 944; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_copy(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 964; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":939
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":959
  *         return parser
  * 
  *     def copy(self):             # <<<<<<<<<<<<<<
@@ -94565,7 +94661,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_6copy(struct __pyx_obj_4lxm
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":946
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":966
  *         return self._copy()
  * 
  *     def makeelement(self, _tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
@@ -94621,7 +94717,7 @@ static PyObject *__pyx_pw_4lxml_5etree_11_BaseParser_9makeelement(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "makeelement") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 946; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "makeelement") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -94638,7 +94734,7 @@ static PyObject *__pyx_pw_4lxml_5etree_11_BaseParser_9makeelement(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("makeelement", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 946; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("makeelement", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 966; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v__extra); __pyx_v__extra = 0;
   __Pyx_AddTraceback("lxml.etree._BaseParser.makeelement", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -94662,7 +94758,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_8makeelement(struct __pyx_o
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("makeelement", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":951
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":971
  *         Creates a new element associated with this parser.
  *         """
  *         return _makeElement(_tag, NULL, None, self, None, None,             # <<<<<<<<<<<<<<
@@ -94671,20 +94767,20 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_8makeelement(struct __pyx_o
  */
   __Pyx_XDECREF(__pyx_r);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":952
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":972
  *         """
  *         return _makeElement(_tag, NULL, None, self, None, None,
  *                             attrib, nsmap, _extra)             # <<<<<<<<<<<<<<
  * 
  *     # internal parser methods
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__makeElement(__pyx_v__tag, NULL, ((struct LxmlDocument *)Py_None), __pyx_v_self, Py_None, Py_None, __pyx_v_attrib, __pyx_v_nsmap, __pyx_v__extra)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 951; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__makeElement(__pyx_v__tag, NULL, ((struct LxmlDocument *)Py_None), __pyx_v_self, Py_None, Py_None, __pyx_v_attrib, __pyx_v_nsmap, __pyx_v__extra)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 971; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":946
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":966
  *         return self._copy()
  * 
  *     def makeelement(self, _tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
@@ -94703,7 +94799,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_8makeelement(struct __pyx_o
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":956
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":976
  *     # internal parser methods
  * 
  *     cdef xmlDoc* _parseUnicodeDoc(self, utext, char* c_filename) except NULL:             # <<<<<<<<<<<<<<
@@ -94745,7 +94841,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseUnicodeDoc", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":965
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":985
  *         cdef int buffer_len, c_kind
  *         cdef const_char* c_text
  *         cdef const_char* c_encoding = _UNICODE_ENCODING             # <<<<<<<<<<<<<<
@@ -94754,7 +94850,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
   __pyx_v_c_encoding = __pyx_v_4lxml_5etree__UNICODE_ENCODING;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":967
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":987
  *         cdef const_char* c_encoding = _UNICODE_ENCODING
  *         cdef bint is_pep393_string = (
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(utext))             # <<<<<<<<<<<<<<
@@ -94769,7 +94865,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
   }
   __pyx_v_is_pep393_string = __pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":968
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":988
  *         cdef bint is_pep393_string = (
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(utext))
  *         if is_pep393_string:             # <<<<<<<<<<<<<<
@@ -94779,7 +94875,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
   __pyx_t_2 = (__pyx_v_is_pep393_string != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":969
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":989
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(utext))
  *         if is_pep393_string:
  *             c_text = <const_char*>python.PyUnicode_DATA(utext)             # <<<<<<<<<<<<<<
@@ -94788,7 +94884,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
     __pyx_v_c_text = ((const char *)PyUnicode_DATA(__pyx_v_utext));
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":970
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":990
  *         if is_pep393_string:
  *             c_text = <const_char*>python.PyUnicode_DATA(utext)
  *             py_buffer_len = python.PyUnicode_GET_LENGTH(utext)             # <<<<<<<<<<<<<<
@@ -94797,7 +94893,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
     __pyx_v_py_buffer_len = PyUnicode_GET_LENGTH(__pyx_v_utext);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":971
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":991
  *             c_text = <const_char*>python.PyUnicode_DATA(utext)
  *             py_buffer_len = python.PyUnicode_GET_LENGTH(utext)
  *             c_kind = python.PyUnicode_KIND(utext)             # <<<<<<<<<<<<<<
@@ -94806,7 +94902,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
     __pyx_v_c_kind = PyUnicode_KIND(__pyx_v_utext);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":980
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1000
  *                 else:
  *                     c_encoding = 'UTF-16LE'  # actually UCS-2
  *             elif c_kind == 4:             # <<<<<<<<<<<<<<
@@ -94815,7 +94911,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
     switch (__pyx_v_c_kind) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":972
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":992
  *             py_buffer_len = python.PyUnicode_GET_LENGTH(utext)
  *             c_kind = python.PyUnicode_KIND(utext)
  *             if c_kind == 1:             # <<<<<<<<<<<<<<
@@ -94824,7 +94920,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
       case 1:
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":973
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":993
  *             c_kind = python.PyUnicode_KIND(utext)
  *             if c_kind == 1:
  *                 c_encoding = 'ISO-8859-1'             # <<<<<<<<<<<<<<
@@ -94834,7 +94930,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       __pyx_v_c_encoding = __pyx_k_ISO_8859_1;
       break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":974
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":994
  *             if c_kind == 1:
  *                 c_encoding = 'ISO-8859-1'
  *             elif c_kind == 2:             # <<<<<<<<<<<<<<
@@ -94843,7 +94939,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
       case 2:
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":975
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":995
  *                 c_encoding = 'ISO-8859-1'
  *             elif c_kind == 2:
  *                 py_buffer_len *= 2             # <<<<<<<<<<<<<<
@@ -94852,7 +94948,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
       __pyx_v_py_buffer_len = (__pyx_v_py_buffer_len * 2);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":976
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":996
  *             elif c_kind == 2:
  *                 py_buffer_len *= 2
  *                 if python.PY_BIG_ENDIAN:             # <<<<<<<<<<<<<<
@@ -94862,7 +94958,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       __pyx_t_2 = (PY_BIG_ENDIAN != 0);
       if (__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":977
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":997
  *                 py_buffer_len *= 2
  *                 if python.PY_BIG_ENDIAN:
  *                     c_encoding = 'UTF-16BE'  # actually UCS-2             # <<<<<<<<<<<<<<
@@ -94874,7 +94970,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       }
       /*else*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":979
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":999
  *                     c_encoding = 'UTF-16BE'  # actually UCS-2
  *                 else:
  *                     c_encoding = 'UTF-16LE'  # actually UCS-2             # <<<<<<<<<<<<<<
@@ -94886,7 +94982,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       __pyx_L4:;
       break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":980
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1000
  *                 else:
  *                     c_encoding = 'UTF-16LE'  # actually UCS-2
  *             elif c_kind == 4:             # <<<<<<<<<<<<<<
@@ -94895,7 +94991,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
       case 4:
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":981
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1001
  *                     c_encoding = 'UTF-16LE'  # actually UCS-2
  *             elif c_kind == 4:
  *                 py_buffer_len *= 4             # <<<<<<<<<<<<<<
@@ -94904,7 +95000,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
       __pyx_v_py_buffer_len = (__pyx_v_py_buffer_len * 4);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":982
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1002
  *             elif c_kind == 4:
  *                 py_buffer_len *= 4
  *                 if python.PY_BIG_ENDIAN:             # <<<<<<<<<<<<<<
@@ -94914,7 +95010,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       __pyx_t_2 = (PY_BIG_ENDIAN != 0);
       if (__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":983
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1003
  *                 py_buffer_len *= 4
  *                 if python.PY_BIG_ENDIAN:
  *                     c_encoding = 'UCS-4BE'             # <<<<<<<<<<<<<<
@@ -94926,7 +95022,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       }
       /*else*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":985
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1005
  *                     c_encoding = 'UCS-4BE'
  *                 else:
  *                     c_encoding = 'UCS-4LE'             # <<<<<<<<<<<<<<
@@ -94939,7 +95035,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       break;
       default:
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":987
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1007
  *                     c_encoding = 'UCS-4LE'
  *             else:
  *                 assert False, "Illegal Unicode kind %d" % c_kind             # <<<<<<<<<<<<<<
@@ -94949,14 +95045,14 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       #ifndef CYTHON_WITHOUT_ASSERTIONS
       if (unlikely(!Py_OptimizeFlag)) {
         if (unlikely(!0)) {
-          __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_c_kind); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_c_kind); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_3);
-          __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Illegal_Unicode_kind_d, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Illegal_Unicode_kind_d, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_4);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           PyErr_SetObject(PyExc_AssertionError, __pyx_t_4);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 987; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1007; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
       }
       #endif
@@ -94966,7 +95062,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":989
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1009
  *                 assert False, "Illegal Unicode kind %d" % c_kind
  *         else:
  *             py_buffer_len = python.PyUnicode_GET_DATA_SIZE(utext)             # <<<<<<<<<<<<<<
@@ -94975,7 +95071,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
     __pyx_v_py_buffer_len = PyUnicode_GET_DATA_SIZE(__pyx_v_utext);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":990
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1010
  *         else:
  *             py_buffer_len = python.PyUnicode_GET_DATA_SIZE(utext)
  *             c_text = python.PyUnicode_AS_DATA(utext)             # <<<<<<<<<<<<<<
@@ -94986,7 +95082,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":991
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1011
  *             py_buffer_len = python.PyUnicode_GET_DATA_SIZE(utext)
  *             c_text = python.PyUnicode_AS_DATA(utext)
  *         assert py_buffer_len <= limits.INT_MAX             # <<<<<<<<<<<<<<
@@ -94997,12 +95093,12 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_py_buffer_len <= INT_MAX) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 991; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1011; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
   }
   #endif
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":992
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1012
  *             c_text = python.PyUnicode_AS_DATA(utext)
  *         assert py_buffer_len <= limits.INT_MAX
  *         buffer_len = py_buffer_len             # <<<<<<<<<<<<<<
@@ -95011,28 +95107,28 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
   __pyx_v_buffer_len = __pyx_v_py_buffer_len;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":994
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1014
  *         buffer_len = py_buffer_len
  * 
  *         context = self._getParserContext()             # <<<<<<<<<<<<<<
  *         context.prepare()
  *         try:
  */
-  __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 994; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1014; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":995
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1015
  * 
  *         context = self._getParserContext()
  *         context.prepare()             # <<<<<<<<<<<<<<
  *         try:
  *             pctxt = context._c_ctxt
  */
-  __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1015; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":996
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1016
  *         context = self._getParserContext()
  *         context.prepare()
  *         try:             # <<<<<<<<<<<<<<
@@ -95041,7 +95137,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
   /*try:*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":997
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1017
  *         context.prepare()
  *         try:
  *             pctxt = context._c_ctxt             # <<<<<<<<<<<<<<
@@ -95051,7 +95147,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
     __pyx_t_6 = __pyx_v_context->_c_ctxt;
     __pyx_v_pctxt = __pyx_t_6;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":998
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1018
  *         try:
  *             pctxt = context._c_ctxt
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)             # <<<<<<<<<<<<<<
@@ -95060,7 +95156,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
     __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_pctxt);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":999
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1019
  *             pctxt = context._c_ctxt
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  *             orig_options = pctxt.options             # <<<<<<<<<<<<<<
@@ -95070,7 +95166,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
     __pyx_t_5 = __pyx_v_pctxt->options;
     __pyx_v_orig_options = __pyx_t_5;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1000
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1020
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  *             orig_options = pctxt.options
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -95084,7 +95180,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
         #endif
         /*try:*/ {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1001
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1021
  *             orig_options = pctxt.options
  *             with nogil:
  *                 if self._for_html:             # <<<<<<<<<<<<<<
@@ -95094,7 +95190,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
           __pyx_t_2 = (__pyx_v_self->_for_html != 0);
           if (__pyx_t_2) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1002
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1022
  *             with nogil:
  *                 if self._for_html:
  *                     result = htmlparser.htmlCtxtReadMemory(             # <<<<<<<<<<<<<<
@@ -95103,7 +95199,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
             __pyx_v_result = htmlCtxtReadMemory(__pyx_v_pctxt, __pyx_v_c_text, __pyx_v_buffer_len, __pyx_v_c_filename, __pyx_v_c_encoding, __pyx_v_self->_parse_options);
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1005
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1025
  *                         pctxt, c_text, buffer_len, c_filename, c_encoding,
  *                         self._parse_options)
  *                     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -95113,7 +95209,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
             __pyx_t_2 = ((__pyx_v_result != NULL) != 0);
             if (__pyx_t_2) {
 
-              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1006
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1026
  *                         self._parse_options)
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:             # <<<<<<<<<<<<<<
@@ -95123,7 +95219,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
               __pyx_t_2 = ((__pyx_f_4lxml_5etree__fixHtmlDictNames(__pyx_v_pctxt->dict, __pyx_v_result) < 0) != 0);
               if (__pyx_t_2) {
 
-                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1007
+                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1027
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:
  *                             tree.xmlFreeDoc(result)             # <<<<<<<<<<<<<<
@@ -95132,7 +95228,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
                 xmlFreeDoc(__pyx_v_result);
 
-                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1008
+                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1028
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:
  *                             tree.xmlFreeDoc(result)
  *                             result = NULL             # <<<<<<<<<<<<<<
@@ -95150,7 +95246,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
           }
           /*else*/ {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1010
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1030
  *                             result = NULL
  *                 else:
  *                     result = xmlparser.xmlCtxtReadMemory(             # <<<<<<<<<<<<<<
@@ -95162,7 +95258,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
           __pyx_L12:;
         }
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1000
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1020
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  *             orig_options = pctxt.options
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -95180,7 +95276,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
         }
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1013
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1033
  *                         pctxt, c_text, buffer_len, c_filename, c_encoding,
  *                         self._parse_options)
  *             pctxt.options = orig_options # work around libxml2 problem             # <<<<<<<<<<<<<<
@@ -95189,19 +95285,19 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
  */
     __pyx_v_pctxt->options = __pyx_v_orig_options;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1015
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1035
  *             pctxt.options = orig_options # work around libxml2 problem
  * 
  *             return context._handleParseResultDoc(self, result, None)             # <<<<<<<<<<<<<<
  *         finally:
  *             context.cleanup()
  */
-    __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, Py_None); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1015; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+    __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, Py_None); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
     __pyx_r = __pyx_t_7;
     goto __pyx_L6_return;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1017
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1037
  *             return context._handleParseResultDoc(self, result, None)
  *         finally:
  *             context.cleanup()             # <<<<<<<<<<<<<<
@@ -95224,7 +95320,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
       __Pyx_XGOTREF(__pyx_t_15);
       __pyx_t_5 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
       {
-        __pyx_t_16 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_16 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1017; __pyx_clineno = __LINE__; goto __pyx_L16_error;}
+        __pyx_t_16 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_16 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L16_error;}
       }
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_13);
@@ -95254,13 +95350,13 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
     }
     __pyx_L6_return: {
       __pyx_t_7 = __pyx_r;
-      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1017; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1037; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_r = __pyx_t_7;
       goto __pyx_L0;
     }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":956
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":976
  *     # internal parser methods
  * 
  *     cdef xmlDoc* _parseUnicodeDoc(self, utext, char* c_filename) except NULL:             # <<<<<<<<<<<<<<
@@ -95280,7 +95376,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc(struct __pyx_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1019
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1039
  *             context.cleanup()
  * 
  *     cdef xmlDoc* _parseDoc(self, char* c_text, int c_len,             # <<<<<<<<<<<<<<
@@ -95316,28 +95412,28 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseDoc", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1027
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1047
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         cdef char* c_encoding
  *         context = self._getParserContext()             # <<<<<<<<<<<<<<
  *         context.prepare()
  *         try:
  */
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1028
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1048
  *         cdef char* c_encoding
  *         context = self._getParserContext()
  *         context.prepare()             # <<<<<<<<<<<<<<
  *         try:
  *             pctxt = context._c_ctxt
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1028; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1048; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1029
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1049
  *         context = self._getParserContext()
  *         context.prepare()
  *         try:             # <<<<<<<<<<<<<<
@@ -95346,7 +95442,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
   /*try:*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1030
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1050
  *         context.prepare()
  *         try:
  *             pctxt = context._c_ctxt             # <<<<<<<<<<<<<<
@@ -95356,7 +95452,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
     __pyx_t_3 = __pyx_v_context->_c_ctxt;
     __pyx_v_pctxt = __pyx_t_3;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1031
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1051
  *         try:
  *             pctxt = context._c_ctxt
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)             # <<<<<<<<<<<<<<
@@ -95365,7 +95461,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
     __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_pctxt);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1033
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1053
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  * 
  *             if self._default_encoding is None:             # <<<<<<<<<<<<<<
@@ -95376,7 +95472,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
     __pyx_t_5 = (__pyx_t_4 != 0);
     if (__pyx_t_5) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1034
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1054
  * 
  *             if self._default_encoding is None:
  *                 c_encoding = NULL             # <<<<<<<<<<<<<<
@@ -95388,7 +95484,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1036
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1056
  *                 c_encoding = NULL
  *             else:
  *                 c_encoding = _cstr(self._default_encoding)             # <<<<<<<<<<<<<<
@@ -95402,7 +95498,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
     }
     __pyx_L6:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1038
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1058
  *                 c_encoding = _cstr(self._default_encoding)
  * 
  *             orig_options = pctxt.options             # <<<<<<<<<<<<<<
@@ -95412,7 +95508,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
     __pyx_t_2 = __pyx_v_pctxt->options;
     __pyx_v_orig_options = __pyx_t_2;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1039
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1059
  * 
  *             orig_options = pctxt.options
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -95426,7 +95522,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
         #endif
         /*try:*/ {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1040
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1060
  *             orig_options = pctxt.options
  *             with nogil:
  *                 if self._for_html:             # <<<<<<<<<<<<<<
@@ -95436,7 +95532,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
           __pyx_t_5 = (__pyx_v_self->_for_html != 0);
           if (__pyx_t_5) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1041
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1061
  *             with nogil:
  *                 if self._for_html:
  *                     result = htmlparser.htmlCtxtReadMemory(             # <<<<<<<<<<<<<<
@@ -95445,7 +95541,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
             __pyx_v_result = htmlCtxtReadMemory(__pyx_v_pctxt, __pyx_v_c_text, __pyx_v_c_len, __pyx_v_c_filename, __pyx_v_c_encoding, __pyx_v_self->_parse_options);
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1044
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1064
  *                         pctxt, c_text, c_len, c_filename,
  *                         c_encoding, self._parse_options)
  *                     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -95455,7 +95551,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
             __pyx_t_5 = ((__pyx_v_result != NULL) != 0);
             if (__pyx_t_5) {
 
-              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1045
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1065
  *                         c_encoding, self._parse_options)
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:             # <<<<<<<<<<<<<<
@@ -95465,7 +95561,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
               __pyx_t_5 = ((__pyx_f_4lxml_5etree__fixHtmlDictNames(__pyx_v_pctxt->dict, __pyx_v_result) < 0) != 0);
               if (__pyx_t_5) {
 
-                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1046
+                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1066
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:
  *                             tree.xmlFreeDoc(result)             # <<<<<<<<<<<<<<
@@ -95474,7 +95570,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
                 xmlFreeDoc(__pyx_v_result);
 
-                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1047
+                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1067
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:
  *                             tree.xmlFreeDoc(result)
  *                             result = NULL             # <<<<<<<<<<<<<<
@@ -95492,7 +95588,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
           }
           /*else*/ {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1049
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1069
  *                             result = NULL
  *                 else:
  *                     result = xmlparser.xmlCtxtReadMemory(             # <<<<<<<<<<<<<<
@@ -95504,7 +95600,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
           __pyx_L10:;
         }
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1039
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1059
  * 
  *             orig_options = pctxt.options
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -95522,7 +95618,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
         }
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1052
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1072
  *                         pctxt, c_text, c_len, c_filename,
  *                         c_encoding, self._parse_options)
  *             pctxt.options = orig_options # work around libxml2 problem             # <<<<<<<<<<<<<<
@@ -95531,19 +95627,19 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
  */
     __pyx_v_pctxt->options = __pyx_v_orig_options;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1054
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1074
  *             pctxt.options = orig_options # work around libxml2 problem
  * 
  *             return context._handleParseResultDoc(self, result, None)             # <<<<<<<<<<<<<<
  *         finally:
  *             context.cleanup()
  */
-    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, Py_None); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1054; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, Py_None); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1074; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
     __pyx_r = __pyx_t_6;
     goto __pyx_L3_return;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1056
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1076
  *             return context._handleParseResultDoc(self, result, None)
  *         finally:
  *             context.cleanup()             # <<<<<<<<<<<<<<
@@ -95565,7 +95661,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
       __Pyx_XGOTREF(__pyx_t_14);
       __pyx_t_2 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
       {
-        __pyx_t_15 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
+        __pyx_t_15 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1076; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
       }
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_12);
@@ -95595,13 +95691,13 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
     }
     __pyx_L3_return: {
       __pyx_t_6 = __pyx_r;
-      __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1076; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_r = __pyx_t_6;
       goto __pyx_L0;
     }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1019
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1039
  *             context.cleanup()
  * 
  *     cdef xmlDoc* _parseDoc(self, char* c_text, int c_len,             # <<<<<<<<<<<<<<
@@ -95620,7 +95716,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDoc(struct __pyx_obj_4lx
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1058
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1078
  *             context.cleanup()
  * 
  *     cdef xmlDoc* _parseDocFromFile(self, char* c_filename) except NULL:             # <<<<<<<<<<<<<<
@@ -95656,7 +95752,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseDocFromFile", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1063
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1083
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         cdef char* c_encoding
  *         result = NULL             # <<<<<<<<<<<<<<
@@ -95665,28 +95761,28 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
   __pyx_v_result = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1065
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1085
  *         result = NULL
  * 
  *         context = self._getParserContext()             # <<<<<<<<<<<<<<
  *         context.prepare()
  *         try:
  */
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1065; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1085; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1066
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1086
  * 
  *         context = self._getParserContext()
  *         context.prepare()             # <<<<<<<<<<<<<<
  *         try:
  *             pctxt = context._c_ctxt
  */
-  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1066; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1086; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1067
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1087
  *         context = self._getParserContext()
  *         context.prepare()
  *         try:             # <<<<<<<<<<<<<<
@@ -95695,7 +95791,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
   /*try:*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1068
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1088
  *         context.prepare()
  *         try:
  *             pctxt = context._c_ctxt             # <<<<<<<<<<<<<<
@@ -95705,7 +95801,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
     __pyx_t_3 = __pyx_v_context->_c_ctxt;
     __pyx_v_pctxt = __pyx_t_3;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1069
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1089
  *         try:
  *             pctxt = context._c_ctxt
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)             # <<<<<<<<<<<<<<
@@ -95714,7 +95810,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
     __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_pctxt);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1071
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1091
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  * 
  *             if self._default_encoding is None:             # <<<<<<<<<<<<<<
@@ -95725,7 +95821,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
     __pyx_t_5 = (__pyx_t_4 != 0);
     if (__pyx_t_5) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1072
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1092
  * 
  *             if self._default_encoding is None:
  *                 c_encoding = NULL             # <<<<<<<<<<<<<<
@@ -95737,7 +95833,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1074
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1094
  *                 c_encoding = NULL
  *             else:
  *                 c_encoding = _cstr(self._default_encoding)             # <<<<<<<<<<<<<<
@@ -95751,7 +95847,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
     }
     __pyx_L6:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1076
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1096
  *                 c_encoding = _cstr(self._default_encoding)
  * 
  *             orig_options = pctxt.options             # <<<<<<<<<<<<<<
@@ -95761,7 +95857,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
     __pyx_t_2 = __pyx_v_pctxt->options;
     __pyx_v_orig_options = __pyx_t_2;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1077
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1097
  * 
  *             orig_options = pctxt.options
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -95775,7 +95871,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
         #endif
         /*try:*/ {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1078
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1098
  *             orig_options = pctxt.options
  *             with nogil:
  *                 if self._for_html:             # <<<<<<<<<<<<<<
@@ -95785,7 +95881,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
           __pyx_t_5 = (__pyx_v_self->_for_html != 0);
           if (__pyx_t_5) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1079
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1099
  *             with nogil:
  *                 if self._for_html:
  *                     result = htmlparser.htmlCtxtReadFile(             # <<<<<<<<<<<<<<
@@ -95794,7 +95890,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
             __pyx_v_result = htmlCtxtReadFile(__pyx_v_pctxt, __pyx_v_c_filename, __pyx_v_c_encoding, __pyx_v_self->_parse_options);
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1081
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1101
  *                     result = htmlparser.htmlCtxtReadFile(
  *                         pctxt, c_filename, c_encoding, self._parse_options)
  *                     if result is not NULL:             # <<<<<<<<<<<<<<
@@ -95804,7 +95900,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
             __pyx_t_5 = ((__pyx_v_result != NULL) != 0);
             if (__pyx_t_5) {
 
-              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1082
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1102
  *                         pctxt, c_filename, c_encoding, self._parse_options)
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:             # <<<<<<<<<<<<<<
@@ -95814,7 +95910,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
               __pyx_t_5 = ((__pyx_f_4lxml_5etree__fixHtmlDictNames(__pyx_v_pctxt->dict, __pyx_v_result) < 0) != 0);
               if (__pyx_t_5) {
 
-                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1083
+                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1103
  *                     if result is not NULL:
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:
  *                             tree.xmlFreeDoc(result)             # <<<<<<<<<<<<<<
@@ -95823,7 +95919,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
                 xmlFreeDoc(__pyx_v_result);
 
-                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1084
+                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1104
  *                         if _fixHtmlDictNames(pctxt.dict, result) < 0:
  *                             tree.xmlFreeDoc(result)
  *                             result = NULL             # <<<<<<<<<<<<<<
@@ -95841,7 +95937,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
           }
           /*else*/ {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1086
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1106
  *                             result = NULL
  *                 else:
  *                     result = xmlparser.xmlCtxtReadFile(             # <<<<<<<<<<<<<<
@@ -95853,7 +95949,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
           __pyx_L10:;
         }
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1077
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1097
  * 
  *             orig_options = pctxt.options
  *             with nogil:             # <<<<<<<<<<<<<<
@@ -95871,7 +95967,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
         }
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1088
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1108
  *                     result = xmlparser.xmlCtxtReadFile(
  *                         pctxt, c_filename, c_encoding, self._parse_options)
  *             pctxt.options = orig_options # work around libxml2 problem             # <<<<<<<<<<<<<<
@@ -95880,22 +95976,22 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
  */
     __pyx_v_pctxt->options = __pyx_v_orig_options;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1090
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1110
  *             pctxt.options = orig_options # work around libxml2 problem
  * 
  *             return context._handleParseResultDoc(self, result, c_filename)             # <<<<<<<<<<<<<<
  *         finally:
  *             context.cleanup()
  */
-    __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_c_filename); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1090; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_c_filename); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1090; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+    __pyx_t_6 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, __pyx_t_1); if (unlikely(__pyx_t_6 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1110; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_r = __pyx_t_6;
     goto __pyx_L3_return;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1092
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1112
  *             return context._handleParseResultDoc(self, result, c_filename)
  *         finally:
  *             context.cleanup()             # <<<<<<<<<<<<<<
@@ -95917,7 +96013,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
       __Pyx_XGOTREF(__pyx_t_14);
       __pyx_t_2 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_8 = __pyx_filename;
       {
-        __pyx_t_15 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1092; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
+        __pyx_t_15 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L14_error;}
       }
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_12);
@@ -95947,13 +96043,13 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
     }
     __pyx_L3_return: {
       __pyx_t_6 = __pyx_r;
-      __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1092; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1112; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_r = __pyx_t_6;
       goto __pyx_L0;
     }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1058
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1078
  *             context.cleanup()
  * 
  *     cdef xmlDoc* _parseDocFromFile(self, char* c_filename) except NULL:             # <<<<<<<<<<<<<<
@@ -95972,7 +96068,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile(struct __pyx
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1094
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1114
  *             context.cleanup()
  * 
  *     cdef xmlDoc* _parseDocFromFilelike(self, filelike, filename,             # <<<<<<<<<<<<<<
@@ -96009,18 +96105,18 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
   __Pyx_RefNannySetupContext("_parseDocFromFilelike", 0);
   __Pyx_INCREF(__pyx_v_filename);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1101
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1121
  *         cdef xmlparser.xmlParserCtxt* pctxt
  *         cdef char* c_filename
  *         if not filename:             # <<<<<<<<<<<<<<
  *             filename = None
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_filename); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_filename); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1121; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1102
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1122
  *         cdef char* c_filename
  *         if not filename:
  *             filename = None             # <<<<<<<<<<<<<<
@@ -96033,28 +96129,28 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1104
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1124
  *             filename = None
  * 
  *         context = self._getParserContext()             # <<<<<<<<<<<<<<
  *         context.prepare()
  *         try:
  */
-  __pyx_t_3 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1104; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)__pyx_v_self->__pyx_vtab)->_getParserContext(__pyx_v_self)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1124; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1105
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1125
  * 
  *         context = self._getParserContext()
  *         context.prepare()             # <<<<<<<<<<<<<<
  *         try:
  *             pctxt = context._c_ctxt
  */
-  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1106
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1126
  *         context = self._getParserContext()
  *         context.prepare()
  *         try:             # <<<<<<<<<<<<<<
@@ -96063,7 +96159,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
  */
   /*try:*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1107
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1127
  *         context.prepare()
  *         try:
  *             pctxt = context._c_ctxt             # <<<<<<<<<<<<<<
@@ -96073,7 +96169,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
     __pyx_t_5 = __pyx_v_context->_c_ctxt;
     __pyx_v_pctxt = __pyx_t_5;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1108
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1128
  *         try:
  *             pctxt = context._c_ctxt
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)             # <<<<<<<<<<<<<<
@@ -96082,14 +96178,14 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
  */
     __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_pctxt);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1111
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1131
  *             file_context = _FileReaderContext(
  *                 filelike, context, filename,
  *                 encoding or self._default_encoding)             # <<<<<<<<<<<<<<
  *             result = file_context._readDoc(pctxt, self._parse_options)
  * 
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_encoding); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1111; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_encoding); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1131; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     if (!__pyx_t_2) {
       __Pyx_INCREF(__pyx_v_self->_default_encoding);
       __pyx_t_3 = __pyx_v_self->_default_encoding;
@@ -96098,14 +96194,14 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
       __pyx_t_3 = __pyx_v_encoding;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1109
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1129
  *             pctxt = context._c_ctxt
  *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  *             file_context = _FileReaderContext(             # <<<<<<<<<<<<<<
  *                 filelike, context, filename,
  *                 encoding or self._default_encoding)
  */
-    __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1109; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_filelike);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_filelike);
@@ -96119,13 +96215,13 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
     PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FileReaderContext)), __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1109; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FileReaderContext)), __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1129; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_v_file_context = ((struct __pyx_obj_4lxml_5etree__FileReaderContext *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1112
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1132
  *                 filelike, context, filename,
  *                 encoding or self._default_encoding)
  *             result = file_context._readDoc(pctxt, self._parse_options)             # <<<<<<<<<<<<<<
@@ -96134,19 +96230,19 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
  */
     __pyx_v_result = __pyx_f_4lxml_5etree_18_FileReaderContext__readDoc(__pyx_v_file_context, __pyx_v_pctxt, __pyx_v_self->_parse_options);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1114
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1134
  *             result = file_context._readDoc(pctxt, self._parse_options)
  * 
  *             return context._handleParseResultDoc(             # <<<<<<<<<<<<<<
  *                 self, result, filename)
  *         finally:
  */
-    __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, __pyx_v_filename); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1114; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+    __pyx_t_7 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResultDoc(__pyx_v_context, __pyx_v_self, __pyx_v_result, __pyx_v_filename); if (unlikely(__pyx_t_7 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1134; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
     __pyx_r = __pyx_t_7;
     goto __pyx_L4_return;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1117
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1137
  *                 self, result, filename)
  *         finally:
  *             context.cleanup()             # <<<<<<<<<<<<<<
@@ -96169,7 +96265,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
       __Pyx_XGOTREF(__pyx_t_15);
       __pyx_t_4 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
       {
-        __pyx_t_16 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_16 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1117; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+        __pyx_t_16 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_16 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1137; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
       }
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_13);
@@ -96199,13 +96295,13 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
     }
     __pyx_L4_return: {
       __pyx_t_7 = __pyx_r;
-      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1117; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_r = __pyx_t_7;
       goto __pyx_L0;
     }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1094
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1114
  *             context.cleanup()
  * 
  *     cdef xmlDoc* _parseDocFromFilelike(self, filelike, filename,             # <<<<<<<<<<<<<<
@@ -96227,7 +96323,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike(struct _
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":745
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":765
  *     cdef XMLSchema _schema
  *     cdef bytes _filename
  *     cdef readonly object target             # <<<<<<<<<<<<<<
@@ -96264,7 +96360,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_BaseParser_6target___get__(struct __py
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1132
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1152
  *         different from what the ``error_log`` property returns.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -96295,7 +96391,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_14feed_error_log___get__(st
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1133
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1153
  *         """
  *         def __get__(self):
  *             return self._getPushParserContext()._error_log.copy()             # <<<<<<<<<<<<<<
@@ -96303,16 +96399,16 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_14feed_error_log___get__(st
  *     cpdef feed(self, data):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1)->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.copy(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1)->_error_log), 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1133; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ErrorLog *)((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1)->_error_log->__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.copy(((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1)->_error_log), 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1132
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1152
  *         different from what the ``error_log`` property returns.
  *         """
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -96332,7 +96428,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_14feed_error_log___get__(st
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1135
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1155
  *             return self._getPushParserContext()._error_log.copy()
  * 
  *     cpdef feed(self, data):             # <<<<<<<<<<<<<<
@@ -96351,6 +96447,8 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   int __pyx_v_error;
   int __pyx_v_recover;
   char *__pyx_v_c_filename;
+  long __pyx_v_fixup_error;
+  xmlNode *__pyx_v_c_node;
   PyObject *__pyx_v_entry = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -96364,18 +96462,21 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   int __pyx_t_8;
   char *__pyx_t_9;
   int __pyx_t_10;
-  Py_ssize_t __pyx_t_11;
-  PyObject *(*__pyx_t_12)(PyObject *);
-  PyObject *__pyx_t_13 = NULL;
-  int __pyx_t_14;
-  char const *__pyx_t_15;
+  int __pyx_t_11;
+  xmlNode *__pyx_t_12;
+  xmlDict *__pyx_t_13;
+  Py_ssize_t __pyx_t_14;
+  PyObject *(*__pyx_t_15)(PyObject *);
   PyObject *__pyx_t_16 = NULL;
-  PyObject *__pyx_t_17 = NULL;
-  PyObject *__pyx_t_18 = NULL;
+  int __pyx_t_17;
+  char const *__pyx_t_18;
   PyObject *__pyx_t_19 = NULL;
   PyObject *__pyx_t_20 = NULL;
   PyObject *__pyx_t_21 = NULL;
-  int __pyx_t_22;
+  PyObject *__pyx_t_22 = NULL;
+  PyObject *__pyx_t_23 = NULL;
+  PyObject *__pyx_t_24 = NULL;
+  int __pyx_t_25;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -96384,16 +96485,16 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_feed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_feed); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4lxml_5etree_11_FeedParser_1feed)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_INCREF(__pyx_v_data);
       PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_data);
       __Pyx_GIVEREF(__pyx_v_data);
-      __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_r = __pyx_t_3;
@@ -96404,7 +96505,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1160
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1180
  *         cdef int buffer_len
  *         cdef int error
  *         cdef bint recover = self._parse_options & xmlparser.XML_PARSE_RECOVER             # <<<<<<<<<<<<<<
@@ -96413,7 +96514,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
   __pyx_v_recover = (__pyx_v_self->__pyx_base._parse_options & XML_PARSE_RECOVER);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1161
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1181
  *         cdef int error
  *         cdef bint recover = self._parse_options & xmlparser.XML_PARSE_RECOVER
  *         if isinstance(data, bytes):             # <<<<<<<<<<<<<<
@@ -96424,7 +96525,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1162
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1182
  *         cdef bint recover = self._parse_options & xmlparser.XML_PARSE_RECOVER
  *         if isinstance(data, bytes):
  *             if self._default_encoding is None:             # <<<<<<<<<<<<<<
@@ -96435,7 +96536,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     __pyx_t_4 = (__pyx_t_5 != 0);
     if (__pyx_t_4) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1163
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1183
  *         if isinstance(data, bytes):
  *             if self._default_encoding is None:
  *                 c_encoding = NULL             # <<<<<<<<<<<<<<
@@ -96447,19 +96548,19 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1165
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1185
  *                 c_encoding = NULL
  *             else:
  *                 c_encoding = self._default_encoding             # <<<<<<<<<<<<<<
  *             c_data = _cstr(data)
  *             py_buffer_len = python.PyBytes_GET_SIZE(data)
  */
-      __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_self->__pyx_base._default_encoding); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_AsString(__pyx_v_self->__pyx_base._default_encoding); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_v_c_encoding = __pyx_t_6;
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1166
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1186
  *             else:
  *                 c_encoding = self._default_encoding
  *             c_data = _cstr(data)             # <<<<<<<<<<<<<<
@@ -96468,7 +96569,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_c_data = PyBytes_AS_STRING(__pyx_v_data);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1167
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1187
  *                 c_encoding = self._default_encoding
  *             c_data = _cstr(data)
  *             py_buffer_len = python.PyBytes_GET_SIZE(data)             # <<<<<<<<<<<<<<
@@ -96479,7 +96580,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     goto __pyx_L3;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1168
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1188
  *             c_data = _cstr(data)
  *             py_buffer_len = python.PyBytes_GET_SIZE(data)
  *         elif isinstance(data, unicode):             # <<<<<<<<<<<<<<
@@ -96490,7 +96591,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1169
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1189
  *             py_buffer_len = python.PyBytes_GET_SIZE(data)
  *         elif isinstance(data, unicode):
  *             if _UNICODE_ENCODING is NULL:             # <<<<<<<<<<<<<<
@@ -96500,21 +96601,21 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     __pyx_t_5 = ((__pyx_v_4lxml_5etree__UNICODE_ENCODING == NULL) != 0);
     if (__pyx_t_5) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1170
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1190
  *         elif isinstance(data, unicode):
  *             if _UNICODE_ENCODING is NULL:
  *                 raise ParserError, \             # <<<<<<<<<<<<<<
  *                     u"Unicode parsing is not supported on this platform"
  *             c_encoding = _UNICODE_ENCODING
  */
-      __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_ParserError); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_ParserError); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_Raise(__pyx_t_1, __pyx_kp_u_Unicode_parsing_is_not_supported, 0, 0);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1172
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1192
  *                 raise ParserError, \
  *                     u"Unicode parsing is not supported on this platform"
  *             c_encoding = _UNICODE_ENCODING             # <<<<<<<<<<<<<<
@@ -96523,7 +96624,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_c_encoding = __pyx_v_4lxml_5etree__UNICODE_ENCODING;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1173
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1193
  *                     u"Unicode parsing is not supported on this platform"
  *             c_encoding = _UNICODE_ENCODING
  *             c_data = python.PyUnicode_AS_DATA(data)             # <<<<<<<<<<<<<<
@@ -96532,7 +96633,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     __pyx_v_c_data = PyUnicode_AS_DATA(__pyx_v_data);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1174
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1194
  *             c_encoding = _UNICODE_ENCODING
  *             c_data = python.PyUnicode_AS_DATA(data)
  *             py_buffer_len = python.PyUnicode_GET_DATA_SIZE(data)             # <<<<<<<<<<<<<<
@@ -96544,7 +96645,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1176
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1196
  *             py_buffer_len = python.PyUnicode_GET_DATA_SIZE(data)
  *         else:
  *             raise TypeError, u"Parsing requires string data"             # <<<<<<<<<<<<<<
@@ -96552,23 +96653,23 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  *         context = self._getPushParserContext()
  */
     __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_u_Parsing_requires_string_data, 0, 0);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1196; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1178
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1198
  *             raise TypeError, u"Parsing requires string data"
  * 
  *         context = self._getPushParserContext()             # <<<<<<<<<<<<<<
  *         pctxt = context._c_ctxt
  *         error = 0
  */
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1198; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1179
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1199
  * 
  *         context = self._getPushParserContext()
  *         pctxt = context._c_ctxt             # <<<<<<<<<<<<<<
@@ -96578,7 +96679,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   __pyx_t_7 = __pyx_v_context->_c_ctxt;
   __pyx_v_pctxt = __pyx_t_7;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1180
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1200
  *         context = self._getPushParserContext()
  *         pctxt = context._c_ctxt
  *         error = 0             # <<<<<<<<<<<<<<
@@ -96587,7 +96688,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
   __pyx_v_error = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1181
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1201
  *         pctxt = context._c_ctxt
  *         error = 0
  *         if not self._feed_parser_running:             # <<<<<<<<<<<<<<
@@ -96597,49 +96698,40 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   __pyx_t_5 = ((!(__pyx_v_self->_feed_parser_running != 0)) != 0);
   if (__pyx_t_5) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1182
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1202
  *         error = 0
  *         if not self._feed_parser_running:
  *             context.prepare()             # <<<<<<<<<<<<<<
  *             self._feed_parser_running = 1
- *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
+ *             c_filename = (_cstr(self._filename)
  */
-    __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->prepare(__pyx_v_context); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1183
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1203
  *         if not self._feed_parser_running:
  *             context.prepare()
  *             self._feed_parser_running = 1             # <<<<<<<<<<<<<<
- *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  *             c_filename = (_cstr(self._filename)
+ *                           if self._filename is not None else NULL)
  */
     __pyx_v_self->_feed_parser_running = 1;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1184
- *             context.prepare()
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1205
  *             self._feed_parser_running = 1
- *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)             # <<<<<<<<<<<<<<
- *             c_filename = (_cstr(self._filename)
- *                           if self._filename is not None else NULL)
- */
-    __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_pctxt);
-
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1186
- *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  *             c_filename = (_cstr(self._filename)
  *                           if self._filename is not None else NULL)             # <<<<<<<<<<<<<<
- *             if self._for_html:
- *                 error = _htmlCtxtResetPush(
+ * 
+ *             if c_encoding is NULL and py_buffer_len >= 2:
  */
     __pyx_t_5 = (__pyx_v_self->__pyx_base._filename != ((PyObject*)Py_None));
     if ((__pyx_t_5 != 0)) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1185
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1204
+ *             context.prepare()
  *             self._feed_parser_running = 1
- *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
  *             c_filename = (_cstr(self._filename)             # <<<<<<<<<<<<<<
  *                           if self._filename is not None else NULL)
- *             if self._for_html:
+ * 
  */
       __pyx_t_1 = __pyx_v_self->__pyx_base._filename;
       __Pyx_INCREF(__pyx_t_1);
@@ -96647,20 +96739,204 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     } else {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1186
- *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1205
+ *             self._feed_parser_running = 1
  *             c_filename = (_cstr(self._filename)
  *                           if self._filename is not None else NULL)             # <<<<<<<<<<<<<<
- *             if self._for_html:
- *                 error = _htmlCtxtResetPush(
+ * 
+ *             if c_encoding is NULL and py_buffer_len >= 2:
  */
       __pyx_t_9 = NULL;
     }
     __pyx_v_c_filename = __pyx_t_9;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1187
- *             c_filename = (_cstr(self._filename)
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1207
  *                           if self._filename is not None else NULL)
+ * 
+ *             if c_encoding is NULL and py_buffer_len >= 2:             # <<<<<<<<<<<<<<
+ *                 # libxml2 can't handle BOMs here, so let's try ourselves
+ *                 if c_data[0] in b'\xfe\xef\xff':
+ */
+    __pyx_t_5 = ((__pyx_v_c_encoding == NULL) != 0);
+    if (__pyx_t_5) {
+      __pyx_t_4 = ((__pyx_v_py_buffer_len >= 2) != 0);
+      __pyx_t_10 = __pyx_t_4;
+    } else {
+      __pyx_t_10 = __pyx_t_5;
+    }
+    if (__pyx_t_10) {
+
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1209
+ *             if c_encoding is NULL and py_buffer_len >= 2:
+ *                 # libxml2 can't handle BOMs here, so let's try ourselves
+ *                 if c_data[0] in b'\xfe\xef\xff':             # <<<<<<<<<<<<<<
+ *                     # likely a BOM, let's take a closer look
+ *                     c_encoding = _findEncodingName(
+ */
+      switch ((__pyx_v_c_data[0])) {
+        case '\xEF':
+        case '\xFE':
+        case '\xFF':
+
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1213
+ *                     c_encoding = _findEncodingName(
+ *                         <const_xmlChar*>c_data,
+ *                         4 if py_buffer_len > 4 else <int>py_buffer_len)             # <<<<<<<<<<<<<<
+ *                     if c_encoding is not NULL:
+ *                         # found it => skip over BOM (if there is one)
+ */
+        if (((__pyx_v_py_buffer_len > 4) != 0)) {
+          __pyx_t_8 = 4;
+        } else {
+          __pyx_t_8 = ((int)__pyx_v_py_buffer_len);
+        }
+
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1211
+ *                 if c_data[0] in b'\xfe\xef\xff':
+ *                     # likely a BOM, let's take a closer look
+ *                     c_encoding = _findEncodingName(             # <<<<<<<<<<<<<<
+ *                         <const_xmlChar*>c_data,
+ *                         4 if py_buffer_len > 4 else <int>py_buffer_len)
+ */
+        __pyx_v_c_encoding = __pyx_f_4lxml_5etree__findEncodingName(((const xmlChar *)__pyx_v_c_data), __pyx_t_8);
+
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1214
+ *                         <const_xmlChar*>c_data,
+ *                         4 if py_buffer_len > 4 else <int>py_buffer_len)
+ *                     if c_encoding is not NULL:             # <<<<<<<<<<<<<<
+ *                         # found it => skip over BOM (if there is one)
+ *                         if (c_data[0] == b'\xef' and
+ */
+        __pyx_t_10 = ((__pyx_v_c_encoding != NULL) != 0);
+        if (__pyx_t_10) {
+
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1216
+ *                     if c_encoding is not NULL:
+ *                         # found it => skip over BOM (if there is one)
+ *                         if (c_data[0] == b'\xef' and             # <<<<<<<<<<<<<<
+ *                                 c_data[1] == b'\xbb' and
+ *                                 c_data[2] == b'\xbf'):
+ */
+          __pyx_t_10 = (((__pyx_v_c_data[0]) == '\xEF') != 0);
+          if (__pyx_t_10) {
+
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1217
+ *                         # found it => skip over BOM (if there is one)
+ *                         if (c_data[0] == b'\xef' and
+ *                                 c_data[1] == b'\xbb' and             # <<<<<<<<<<<<<<
+ *                                 c_data[2] == b'\xbf'):
+ *                             c_data += 3  # UTF-8 BOM
+ */
+            __pyx_t_5 = (((__pyx_v_c_data[1]) == '\xBB') != 0);
+            if (__pyx_t_5) {
+
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1218
+ *                         if (c_data[0] == b'\xef' and
+ *                                 c_data[1] == b'\xbb' and
+ *                                 c_data[2] == b'\xbf'):             # <<<<<<<<<<<<<<
+ *                             c_data += 3  # UTF-8 BOM
+ *                             py_buffer_len -= 3
+ */
+              __pyx_t_4 = (((__pyx_v_c_data[2]) == '\xBF') != 0);
+              __pyx_t_11 = __pyx_t_4;
+            } else {
+              __pyx_t_11 = __pyx_t_5;
+            }
+            __pyx_t_5 = __pyx_t_11;
+          } else {
+            __pyx_t_5 = __pyx_t_10;
+          }
+          if (__pyx_t_5) {
+
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1219
+ *                                 c_data[1] == b'\xbb' and
+ *                                 c_data[2] == b'\xbf'):
+ *                             c_data += 3  # UTF-8 BOM             # <<<<<<<<<<<<<<
+ *                             py_buffer_len -= 3
+ *                         elif (c_data[0] == b'\xfe' and c_data[1] == b'\xff' or
+ */
+            __pyx_v_c_data = (__pyx_v_c_data + 3);
+
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1220
+ *                                 c_data[2] == b'\xbf'):
+ *                             c_data += 3  # UTF-8 BOM
+ *                             py_buffer_len -= 3             # <<<<<<<<<<<<<<
+ *                         elif (c_data[0] == b'\xfe' and c_data[1] == b'\xff' or
+ *                                 c_data[0] == b'\xff' and c_data[1] == b'\xfe'):
+ */
+            __pyx_v_py_buffer_len = (__pyx_v_py_buffer_len - 3);
+            goto __pyx_L9;
+          }
+
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1221
+ *                             c_data += 3  # UTF-8 BOM
+ *                             py_buffer_len -= 3
+ *                         elif (c_data[0] == b'\xfe' and c_data[1] == b'\xff' or             # <<<<<<<<<<<<<<
+ *                                 c_data[0] == b'\xff' and c_data[1] == b'\xfe'):
+ *                             # UTF-16 BE/LE
+ */
+          __pyx_t_5 = (((__pyx_v_c_data[0]) == '\xFE') != 0);
+          if (__pyx_t_5) {
+            __pyx_t_10 = (((__pyx_v_c_data[1]) == '\xFF') != 0);
+            __pyx_t_11 = __pyx_t_10;
+          } else {
+            __pyx_t_11 = __pyx_t_5;
+          }
+          if (!__pyx_t_11) {
+
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1222
+ *                             py_buffer_len -= 3
+ *                         elif (c_data[0] == b'\xfe' and c_data[1] == b'\xff' or
+ *                                 c_data[0] == b'\xff' and c_data[1] == b'\xfe'):             # <<<<<<<<<<<<<<
+ *                             # UTF-16 BE/LE
+ *                             c_data += 2
+ */
+            __pyx_t_5 = (((__pyx_v_c_data[0]) == '\xFF') != 0);
+            if (__pyx_t_5) {
+              __pyx_t_10 = (((__pyx_v_c_data[1]) == '\xFE') != 0);
+              __pyx_t_4 = __pyx_t_10;
+            } else {
+              __pyx_t_4 = __pyx_t_5;
+            }
+            __pyx_t_5 = __pyx_t_4;
+          } else {
+            __pyx_t_5 = __pyx_t_11;
+          }
+          if (__pyx_t_5) {
+
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1224
+ *                                 c_data[0] == b'\xff' and c_data[1] == b'\xfe'):
+ *                             # UTF-16 BE/LE
+ *                             c_data += 2             # <<<<<<<<<<<<<<
+ *                             py_buffer_len -= 2
+ * 
+ */
+            __pyx_v_c_data = (__pyx_v_c_data + 2);
+
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1225
+ *                             # UTF-16 BE/LE
+ *                             c_data += 2
+ *                             py_buffer_len -= 2             # <<<<<<<<<<<<<<
+ * 
+ *             if self._for_html:
+ */
+            __pyx_v_py_buffer_len = (__pyx_v_py_buffer_len - 2);
+            goto __pyx_L9;
+          }
+          __pyx_L9:;
+          goto __pyx_L8;
+        }
+        __pyx_L8:;
+        break;
+        default: break;
+      }
+      goto __pyx_L7;
+    }
+    __pyx_L7:;
+
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1227
+ *                             py_buffer_len -= 2
+ * 
  *             if self._for_html:             # <<<<<<<<<<<<<<
  *                 error = _htmlCtxtResetPush(
  *                     pctxt, NULL, 0, c_filename, c_encoding,
@@ -96668,20 +96944,20 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
     __pyx_t_5 = (__pyx_v_self->__pyx_base._for_html != 0);
     if (__pyx_t_5) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1188
- *                           if self._filename is not None else NULL)
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1228
+ * 
  *             if self._for_html:
  *                 error = _htmlCtxtResetPush(             # <<<<<<<<<<<<<<
  *                     pctxt, NULL, 0, c_filename, c_encoding,
  *                     self._parse_options)
  */
-      __pyx_t_8 = __pyx_f_4lxml_5etree__htmlCtxtResetPush(__pyx_v_pctxt, NULL, 0, __pyx_v_c_filename, __pyx_v_c_encoding, __pyx_v_self->__pyx_base._parse_options); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = __pyx_f_4lxml_5etree__htmlCtxtResetPush(__pyx_v_pctxt, NULL, 0, __pyx_v_c_filename, __pyx_v_c_encoding, __pyx_v_self->__pyx_base._parse_options); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1228; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_v_error = __pyx_t_8;
-      goto __pyx_L7;
+      goto __pyx_L10;
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1192
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1232
  *                     self._parse_options)
  *             else:
  *                 xmlparser.xmlCtxtUseOptions(pctxt, self._parse_options)             # <<<<<<<<<<<<<<
@@ -96690,23 +96966,61 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
       xmlCtxtUseOptions(__pyx_v_pctxt, __pyx_v_self->__pyx_base._parse_options);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1193
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1233
  *             else:
  *                 xmlparser.xmlCtxtUseOptions(pctxt, self._parse_options)
  *                 error = xmlparser.xmlCtxtResetPush(             # <<<<<<<<<<<<<<
  *                     pctxt, NULL, 0, c_filename, c_encoding)
- * 
+ *             if error:
  */
       __pyx_v_error = xmlCtxtResetPush(__pyx_v_pctxt, NULL, 0, __pyx_v_c_filename, __pyx_v_c_encoding);
     }
-    __pyx_L7:;
+    __pyx_L10:;
+
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1235
+ *                 error = xmlparser.xmlCtxtResetPush(
+ *                     pctxt, NULL, 0, c_filename, c_encoding)
+ *             if error:             # <<<<<<<<<<<<<<
+ *                 raise MemoryError()
+ *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
+ */
+    __pyx_t_5 = (__pyx_v_error != 0);
+    if (__pyx_t_5) {
+
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1236
+ *                     pctxt, NULL, 0, c_filename, c_encoding)
+ *             if error:
+ *                 raise MemoryError()             # <<<<<<<<<<<<<<
+ *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
+ * 
+ */
+      PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    }
+
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1237
+ *             if error:
+ *                 raise MemoryError()
+ *             __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)             # <<<<<<<<<<<<<<
+ * 
+ *         #print pctxt.charset, 'NONE' if c_encoding is NULL else c_encoding
+ */
+    __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_pctxt);
     goto __pyx_L6;
   }
   __pyx_L6:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1198
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1241
  *         #print pctxt.charset, 'NONE' if c_encoding is NULL else c_encoding
  * 
+ *         fixup_error = 0             # <<<<<<<<<<<<<<
+ *         while py_buffer_len > 0 and (error == 0 or recover):
+ *             with nogil:
+ */
+  __pyx_v_fixup_error = 0;
+
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1242
+ * 
+ *         fixup_error = 0
  *         while py_buffer_len > 0 and (error == 0 or recover):             # <<<<<<<<<<<<<<
  *             with nogil:
  *                 if py_buffer_len > limits.INT_MAX:
@@ -96714,20 +97028,20 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   while (1) {
     __pyx_t_5 = ((__pyx_v_py_buffer_len > 0) != 0);
     if (__pyx_t_5) {
-      __pyx_t_4 = ((__pyx_v_error == 0) != 0);
-      if (!__pyx_t_4) {
-        __pyx_t_10 = (__pyx_v_recover != 0);
+      __pyx_t_11 = ((__pyx_v_error == 0) != 0);
+      if (!__pyx_t_11) {
+        __pyx_t_4 = (__pyx_v_recover != 0);
       } else {
-        __pyx_t_10 = __pyx_t_4;
+        __pyx_t_4 = __pyx_t_11;
       }
-      __pyx_t_4 = __pyx_t_10;
+      __pyx_t_11 = __pyx_t_4;
     } else {
-      __pyx_t_4 = __pyx_t_5;
+      __pyx_t_11 = __pyx_t_5;
     }
-    if (!__pyx_t_4) break;
+    if (!__pyx_t_11) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1199
- * 
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1243
+ *         fixup_error = 0
  *         while py_buffer_len > 0 and (error == 0 or recover):
  *             with nogil:             # <<<<<<<<<<<<<<
  *                 if py_buffer_len > limits.INT_MAX:
@@ -96740,17 +97054,17 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
         #endif
         /*try:*/ {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1200
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1244
  *         while py_buffer_len > 0 and (error == 0 or recover):
  *             with nogil:
  *                 if py_buffer_len > limits.INT_MAX:             # <<<<<<<<<<<<<<
  *                     buffer_len = limits.INT_MAX
  *                 else:
  */
-          __pyx_t_4 = ((__pyx_v_py_buffer_len > INT_MAX) != 0);
-          if (__pyx_t_4) {
+          __pyx_t_11 = ((__pyx_v_py_buffer_len > INT_MAX) != 0);
+          if (__pyx_t_11) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1201
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1245
  *             with nogil:
  *                 if py_buffer_len > limits.INT_MAX:
  *                     buffer_len = limits.INT_MAX             # <<<<<<<<<<<<<<
@@ -96758,45 +97072,123 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  *                     buffer_len = <int>py_buffer_len
  */
             __pyx_v_buffer_len = INT_MAX;
-            goto __pyx_L15;
+            goto __pyx_L19;
           }
           /*else*/ {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1203
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1247
  *                     buffer_len = limits.INT_MAX
  *                 else:
  *                     buffer_len = <int>py_buffer_len             # <<<<<<<<<<<<<<
  *                 if self._for_html:
- *                     error = htmlparser.htmlParseChunk(pctxt, c_data, buffer_len, 0)
+ *                     c_node = pctxt.node  # last node where the parser stopped
  */
             __pyx_v_buffer_len = ((int)__pyx_v_py_buffer_len);
           }
-          __pyx_L15:;
+          __pyx_L19:;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1204
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1248
  *                 else:
  *                     buffer_len = <int>py_buffer_len
  *                 if self._for_html:             # <<<<<<<<<<<<<<
+ *                     c_node = pctxt.node  # last node where the parser stopped
  *                     error = htmlparser.htmlParseChunk(pctxt, c_data, buffer_len, 0)
- *                 else:
  */
-          __pyx_t_4 = (__pyx_v_self->__pyx_base._for_html != 0);
-          if (__pyx_t_4) {
+          __pyx_t_11 = (__pyx_v_self->__pyx_base._for_html != 0);
+          if (__pyx_t_11) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1205
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1249
  *                     buffer_len = <int>py_buffer_len
  *                 if self._for_html:
+ *                     c_node = pctxt.node  # last node where the parser stopped             # <<<<<<<<<<<<<<
+ *                     error = htmlparser.htmlParseChunk(pctxt, c_data, buffer_len, 0)
+ *                     # and now for the fun part: move node names to the dict
+ */
+            __pyx_t_12 = __pyx_v_pctxt->node;
+            __pyx_v_c_node = __pyx_t_12;
+
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1250
+ *                 if self._for_html:
+ *                     c_node = pctxt.node  # last node where the parser stopped
  *                     error = htmlparser.htmlParseChunk(pctxt, c_data, buffer_len, 0)             # <<<<<<<<<<<<<<
+ *                     # and now for the fun part: move node names to the dict
+ *                     if pctxt.myDoc:
+ */
+            __pyx_v_error = htmlParseChunk(__pyx_v_pctxt, __pyx_v_c_data, __pyx_v_buffer_len, 0);
+
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1252
+ *                     error = htmlparser.htmlParseChunk(pctxt, c_data, buffer_len, 0)
+ *                     # and now for the fun part: move node names to the dict
+ *                     if pctxt.myDoc:             # <<<<<<<<<<<<<<
+ *                         fixup_error = _fixHtmlDictSubtreeNames(
+ *                             pctxt.dict, pctxt.myDoc, c_node)
+ */
+            __pyx_t_11 = (__pyx_v_pctxt->myDoc != 0);
+            if (__pyx_t_11) {
+
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1253
+ *                     # and now for the fun part: move node names to the dict
+ *                     if pctxt.myDoc:
+ *                         fixup_error = _fixHtmlDictSubtreeNames(             # <<<<<<<<<<<<<<
+ *                             pctxt.dict, pctxt.myDoc, c_node)
+ *                         if pctxt.myDoc.dict and pctxt.myDoc.dict is not pctxt.dict:
+ */
+              __pyx_v_fixup_error = __pyx_f_4lxml_5etree__fixHtmlDictSubtreeNames(__pyx_v_pctxt->dict, __pyx_v_pctxt->myDoc, __pyx_v_c_node);
+
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1255
+ *                         fixup_error = _fixHtmlDictSubtreeNames(
+ *                             pctxt.dict, pctxt.myDoc, c_node)
+ *                         if pctxt.myDoc.dict and pctxt.myDoc.dict is not pctxt.dict:             # <<<<<<<<<<<<<<
+ *                             xmlparser.xmlDictFree(pctxt.myDoc.dict)
+ *                             pctxt.myDoc.dict = pctxt.dict
+ */
+              if ((__pyx_v_pctxt->myDoc->dict != 0)) {
+                __pyx_t_11 = ((__pyx_v_pctxt->myDoc->dict != __pyx_v_pctxt->dict) != 0);
+                __pyx_t_5 = __pyx_t_11;
+              } else {
+                __pyx_t_5 = (__pyx_v_pctxt->myDoc->dict != 0);
+              }
+              if (__pyx_t_5) {
+
+                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1256
+ *                             pctxt.dict, pctxt.myDoc, c_node)
+ *                         if pctxt.myDoc.dict and pctxt.myDoc.dict is not pctxt.dict:
+ *                             xmlparser.xmlDictFree(pctxt.myDoc.dict)             # <<<<<<<<<<<<<<
+ *                             pctxt.myDoc.dict = pctxt.dict
+ *                             xmlparser.xmlDictReference(pctxt.dict)
+ */
+                xmlDictFree(__pyx_v_pctxt->myDoc->dict);
+
+                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1257
+ *                         if pctxt.myDoc.dict and pctxt.myDoc.dict is not pctxt.dict:
+ *                             xmlparser.xmlDictFree(pctxt.myDoc.dict)
+ *                             pctxt.myDoc.dict = pctxt.dict             # <<<<<<<<<<<<<<
+ *                             xmlparser.xmlDictReference(pctxt.dict)
+ *                 else:
+ */
+                __pyx_t_13 = __pyx_v_pctxt->dict;
+                __pyx_v_pctxt->myDoc->dict = __pyx_t_13;
+
+                /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1258
+ *                             xmlparser.xmlDictFree(pctxt.myDoc.dict)
+ *                             pctxt.myDoc.dict = pctxt.dict
+ *                             xmlparser.xmlDictReference(pctxt.dict)             # <<<<<<<<<<<<<<
  *                 else:
  *                     error = xmlparser.xmlParseChunk(pctxt, c_data, buffer_len, 0)
  */
-            __pyx_v_error = htmlParseChunk(__pyx_v_pctxt, __pyx_v_c_data, __pyx_v_buffer_len, 0);
-            goto __pyx_L16;
+                xmlDictReference(__pyx_v_pctxt->dict);
+                goto __pyx_L22;
+              }
+              __pyx_L22:;
+              goto __pyx_L21;
+            }
+            __pyx_L21:;
+            goto __pyx_L20;
           }
           /*else*/ {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1207
- *                     error = htmlparser.htmlParseChunk(pctxt, c_data, buffer_len, 0)
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1260
+ *                             xmlparser.xmlDictReference(pctxt.dict)
  *                 else:
  *                     error = xmlparser.xmlParseChunk(pctxt, c_data, buffer_len, 0)             # <<<<<<<<<<<<<<
  *                 py_buffer_len -= buffer_len
@@ -96804,9 +97196,9 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
             __pyx_v_error = xmlParseChunk(__pyx_v_pctxt, __pyx_v_c_data, __pyx_v_buffer_len, 0);
           }
-          __pyx_L16:;
+          __pyx_L20:;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1208
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1261
  *                 else:
  *                     error = xmlparser.xmlParseChunk(pctxt, c_data, buffer_len, 0)
  *                 py_buffer_len -= buffer_len             # <<<<<<<<<<<<<<
@@ -96815,18 +97207,18 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
           __pyx_v_py_buffer_len = (__pyx_v_py_buffer_len - __pyx_v_buffer_len);
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1209
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1262
  *                     error = xmlparser.xmlParseChunk(pctxt, c_data, buffer_len, 0)
  *                 py_buffer_len -= buffer_len
  *                 c_data += buffer_len             # <<<<<<<<<<<<<<
  * 
- *             if error and not pctxt.replaceEntities and not pctxt.validate:
+ *             if fixup_error and not context.has_raised():
  */
           __pyx_v_c_data = (__pyx_v_c_data + __pyx_v_buffer_len);
         }
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1199
- * 
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1243
+ *         fixup_error = 0
  *         while py_buffer_len > 0 and (error == 0 or recover):
  *             with nogil:             # <<<<<<<<<<<<<<
  *                 if py_buffer_len > limits.INT_MAX:
@@ -96837,190 +97229,242 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
             #ifdef WITH_THREAD
             Py_BLOCK_THREADS
             #endif
-            goto __pyx_L14;
+            goto __pyx_L18;
           }
-          __pyx_L14:;
+          __pyx_L18:;
         }
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1211
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1264
  *                 c_data += buffer_len
  * 
+ *             if fixup_error and not context.has_raised():             # <<<<<<<<<<<<<<
+ *                 context.store_exception(MemoryError())
+ * 
+ */
+    if ((__pyx_v_fixup_error != 0)) {
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context), __pyx_n_s_has_raised); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_1);
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __pyx_t_11 = (!__pyx_t_5);
+      __pyx_t_5 = __pyx_t_11;
+    } else {
+      __pyx_t_5 = (__pyx_v_fixup_error != 0);
+    }
+    if (__pyx_t_5) {
+
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1265
+ * 
+ *             if fixup_error and not context.has_raised():
+ *                 context.store_exception(MemoryError())             # <<<<<<<<<<<<<<
+ * 
+ *             if error and not pctxt.replaceEntities and not pctxt.validate:
+ */
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context), __pyx_n_s_store_exception); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_1);
+      __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
+      PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_1);
+      __pyx_t_1 = 0;
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      goto __pyx_L23;
+    }
+    __pyx_L23:;
+
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1267
+ *                 context.store_exception(MemoryError())
+ * 
  *             if error and not pctxt.replaceEntities and not pctxt.validate:             # <<<<<<<<<<<<<<
  *                 # in this mode, we ignore errors about undefined entities
  *                 for entry in context._error_log.filter_from_errors():
  */
     if ((__pyx_v_error != 0)) {
-      __pyx_t_4 = (!(__pyx_v_pctxt->replaceEntities != 0));
-      if (__pyx_t_4) {
-        __pyx_t_5 = (!(__pyx_v_pctxt->validate != 0));
-        __pyx_t_10 = __pyx_t_5;
+      __pyx_t_5 = (!(__pyx_v_pctxt->replaceEntities != 0));
+      if (__pyx_t_5) {
+        __pyx_t_11 = (!(__pyx_v_pctxt->validate != 0));
+        __pyx_t_4 = __pyx_t_11;
       } else {
-        __pyx_t_10 = __pyx_t_4;
+        __pyx_t_4 = __pyx_t_5;
       }
-      __pyx_t_4 = __pyx_t_10;
+      __pyx_t_5 = __pyx_t_4;
     } else {
-      __pyx_t_4 = (__pyx_v_error != 0);
+      __pyx_t_5 = (__pyx_v_error != 0);
     }
-    if (__pyx_t_4) {
+    if (__pyx_t_5) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1213
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1269
  *             if error and not pctxt.replaceEntities and not pctxt.validate:
  *                 # in this mode, we ignore errors about undefined entities
  *                 for entry in context._error_log.filter_from_errors():             # <<<<<<<<<<<<<<
  *                     if entry.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \
  *                            entry.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  */
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context->_error_log), __pyx_n_s_filter_from_errors); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context->_error_log), __pyx_n_s_filter_from_errors); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) {
-        __pyx_t_1 = __pyx_t_3; __Pyx_INCREF(__pyx_t_1); __pyx_t_11 = 0;
-        __pyx_t_12 = NULL;
+      if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) {
+        __pyx_t_1 = __pyx_t_2; __Pyx_INCREF(__pyx_t_1); __pyx_t_14 = 0;
+        __pyx_t_15 = NULL;
       } else {
-        __pyx_t_11 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_14 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_12 = Py_TYPE(__pyx_t_1)->tp_iternext;
+        __pyx_t_15 = Py_TYPE(__pyx_t_1)->tp_iternext;
       }
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       for (;;) {
-        if (!__pyx_t_12 && PyList_CheckExact(__pyx_t_1)) {
-          if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_1)) break;
+        if (!__pyx_t_15 && PyList_CheckExact(__pyx_t_1)) {
+          if (__pyx_t_14 >= PyList_GET_SIZE(__pyx_t_1)) break;
           #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_14); __Pyx_INCREF(__pyx_t_2); __pyx_t_14++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #endif
-        } else if (!__pyx_t_12 && PyTuple_CheckExact(__pyx_t_1)) {
-          if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+        } else if (!__pyx_t_15 && PyTuple_CheckExact(__pyx_t_1)) {
+          if (__pyx_t_14 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
           #if CYTHON_COMPILING_IN_CPYTHON
-          __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_3); __pyx_t_11++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_14); __Pyx_INCREF(__pyx_t_2); __pyx_t_14++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #else
-          __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_14); __pyx_t_14++; if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #endif
         } else {
-          __pyx_t_3 = __pyx_t_12(__pyx_t_1);
-          if (unlikely(!__pyx_t_3)) {
+          __pyx_t_2 = __pyx_t_15(__pyx_t_1);
+          if (unlikely(!__pyx_t_2)) {
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
               if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-              else {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              else {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             break;
           }
-          __Pyx_GOTREF(__pyx_t_3);
+          __Pyx_GOTREF(__pyx_t_2);
         }
-        __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_3);
-        __pyx_t_3 = 0;
+        __Pyx_XDECREF_SET(__pyx_v_entry, __pyx_t_2);
+        __pyx_t_2 = 0;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1214
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1270
  *                 # in this mode, we ignore errors about undefined entities
  *                 for entry in context._error_log.filter_from_errors():
  *                     if entry.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \             # <<<<<<<<<<<<<<
  *                            entry.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  *                         break
  */
-        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_n_s_type); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_3);
-        __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_n_s_type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_2);
-        __pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_WAR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_GOTREF(__pyx_t_13);
-        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-        __pyx_t_2 = PyObject_RichCompare(__pyx_t_3, __pyx_t_13, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_3);
+        __pyx_t_16 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_WAR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_GOTREF(__pyx_t_16);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-        __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_16, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-        if (__pyx_t_4) {
+        __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+        __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        if (__pyx_t_5) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1215
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1271
  *                 for entry in context._error_log.filter_from_errors():
  *                     if entry.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \
  *                            entry.type != ErrorTypes.ERR_UNDECLARED_ENTITY:             # <<<<<<<<<<<<<<
  *                         break
  *                 else:
  */
-          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_n_s_type); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_2);
-          __pyx_t_13 = __Pyx_GetModuleGlobalName(__pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_GOTREF(__pyx_t_13);
-          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_13, __pyx_n_s_ERR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_entry, __pyx_n_s_type); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_3);
-          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-          __pyx_t_13 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_NE); __Pyx_XGOTREF(__pyx_t_13); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __pyx_t_16 = __Pyx_GetModuleGlobalName(__pyx_n_s_ErrorTypes); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_16);
+          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_16, __pyx_n_s_ERR_UNDECLARED_ENTITY); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_GOTREF(__pyx_t_2);
+          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+          __pyx_t_16 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_NE); __Pyx_XGOTREF(__pyx_t_16); if (unlikely(!__pyx_t_16)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_13); if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1215; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-          __pyx_t_5 = __pyx_t_10;
+          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_16); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+          __pyx_t_11 = __pyx_t_4;
         } else {
-          __pyx_t_5 = __pyx_t_4;
+          __pyx_t_11 = __pyx_t_5;
         }
-        if (__pyx_t_5) {
+        if (__pyx_t_11) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1216
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1272
  *                     if entry.type != ErrorTypes.WAR_UNDECLARED_ENTITY and \
  *                            entry.type != ErrorTypes.ERR_UNDECLARED_ENTITY:
  *                         break             # <<<<<<<<<<<<<<
  *                 else:
  *                     error = 0
  */
-          goto __pyx_L19_break;
+          goto __pyx_L26_break;
         }
       }
       /*else*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1218
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1274
  *                         break
  *                 else:
  *                     error = 0             # <<<<<<<<<<<<<<
  * 
- *         if not recover and (error or not pctxt.wellFormed):
+ *         if fixup_error or not recover and (error or not pctxt.wellFormed):
  */
         __pyx_v_error = 0;
       }
-      __pyx_L19_break:;
+      __pyx_L26_break:;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-      goto __pyx_L17;
+      goto __pyx_L24;
     }
-    __pyx_L17:;
+    __pyx_L24:;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1220
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1276
  *                     error = 0
  * 
- *         if not recover and (error or not pctxt.wellFormed):             # <<<<<<<<<<<<<<
+ *         if fixup_error or not recover and (error or not pctxt.wellFormed):             # <<<<<<<<<<<<<<
  *             self._feed_parser_running = 0
  *             try:
  */
-  __pyx_t_5 = (!(__pyx_v_recover != 0));
-  if (__pyx_t_5) {
-    if (!(__pyx_v_error != 0)) {
-      __pyx_t_4 = (!(__pyx_v_pctxt->wellFormed != 0));
-      __pyx_t_10 = __pyx_t_4;
+  if (!(__pyx_v_fixup_error != 0)) {
+    __pyx_t_11 = (!(__pyx_v_recover != 0));
+    if (__pyx_t_11) {
+      if (!(__pyx_v_error != 0)) {
+        __pyx_t_5 = (!(__pyx_v_pctxt->wellFormed != 0));
+        __pyx_t_4 = __pyx_t_5;
+      } else {
+        __pyx_t_4 = (__pyx_v_error != 0);
+      }
+      __pyx_t_5 = __pyx_t_4;
     } else {
-      __pyx_t_10 = (__pyx_v_error != 0);
+      __pyx_t_5 = __pyx_t_11;
     }
-    __pyx_t_4 = __pyx_t_10;
+    __pyx_t_11 = __pyx_t_5;
   } else {
-    __pyx_t_4 = __pyx_t_5;
+    __pyx_t_11 = (__pyx_v_fixup_error != 0);
   }
-  if (__pyx_t_4) {
+  if (__pyx_t_11) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1221
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1277
  * 
- *         if not recover and (error or not pctxt.wellFormed):
+ *         if fixup_error or not recover and (error or not pctxt.wellFormed):
  *             self._feed_parser_running = 0             # <<<<<<<<<<<<<<
  *             try:
  *                 context._handleParseResult(self, pctxt.myDoc, None)
  */
     __pyx_v_self->_feed_parser_running = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1222
- *         if not recover and (error or not pctxt.wellFormed):
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1278
+ *         if fixup_error or not recover and (error or not pctxt.wellFormed):
  *             self._feed_parser_running = 0
  *             try:             # <<<<<<<<<<<<<<
  *                 context._handleParseResult(self, pctxt.myDoc, None)
@@ -97028,19 +97472,19 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     /*try:*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1223
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1279
  *             self._feed_parser_running = 0
  *             try:
  *                 context._handleParseResult(self, pctxt.myDoc, None)             # <<<<<<<<<<<<<<
  *             finally:
  *                 context.cleanup()
  */
-      __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResult(__pyx_v_context, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_pctxt->myDoc, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1223; __pyx_clineno = __LINE__; goto __pyx_L24_error;}
+      __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResult(__pyx_v_context, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_pctxt->myDoc, Py_None); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1279; __pyx_clineno = __LINE__; goto __pyx_L31_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1225
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1281
  *                 context._handleParseResult(self, pctxt.myDoc, None)
  *             finally:
  *                 context.cleanup()             # <<<<<<<<<<<<<<
@@ -97049,61 +97493,61 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
  */
     /*finally:*/ {
       /*normal exit:*/{
-        __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        goto __pyx_L25;
+        __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        goto __pyx_L32;
       }
       /*exception exit:*/{
-        __pyx_L24_error:;
-        __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
-        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __pyx_L31_error:;
+        __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
         __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
+        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
         __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
-        if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
-        if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18) < 0)) __Pyx_ErrFetch(&__pyx_t_16, &__pyx_t_17, &__pyx_t_18);
-        __Pyx_XGOTREF(__pyx_t_16);
-        __Pyx_XGOTREF(__pyx_t_17);
-        __Pyx_XGOTREF(__pyx_t_18);
+        if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
+        if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
         __Pyx_XGOTREF(__pyx_t_19);
         __Pyx_XGOTREF(__pyx_t_20);
         __Pyx_XGOTREF(__pyx_t_21);
-        __pyx_t_8 = __pyx_lineno; __pyx_t_14 = __pyx_clineno; __pyx_t_15 = __pyx_filename;
+        __Pyx_XGOTREF(__pyx_t_22);
+        __Pyx_XGOTREF(__pyx_t_23);
+        __Pyx_XGOTREF(__pyx_t_24);
+        __pyx_t_8 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
         {
-          __pyx_t_22 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_22 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1225; __pyx_clineno = __LINE__; goto __pyx_L27_error;}
+          __pyx_t_25 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_25 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1281; __pyx_clineno = __LINE__; goto __pyx_L34_error;}
         }
         if (PY_MAJOR_VERSION >= 3) {
-          __Pyx_XGIVEREF(__pyx_t_19);
-          __Pyx_XGIVEREF(__pyx_t_20);
-          __Pyx_XGIVEREF(__pyx_t_21);
-          __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
+          __Pyx_XGIVEREF(__pyx_t_22);
+          __Pyx_XGIVEREF(__pyx_t_23);
+          __Pyx_XGIVEREF(__pyx_t_24);
+          __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
         }
-        __Pyx_XGIVEREF(__pyx_t_16);
-        __Pyx_XGIVEREF(__pyx_t_17);
-        __Pyx_XGIVEREF(__pyx_t_18);
-        __Pyx_ErrRestore(__pyx_t_16, __pyx_t_17, __pyx_t_18);
-        __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
-        __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_14; __pyx_filename = __pyx_t_15;
+        __Pyx_XGIVEREF(__pyx_t_19);
+        __Pyx_XGIVEREF(__pyx_t_20);
+        __Pyx_XGIVEREF(__pyx_t_21);
+        __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
+        __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
+        __pyx_lineno = __pyx_t_8; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
         goto __pyx_L1_error;
-        __pyx_L27_error:;
+        __pyx_L34_error:;
         if (PY_MAJOR_VERSION >= 3) {
-          __Pyx_XGIVEREF(__pyx_t_19);
-          __Pyx_XGIVEREF(__pyx_t_20);
-          __Pyx_XGIVEREF(__pyx_t_21);
-          __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
-        }
-        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
-        __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
-        __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
-        __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
+          __Pyx_XGIVEREF(__pyx_t_22);
+          __Pyx_XGIVEREF(__pyx_t_23);
+          __Pyx_XGIVEREF(__pyx_t_24);
+          __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
+        }
+        __Pyx_XDECREF(__pyx_t_19); __pyx_t_19 = 0;
+        __Pyx_XDECREF(__pyx_t_20); __pyx_t_20 = 0;
+        __Pyx_XDECREF(__pyx_t_21); __pyx_t_21 = 0;
+        __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
         goto __pyx_L1_error;
       }
-      __pyx_L25:;
+      __pyx_L32:;
     }
-    goto __pyx_L22;
+    goto __pyx_L29;
   }
-  __pyx_L22:;
+  __pyx_L29:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1135
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1155
  *             return self._getPushParserContext()._error_log.copy()
  * 
  *     cpdef feed(self, data):             # <<<<<<<<<<<<<<
@@ -97118,7 +97562,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml_
   __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_13);
+  __Pyx_XDECREF(__pyx_t_16);
   __Pyx_AddTraceback("lxml.etree._FeedParser.feed", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -97152,7 +97596,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("feed", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->feed(__pyx_v_self, __pyx_v_data, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1135; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->feed(__pyx_v_self, __pyx_v_data, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1155; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -97169,7 +97613,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_feed(struct __pyx_obj_4lxml
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1227
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1283
  *                 context.cleanup()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
@@ -97209,11 +97653,11 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   if (unlikely(__pyx_skip_dispatch)) ;
   /* Check if overridden in Python */
   else if (unlikely(Py_TYPE(((PyObject *)__pyx_v_self))->tp_dictoffset != 0)) {
-    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_close); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4lxml_5etree_11_FeedParser_3close)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -97223,7 +97667,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1238
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1294
  *         parser interface, all other usage is undefined.
  *         """
  *         if not self._feed_parser_running:             # <<<<<<<<<<<<<<
@@ -97233,34 +97677,34 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   __pyx_t_3 = ((!(__pyx_v_self->_feed_parser_running != 0)) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1239
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1295
  *         """
  *         if not self._feed_parser_running:
  *             raise XMLSyntaxError(u"no element found",             # <<<<<<<<<<<<<<
  *                                  xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0)
  * 
  */
-    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_XMLSyntaxError); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1240
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1296
  *         if not self._feed_parser_running:
  *             raise XMLSyntaxError(u"no element found",
  *                                  xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0)             # <<<<<<<<<<<<<<
  * 
  *         context = self._getPushParserContext()
  */
-    __pyx_t_2 = PyInt_FromLong(XML_ERR_INTERNAL_ERROR); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1240; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyInt_FromLong(XML_ERR_INTERNAL_ERROR); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1239
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1295
  *         """
  *         if not self._feed_parser_running:
  *             raise XMLSyntaxError(u"no element found",             # <<<<<<<<<<<<<<
  *                                  xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0)
  * 
  */
-    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_kp_u_no_element_found);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u_no_element_found);
@@ -97274,28 +97718,28 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
     PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_int_0);
     __Pyx_GIVEREF(__pyx_int_0);
     __pyx_t_2 = 0;
-    __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1239; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1295; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1242
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1298
  *                                  xmlerror.XML_ERR_INTERNAL_ERROR, 0, 0)
  * 
  *         context = self._getPushParserContext()             # <<<<<<<<<<<<<<
  *         pctxt = context._c_ctxt
  * 
  */
-  __pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1298; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1243
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1299
  * 
  *         context = self._getPushParserContext()
  *         pctxt = context._c_ctxt             # <<<<<<<<<<<<<<
@@ -97305,7 +97749,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   __pyx_t_5 = __pyx_v_context->_c_ctxt;
   __pyx_v_pctxt = __pyx_t_5;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1245
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1301
  *         pctxt = context._c_ctxt
  * 
  *         self._feed_parser_running = 0             # <<<<<<<<<<<<<<
@@ -97314,7 +97758,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
  */
   __pyx_v_self->_feed_parser_running = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1246
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1302
  * 
  *         self._feed_parser_running = 0
  *         if self._for_html:             # <<<<<<<<<<<<<<
@@ -97324,7 +97768,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   __pyx_t_3 = (__pyx_v_self->__pyx_base._for_html != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1247
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1303
  *         self._feed_parser_running = 0
  *         if self._for_html:
  *             htmlparser.htmlParseChunk(pctxt, NULL, 0, 1)             # <<<<<<<<<<<<<<
@@ -97336,7 +97780,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1249
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1305
  *             htmlparser.htmlParseChunk(pctxt, NULL, 0, 1)
  *         else:
  *             xmlparser.xmlParseChunk(pctxt, NULL, 0, 1)             # <<<<<<<<<<<<<<
@@ -97347,7 +97791,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1251
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1307
  *             xmlparser.xmlParseChunk(pctxt, NULL, 0, 1)
  * 
  *         if (pctxt.recovery and not pctxt.disableSAX and             # <<<<<<<<<<<<<<
@@ -97358,7 +97802,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
     __pyx_t_3 = ((!(__pyx_v_pctxt->disableSAX != 0)) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1252
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1308
  * 
  *         if (pctxt.recovery and not pctxt.disableSAX and
  *                 isinstance(context, _SaxParserContext)):             # <<<<<<<<<<<<<<
@@ -97376,19 +97820,19 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1254
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1310
  *                 isinstance(context, _SaxParserContext)):
  *             # apply any left-over 'end' events
  *             (<_SaxParserContext>context).flushEvents()             # <<<<<<<<<<<<<<
  * 
  *         try:
  */
-    __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__SaxParserContext *)((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_v_context)->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->flushEvents(((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_v_context)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__SaxParserContext *)((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_v_context)->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->flushEvents(((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_v_context)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L5;
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1256
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1312
  *             (<_SaxParserContext>context).flushEvents()
  * 
  *         try:             # <<<<<<<<<<<<<<
@@ -97397,20 +97841,20 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
  */
   /*try:*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1257
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1313
  * 
  *         try:
  *             result = context._handleParseResult(self, pctxt.myDoc, None)             # <<<<<<<<<<<<<<
  *         finally:
  *             context.cleanup()
  */
-    __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResult(__pyx_v_context, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_pctxt->myDoc, Py_None); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1257; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
+    __pyx_t_2 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->_handleParseResult(__pyx_v_context, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_pctxt->myDoc, Py_None); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1313; __pyx_clineno = __LINE__; goto __pyx_L7_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_result = __pyx_t_2;
     __pyx_t_2 = 0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1259
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1315
  *             result = context._handleParseResult(self, pctxt.myDoc, None)
  *         finally:
  *             context.cleanup()             # <<<<<<<<<<<<<<
@@ -97419,7 +97863,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
  */
   /*finally:*/ {
     /*normal exit:*/{
-      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L8;
     }
     /*exception exit:*/{
@@ -97438,7 +97882,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
       __Pyx_XGOTREF(__pyx_t_16);
       __pyx_t_8 = __pyx_lineno; __pyx_t_9 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
       {
-        __pyx_t_17 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_17 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1259; __pyx_clineno = __LINE__; goto __pyx_L10_error;}
+        __pyx_t_17 = ((struct __pyx_vtabstruct_4lxml_5etree__ParserContext *)__pyx_v_context->__pyx_base.__pyx_base.__pyx_vtab)->cleanup(__pyx_v_context); if (unlikely(__pyx_t_17 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1315; __pyx_clineno = __LINE__; goto __pyx_L10_error;}
       }
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_14);
@@ -97469,7 +97913,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
     __pyx_L8:;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1261
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1317
  *             context.cleanup()
  * 
  *         if isinstance(result, _Document):             # <<<<<<<<<<<<<<
@@ -97480,7 +97924,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   __pyx_t_7 = (__pyx_t_3 != 0);
   if (__pyx_t_7) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1262
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1318
  * 
  *         if isinstance(result, _Document):
  *             return (<_Document>result).getroot()             # <<<<<<<<<<<<<<
@@ -97488,7 +97932,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
  *             return result
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = __pyx_f_4lxml_5etree_9_Document_getroot(((struct LxmlDocument *)__pyx_v_result)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_4lxml_5etree_9_Document_getroot(((struct LxmlDocument *)__pyx_v_result)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1318; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
@@ -97496,7 +97940,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1264
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1320
  *             return (<_Document>result).getroot()
  *         else:
  *             return result             # <<<<<<<<<<<<<<
@@ -97509,7 +97953,7 @@ static PyObject *__pyx_f_4lxml_5etree_11_FeedParser_close(struct __pyx_obj_4lxml
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1227
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1283
  *                 context.cleanup()
  * 
  *     cpdef close(self):             # <<<<<<<<<<<<<<
@@ -97555,7 +97999,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_2close(struct __pyx_obj_4lx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("close", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((struct __pyx_vtabstruct_4lxml_5etree__FeedParser *)__pyx_v_self->__pyx_base.__pyx_vtab)->close(__pyx_v_self, 1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -97572,7 +98016,7 @@ static PyObject *__pyx_pf_4lxml_5etree_11_FeedParser_2close(struct __pyx_obj_4lx
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1266
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1322
  *             return result
  * 
  * cdef int _htmlCtxtResetPush(xmlparser.xmlParserCtxt* c_ctxt,             # <<<<<<<<<<<<<<
@@ -97589,7 +98033,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("_htmlCtxtResetPush", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1272
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1328
  *     cdef xmlparser.xmlParserInput* c_input_stream
  *     # libxml2 crashes if spaceTab is not initialised
  *     if _LIBXML_VERSION_INT < 20629 and c_ctxt.spaceTab is NULL:             # <<<<<<<<<<<<<<
@@ -97605,7 +98049,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1273
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1329
  *     # libxml2 crashes if spaceTab is not initialised
  *     if _LIBXML_VERSION_INT < 20629 and c_ctxt.spaceTab is NULL:
  *         c_ctxt.spaceTab = <int*>tree.xmlMalloc(10 * sizeof(int))             # <<<<<<<<<<<<<<
@@ -97614,7 +98058,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
  */
     __pyx_v_c_ctxt->spaceTab = ((int *)xmlMalloc((10 * (sizeof(int)))));
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1274
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1330
  *     if _LIBXML_VERSION_INT < 20629 and c_ctxt.spaceTab is NULL:
  *         c_ctxt.spaceTab = <int*>tree.xmlMalloc(10 * sizeof(int))
  *         c_ctxt.spaceMax = 10             # <<<<<<<<<<<<<<
@@ -97626,7 +98070,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1277
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1333
  * 
  *     # libxml2 lacks an HTML push parser setup function
  *     error = xmlparser.xmlCtxtResetPush(             # <<<<<<<<<<<<<<
@@ -97635,7 +98079,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
  */
   __pyx_v_error = xmlCtxtResetPush(__pyx_v_c_ctxt, NULL, 0, __pyx_v_c_filename, __pyx_v_c_encoding);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1279
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1335
  *     error = xmlparser.xmlCtxtResetPush(
  *         c_ctxt, NULL, 0, c_filename, c_encoding)
  *     if error:             # <<<<<<<<<<<<<<
@@ -97645,7 +98089,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
   __pyx_t_3 = (__pyx_v_error != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1280
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1336
  *         c_ctxt, NULL, 0, c_filename, c_encoding)
  *     if error:
  *         return error             # <<<<<<<<<<<<<<
@@ -97656,7 +98100,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1283
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1339
  * 
  *     # fix libxml2 setup for HTML
  *     c_ctxt.progressive = 1             # <<<<<<<<<<<<<<
@@ -97665,7 +98109,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
  */
   __pyx_v_c_ctxt->progressive = 1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1284
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1340
  *     # fix libxml2 setup for HTML
  *     c_ctxt.progressive = 1
  *     c_ctxt.html = 1             # <<<<<<<<<<<<<<
@@ -97674,7 +98118,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
  */
   __pyx_v_c_ctxt->html = 1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1285
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1341
  *     c_ctxt.progressive = 1
  *     c_ctxt.html = 1
  *     htmlparser.htmlCtxtUseOptions(c_ctxt, parse_options)             # <<<<<<<<<<<<<<
@@ -97683,7 +98127,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
  */
   htmlCtxtUseOptions(__pyx_v_c_ctxt, __pyx_v_parse_options);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1287
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1343
  *     htmlparser.htmlCtxtUseOptions(c_ctxt, parse_options)
  * 
  *     if c_data is not NULL and buffer_len > 0:             # <<<<<<<<<<<<<<
@@ -97699,7 +98143,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
   }
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1288
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1344
  * 
  *     if c_data is not NULL and buffer_len > 0:
  *         return htmlparser.htmlParseChunk(c_ctxt, c_data, buffer_len, 0)             # <<<<<<<<<<<<<<
@@ -97710,7 +98154,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1289
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1345
  *     if c_data is not NULL and buffer_len > 0:
  *         return htmlparser.htmlParseChunk(c_ctxt, c_data, buffer_len, 0)
  *     return 0             # <<<<<<<<<<<<<<
@@ -97720,7 +98164,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1266
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1322
  *             return result
  * 
  * cdef int _htmlCtxtResetPush(xmlparser.xmlParserCtxt* c_ctxt,             # <<<<<<<<<<<<<<
@@ -97734,7 +98178,7 @@ static int __pyx_f_4lxml_5etree__htmlCtxtResetPush(xmlParserCtxt *__pyx_v_c_ctxt
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1347
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1403
  *     apply to the default parser.
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,             # <<<<<<<<<<<<<<
@@ -97773,7 +98217,7 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_False);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1348
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1404
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,
  *                  dtd_validation=False, load_dtd=False, no_network=True,             # <<<<<<<<<<<<<<
@@ -97784,7 +98228,7 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
     values[3] = ((PyObject *)Py_False);
     values[4] = ((PyObject *)Py_True);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1349
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1405
  *     def __init__(self, *, encoding=None, attribute_defaults=False,
  *                  dtd_validation=False, load_dtd=False, no_network=True,
  *                  ns_clean=False, recover=False, XMLSchema schema=None,             # <<<<<<<<<<<<<<
@@ -97795,7 +98239,7 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
     values[6] = ((PyObject *)Py_False);
     values[7] = (PyObject *)((struct __pyx_obj_4lxml_5etree_XMLSchema *)Py_None);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1350
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1406
  *                  dtd_validation=False, load_dtd=False, no_network=True,
  *                  ns_clean=False, recover=False, XMLSchema schema=None,
  *                  huge_tree=False, remove_blank_text=False, resolve_entities=True,             # <<<<<<<<<<<<<<
@@ -97806,7 +98250,7 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
     values[9] = ((PyObject *)Py_False);
     values[10] = ((PyObject *)Py_True);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1351
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1407
  *                  ns_clean=False, recover=False, XMLSchema schema=None,
  *                  huge_tree=False, remove_blank_text=False, resolve_entities=True,
  *                  remove_comments=False, remove_pis=False, strip_cdata=True,             # <<<<<<<<<<<<<<
@@ -97817,7 +98261,7 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
     values[12] = ((PyObject *)Py_False);
     values[13] = ((PyObject *)Py_True);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1352
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1408
  *                  huge_tree=False, remove_blank_text=False, resolve_entities=True,
  *                  remove_comments=False, remove_pis=False, strip_cdata=True,
  *                  target=None, compact=True):             # <<<<<<<<<<<<<<
@@ -97842,7 +98286,7 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "__init__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1347; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "__init__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1403; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 0) {
       goto __pyx_L5_argtuple_error;
@@ -97867,16 +98311,16 @@ static int __pyx_pw_4lxml_5etree_9XMLParser_1__init__(PyObject *__pyx_v_self, Py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1347; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1403; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.XMLParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_4lxml_5etree_XMLSchema, 1, "schema", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_4lxml_5etree_XMLSchema, 1, "schema", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_4lxml_5etree_9XMLParser___init__(((struct __pyx_obj_4lxml_5etree_XMLParser *)__pyx_v_self), __pyx_v_encoding, __pyx_v_attribute_defaults, __pyx_v_dtd_validation, __pyx_v_load_dtd, __pyx_v_no_network, __pyx_v_ns_clean, __pyx_v_recover, __pyx_v_schema, __pyx_v_huge_tree, __pyx_v_remove_blank_text, __pyx_v_resolve_entities, __pyx_v_remove_comments, __pyx_v_remove_pis, __pyx_v_strip_cdata, __pyx_v_target, __pyx_v_compact);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1347
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1403
  *     apply to the default parser.
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,             # <<<<<<<<<<<<<<
@@ -97907,7 +98351,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1354
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1410
  *                  target=None, compact=True):
  *         cdef int parse_options
  *         parse_options = _XML_DEFAULT_PARSE_OPTIONS             # <<<<<<<<<<<<<<
@@ -97916,17 +98360,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
   __pyx_v_parse_options = __pyx_v_4lxml_5etree__XML_DEFAULT_PARSE_OPTIONS;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1355
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1411
  *         cdef int parse_options
  *         parse_options = _XML_DEFAULT_PARSE_OPTIONS
  *         if load_dtd:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD
  *         if dtd_validation:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_load_dtd); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_load_dtd); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1411; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1356
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1412
  *         parse_options = _XML_DEFAULT_PARSE_OPTIONS
  *         if load_dtd:
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD             # <<<<<<<<<<<<<<
@@ -97938,17 +98382,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1357
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1413
  *         if load_dtd:
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD
  *         if dtd_validation:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDVALID | \
  *                             xmlparser.XML_PARSE_DTDLOAD
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_dtd_validation); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_dtd_validation); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1358
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1414
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD
  *         if dtd_validation:
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDVALID | \             # <<<<<<<<<<<<<<
@@ -97960,17 +98404,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1360
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1416
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDVALID | \
  *                             xmlparser.XML_PARSE_DTDLOAD
  *         if attribute_defaults:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDATTR
  *             if schema is None:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_attribute_defaults); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1360; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_attribute_defaults); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1361
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1417
  *                             xmlparser.XML_PARSE_DTDLOAD
  *         if attribute_defaults:
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDATTR             # <<<<<<<<<<<<<<
@@ -97979,7 +98423,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
  */
     __pyx_v_parse_options = (__pyx_v_parse_options | XML_PARSE_DTDATTR);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1362
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1418
  *         if attribute_defaults:
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDATTR
  *             if schema is None:             # <<<<<<<<<<<<<<
@@ -97990,7 +98434,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1363
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1419
  *             parse_options = parse_options | xmlparser.XML_PARSE_DTDATTR
  *             if schema is None:
  *                 parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD             # <<<<<<<<<<<<<<
@@ -98005,17 +98449,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1364
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1420
  *             if schema is None:
  *                 parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD
  *         if ns_clean:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_NSCLEAN
  *         if recover:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_ns_clean); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1364; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_ns_clean); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1420; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1365
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1421
  *                 parse_options = parse_options | xmlparser.XML_PARSE_DTDLOAD
  *         if ns_clean:
  *             parse_options = parse_options | xmlparser.XML_PARSE_NSCLEAN             # <<<<<<<<<<<<<<
@@ -98027,17 +98471,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   }
   __pyx_L7:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1366
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1422
  *         if ns_clean:
  *             parse_options = parse_options | xmlparser.XML_PARSE_NSCLEAN
  *         if recover:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_RECOVER
  *         if remove_blank_text:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_recover); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1366; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_recover); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1422; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1367
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1423
  *             parse_options = parse_options | xmlparser.XML_PARSE_NSCLEAN
  *         if recover:
  *             parse_options = parse_options | xmlparser.XML_PARSE_RECOVER             # <<<<<<<<<<<<<<
@@ -98049,17 +98493,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   }
   __pyx_L8:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1368
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1424
  *         if recover:
  *             parse_options = parse_options | xmlparser.XML_PARSE_RECOVER
  *         if remove_blank_text:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_NOBLANKS
  *         if huge_tree:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_remove_blank_text); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1368; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_remove_blank_text); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1424; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1369
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1425
  *             parse_options = parse_options | xmlparser.XML_PARSE_RECOVER
  *         if remove_blank_text:
  *             parse_options = parse_options | xmlparser.XML_PARSE_NOBLANKS             # <<<<<<<<<<<<<<
@@ -98071,17 +98515,17 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   }
   __pyx_L9:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1370
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1426
  *         if remove_blank_text:
  *             parse_options = parse_options | xmlparser.XML_PARSE_NOBLANKS
  *         if huge_tree:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | xmlparser.XML_PARSE_HUGE
  *         if not no_network:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_huge_tree); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1370; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_huge_tree); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1371
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1427
  *             parse_options = parse_options | xmlparser.XML_PARSE_NOBLANKS
  *         if huge_tree:
  *             parse_options = parse_options | xmlparser.XML_PARSE_HUGE             # <<<<<<<<<<<<<<
@@ -98093,18 +98537,18 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   }
   __pyx_L10:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1372
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1428
  *         if huge_tree:
  *             parse_options = parse_options | xmlparser.XML_PARSE_HUGE
  *         if not no_network:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NONET
  *         if not compact:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_no_network); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_no_network); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1428; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = ((!__pyx_t_2) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1373
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1429
  *             parse_options = parse_options | xmlparser.XML_PARSE_HUGE
  *         if not no_network:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NONET             # <<<<<<<<<<<<<<
@@ -98116,18 +98560,18 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   }
   __pyx_L11:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1374
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1430
  *         if not no_network:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NONET
  *         if not compact:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_COMPACT
  *         if not resolve_entities:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_compact); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1374; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_compact); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1430; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1375
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1431
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NONET
  *         if not compact:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_COMPACT             # <<<<<<<<<<<<<<
@@ -98139,18 +98583,18 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   }
   __pyx_L12:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1376
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1432
  *         if not compact:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_COMPACT
  *         if not resolve_entities:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOENT
  *         if not strip_cdata:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_resolve_entities); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_resolve_entities); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1432; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = ((!__pyx_t_2) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1377
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1433
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_COMPACT
  *         if not resolve_entities:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOENT             # <<<<<<<<<<<<<<
@@ -98162,18 +98606,18 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   }
   __pyx_L13:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1378
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1434
  *         if not resolve_entities:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOENT
  *         if not strip_cdata:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOCDATA
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_strip_cdata); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1378; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_strip_cdata); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1379
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1435
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOENT
  *         if not strip_cdata:
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOCDATA             # <<<<<<<<<<<<<<
@@ -98185,26 +98629,26 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   }
   __pyx_L14:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1381
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1437
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOCDATA
  * 
  *         _BaseParser.__init__(self, parse_options, 0, schema,             # <<<<<<<<<<<<<<
  *                              remove_comments, remove_pis, strip_cdata,
  *                              target, encoding)
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__BaseParser)), __pyx_n_s_init); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__BaseParser)), __pyx_n_s_init); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_parse_options); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_parse_options); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1383
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1439
  *         _BaseParser.__init__(self, parse_options, 0, schema,
  *                              remove_comments, remove_pis, strip_cdata,
  *                              target, encoding)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_5 = PyTuple_New(9); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(9); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_self));
@@ -98234,20 +98678,20 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   __Pyx_GIVEREF(__pyx_v_encoding);
   __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1381
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1437
  *             parse_options = parse_options ^ xmlparser.XML_PARSE_NOCDATA
  * 
  *         _BaseParser.__init__(self, parse_options, 0, schema,             # <<<<<<<<<<<<<<
  *                              remove_comments, remove_pis, strip_cdata,
  *                              target, encoding)
  */
-  __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1347
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1403
  *     apply to the default parser.
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,             # <<<<<<<<<<<<<<
@@ -98269,7 +98713,7 @@ static int __pyx_pf_4lxml_5etree_9XMLParser___init__(struct __pyx_obj_4lxml_5etr
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1404
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1460
  *     source, you can pass the ``base_url``.
  *     """
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):             # <<<<<<<<<<<<<<
@@ -98322,7 +98766,7 @@ static int __pyx_pw_4lxml_5etree_13XMLPullParser_1__init__(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1404; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1460; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -98337,7 +98781,7 @@ static int __pyx_pw_4lxml_5etree_13XMLPullParser_1__init__(PyObject *__pyx_v_sel
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1404; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1460; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
   __Pyx_AddTraceback("lxml.etree.XMLPullParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -98367,30 +98811,30 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_events);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1405
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1461
  *     """
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):
  *         XMLParser.__init__(self, **kwargs)             # <<<<<<<<<<<<<<
  *         if events is None:
  *             events = ('end',)
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XMLParser)), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XMLParser)), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   __pyx_t_3 = __pyx_v_kwargs;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1461; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1406
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1462
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):
  *         XMLParser.__init__(self, **kwargs)
  *         if events is None:             # <<<<<<<<<<<<<<
@@ -98401,7 +98845,7 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
   __pyx_t_6 = (__pyx_t_5 != 0);
   if (__pyx_t_6) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1407
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1463
  *         XMLParser.__init__(self, **kwargs)
  *         if events is None:
  *             events = ('end',)             # <<<<<<<<<<<<<<
@@ -98414,29 +98858,29 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1408
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1464
  *         if events is None:
  *             events = ('end',)
  *         self._setBaseURL(base_url)             # <<<<<<<<<<<<<<
  *         self._collectEvents(events, tag)
  * 
  */
-  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._setBaseURL(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_base_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1408; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._setBaseURL(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_base_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1409
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1465
  *             events = ('end',)
  *         self._setBaseURL(base_url)
  *         self._collectEvents(events, tag)             # <<<<<<<<<<<<<<
  * 
  *     def read_events(self):
  */
-  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._collectEvents(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_events, __pyx_v_tag); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._collectEvents(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_events, __pyx_v_tag); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1404
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1460
  *     source, you can pass the ``base_url``.
  *     """
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):             # <<<<<<<<<<<<<<
@@ -98460,7 +98904,7 @@ static int __pyx_pf_4lxml_5etree_13XMLPullParser___init__(struct __pyx_obj_4lxml
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1411
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1467
  *         self._collectEvents(events, tag)
  * 
  *     def read_events(self):             # <<<<<<<<<<<<<<
@@ -98490,7 +98934,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13XMLPullParser_2read_events(struct __pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read_events", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1412
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1468
  * 
  *     def read_events(self):
  *         return (<_SaxParserContext?>self._getPushParserContext()).events_iterator             # <<<<<<<<<<<<<<
@@ -98498,15 +98942,15 @@ static PyObject *__pyx_pf_4lxml_5etree_13XMLPullParser_2read_events(struct __pyx
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__SaxParserContext)))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__SaxParserContext)))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_INCREF(((PyObject *)((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_t_1)->events_iterator));
   __pyx_r = ((PyObject *)((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_t_1)->events_iterator);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1411
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1467
  *         self._collectEvents(events, tag)
  * 
  *     def read_events(self):             # <<<<<<<<<<<<<<
@@ -98525,7 +98969,7 @@ static PyObject *__pyx_pf_4lxml_5etree_13XMLPullParser_2read_events(struct __pyx
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1430
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1486
  *     and thus ignores comments and processing instructions.
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,             # <<<<<<<<<<<<<<
@@ -98564,7 +99008,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_False);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1431
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1487
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,
  *                  dtd_validation=False, load_dtd=False, no_network=True,             # <<<<<<<<<<<<<<
@@ -98575,7 +99019,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
     values[3] = ((PyObject *)Py_False);
     values[4] = ((PyObject *)Py_True);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1432
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1488
  *     def __init__(self, *, encoding=None, attribute_defaults=False,
  *                  dtd_validation=False, load_dtd=False, no_network=True,
  *                  ns_clean=False, recover=False, schema=None,             # <<<<<<<<<<<<<<
@@ -98586,7 +99030,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
     values[6] = ((PyObject *)Py_False);
     values[7] = ((PyObject *)Py_None);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1433
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1489
  *                  dtd_validation=False, load_dtd=False, no_network=True,
  *                  ns_clean=False, recover=False, schema=None,
  *                  huge_tree=False, remove_blank_text=False, resolve_entities=True,             # <<<<<<<<<<<<<<
@@ -98597,7 +99041,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
     values[9] = ((PyObject *)Py_False);
     values[10] = ((PyObject *)Py_True);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1434
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1490
  *                  ns_clean=False, recover=False, schema=None,
  *                  huge_tree=False, remove_blank_text=False, resolve_entities=True,
  *                  remove_comments=True, remove_pis=True, strip_cdata=True,             # <<<<<<<<<<<<<<
@@ -98608,7 +99052,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
     values[12] = ((PyObject *)Py_True);
     values[13] = ((PyObject *)Py_True);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1435
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1491
  *                  huge_tree=False, remove_blank_text=False, resolve_entities=True,
  *                  remove_comments=True, remove_pis=True, strip_cdata=True,
  *                  target=None, compact=True):             # <<<<<<<<<<<<<<
@@ -98633,7 +99077,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "__init__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1430; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "__init__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1486; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 0) {
       goto __pyx_L5_argtuple_error;
@@ -98658,7 +99102,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1430; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1486; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.ETCompatXMLParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -98666,7 +99110,7 @@ static int __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__(PyObject *__pyx_v
   __pyx_L4_argument_unpacking_done:;
   __pyx_r = __pyx_pf_4lxml_5etree_17ETCompatXMLParser___init__(((struct __pyx_obj_4lxml_5etree_ETCompatXMLParser *)__pyx_v_self), __pyx_v_encoding, __pyx_v_attribute_defaults, __pyx_v_dtd_validation, __pyx_v_load_dtd, __pyx_v_no_network, __pyx_v_ns_clean, __pyx_v_recover, __pyx_v_schema, __pyx_v_huge_tree, __pyx_v_remove_blank_text, __pyx_v_resolve_entities, __pyx_v_remove_comments, __pyx_v_remove_pis, __pyx_v_strip_cdata, __pyx_v_target, __pyx_v_compact);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1430
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1486
  *     and thus ignores comments and processing instructions.
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,             # <<<<<<<<<<<<<<
@@ -98691,182 +99135,182 @@ static int __pyx_pf_4lxml_5etree_17ETCompatXMLParser___init__(struct __pyx_obj_4
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1436
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1492
  *                  remove_comments=True, remove_pis=True, strip_cdata=True,
  *                  target=None, compact=True):
  *         XMLParser.__init__(self,             # <<<<<<<<<<<<<<
  *                            attribute_defaults=attribute_defaults,
  *                            dtd_validation=dtd_validation,
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XMLParser)), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XMLParser)), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1437
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1493
  *                  target=None, compact=True):
  *         XMLParser.__init__(self,
  *                            attribute_defaults=attribute_defaults,             # <<<<<<<<<<<<<<
  *                            dtd_validation=dtd_validation,
  *                            load_dtd=load_dtd,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_attribute_defaults, __pyx_v_attribute_defaults) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_attribute_defaults, __pyx_v_attribute_defaults) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1438
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1494
  *         XMLParser.__init__(self,
  *                            attribute_defaults=attribute_defaults,
  *                            dtd_validation=dtd_validation,             # <<<<<<<<<<<<<<
  *                            load_dtd=load_dtd,
  *                            no_network=no_network,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtd_validation, __pyx_v_dtd_validation) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_dtd_validation, __pyx_v_dtd_validation) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1439
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1495
  *                            attribute_defaults=attribute_defaults,
  *                            dtd_validation=dtd_validation,
  *                            load_dtd=load_dtd,             # <<<<<<<<<<<<<<
  *                            no_network=no_network,
  *                            ns_clean=ns_clean,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_load_dtd, __pyx_v_load_dtd) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_load_dtd, __pyx_v_load_dtd) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1440
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1496
  *                            dtd_validation=dtd_validation,
  *                            load_dtd=load_dtd,
  *                            no_network=no_network,             # <<<<<<<<<<<<<<
  *                            ns_clean=ns_clean,
  *                            recover=recover,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_no_network, __pyx_v_no_network) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_no_network, __pyx_v_no_network) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1441
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1497
  *                            load_dtd=load_dtd,
  *                            no_network=no_network,
  *                            ns_clean=ns_clean,             # <<<<<<<<<<<<<<
  *                            recover=recover,
  *                            remove_blank_text=remove_blank_text,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_ns_clean, __pyx_v_ns_clean) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_ns_clean, __pyx_v_ns_clean) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1442
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1498
  *                            no_network=no_network,
  *                            ns_clean=ns_clean,
  *                            recover=recover,             # <<<<<<<<<<<<<<
  *                            remove_blank_text=remove_blank_text,
  *                            huge_tree=huge_tree,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_recover, __pyx_v_recover) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_recover, __pyx_v_recover) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1443
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1499
  *                            ns_clean=ns_clean,
  *                            recover=recover,
  *                            remove_blank_text=remove_blank_text,             # <<<<<<<<<<<<<<
  *                            huge_tree=huge_tree,
  *                            compact=compact,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_remove_blank_text, __pyx_v_remove_blank_text) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_remove_blank_text, __pyx_v_remove_blank_text) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1444
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1500
  *                            recover=recover,
  *                            remove_blank_text=remove_blank_text,
  *                            huge_tree=huge_tree,             # <<<<<<<<<<<<<<
  *                            compact=compact,
  *                            resolve_entities=resolve_entities,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_huge_tree, __pyx_v_huge_tree) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_huge_tree, __pyx_v_huge_tree) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1445
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1501
  *                            remove_blank_text=remove_blank_text,
  *                            huge_tree=huge_tree,
  *                            compact=compact,             # <<<<<<<<<<<<<<
  *                            resolve_entities=resolve_entities,
  *                            remove_comments=remove_comments,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_compact, __pyx_v_compact) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_compact, __pyx_v_compact) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1446
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1502
  *                            huge_tree=huge_tree,
  *                            compact=compact,
  *                            resolve_entities=resolve_entities,             # <<<<<<<<<<<<<<
  *                            remove_comments=remove_comments,
  *                            remove_pis=remove_pis,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_resolve_entities, __pyx_v_resolve_entities) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_resolve_entities, __pyx_v_resolve_entities) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1447
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1503
  *                            compact=compact,
  *                            resolve_entities=resolve_entities,
  *                            remove_comments=remove_comments,             # <<<<<<<<<<<<<<
  *                            remove_pis=remove_pis,
  *                            strip_cdata=strip_cdata,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_remove_comments, __pyx_v_remove_comments) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_remove_comments, __pyx_v_remove_comments) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1448
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1504
  *                            resolve_entities=resolve_entities,
  *                            remove_comments=remove_comments,
  *                            remove_pis=remove_pis,             # <<<<<<<<<<<<<<
  *                            strip_cdata=strip_cdata,
  *                            target=target,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_remove_pis, __pyx_v_remove_pis) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_remove_pis, __pyx_v_remove_pis) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1449
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1505
  *                            remove_comments=remove_comments,
  *                            remove_pis=remove_pis,
  *                            strip_cdata=strip_cdata,             # <<<<<<<<<<<<<<
  *                            target=target,
  *                            encoding=encoding,
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_strip_cdata, __pyx_v_strip_cdata) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_strip_cdata, __pyx_v_strip_cdata) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1450
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1506
  *                            remove_pis=remove_pis,
  *                            strip_cdata=strip_cdata,
  *                            target=target,             # <<<<<<<<<<<<<<
  *                            encoding=encoding,
  *                            schema=schema)
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_target, __pyx_v_target) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_target, __pyx_v_target) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1451
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1507
  *                            strip_cdata=strip_cdata,
  *                            target=target,
  *                            encoding=encoding,             # <<<<<<<<<<<<<<
  *                            schema=schema)
  * 
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_encoding, __pyx_v_encoding) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_encoding, __pyx_v_encoding) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1452
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1508
  *                            target=target,
  *                            encoding=encoding,
  *                            schema=schema)             # <<<<<<<<<<<<<<
  * 
  * # ET 1.2 compatible name
  */
-  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_schema, __pyx_v_schema) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_schema, __pyx_v_schema) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1436
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1492
  *                  remove_comments=True, remove_pis=True, strip_cdata=True,
  *                  target=None, compact=True):
  *         XMLParser.__init__(self,             # <<<<<<<<<<<<<<
  *                            attribute_defaults=attribute_defaults,
  *                            dtd_validation=dtd_validation,
  */
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1492; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1430
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1486
  *     and thus ignores comments and processing instructions.
  *     """
  *     def __init__(self, *, encoding=None, attribute_defaults=False,             # <<<<<<<<<<<<<<
@@ -98889,7 +99333,7 @@ static int __pyx_pf_4lxml_5etree_17ETCompatXMLParser___init__(struct __pyx_obj_4
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1463
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1519
  * __GLOBAL_PARSER_CONTEXT.setDefaultParser(__DEFAULT_XML_PARSER)
  * 
  * def set_default_parser(_BaseParser parser=None):             # <<<<<<<<<<<<<<
@@ -98930,7 +99374,7 @@ static PyObject *__pyx_pw_4lxml_5etree_43set_default_parser(PyObject *__pyx_self
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_default_parser") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_default_parser") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1519; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -98943,13 +99387,13 @@ static PyObject *__pyx_pw_4lxml_5etree_43set_default_parser(PyObject *__pyx_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("set_default_parser", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("set_default_parser", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1519; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.set_default_parser", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parser), __pyx_ptype_4lxml_5etree__BaseParser, 1, "parser", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_4lxml_5etree_42set_default_parser(__pyx_self, __pyx_v_parser);
 
   /* function exit code */
@@ -98969,7 +99413,7 @@ static PyObject *__pyx_pf_4lxml_5etree_42set_default_parser(CYTHON_UNUSED PyObje
   __Pyx_RefNannySetupContext("set_default_parser", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_parser);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1475
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1531
  *     parser for each thread explicitly or use a parser pool.
  *     """
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -98980,7 +99424,7 @@ static PyObject *__pyx_pf_4lxml_5etree_42set_default_parser(CYTHON_UNUSED PyObje
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1476
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1532
  *     """
  *     if parser is None:
  *         parser = __DEFAULT_XML_PARSER             # <<<<<<<<<<<<<<
@@ -98993,7 +99437,7 @@ static PyObject *__pyx_pf_4lxml_5etree_42set_default_parser(CYTHON_UNUSED PyObje
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1477
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1533
  *     if parser is None:
  *         parser = __DEFAULT_XML_PARSER
  *     __GLOBAL_PARSER_CONTEXT.setDefaultParser(parser)             # <<<<<<<<<<<<<<
@@ -99002,7 +99446,7 @@ static PyObject *__pyx_pf_4lxml_5etree_42set_default_parser(CYTHON_UNUSED PyObje
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_setDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_parser);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1463
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1519
  * __GLOBAL_PARSER_CONTEXT.setDefaultParser(__DEFAULT_XML_PARSER)
  * 
  * def set_default_parser(_BaseParser parser=None):             # <<<<<<<<<<<<<<
@@ -99018,7 +99462,7 @@ static PyObject *__pyx_pf_4lxml_5etree_42set_default_parser(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1479
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1535
  *     __GLOBAL_PARSER_CONTEXT.setDefaultParser(parser)
  * 
  * def get_default_parser():             # <<<<<<<<<<<<<<
@@ -99050,7 +99494,7 @@ static PyObject *__pyx_pf_4lxml_5etree_44get_default_parser(CYTHON_UNUSED PyObje
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("get_default_parser", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1481
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1537
  * def get_default_parser():
  *     u"get_default_parser()"
  *     return __GLOBAL_PARSER_CONTEXT.getDefaultParser()             # <<<<<<<<<<<<<<
@@ -99058,13 +99502,13 @@ static PyObject *__pyx_pf_4lxml_5etree_44get_default_parser(CYTHON_UNUSED PyObje
  * ############################################################
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1479
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1535
  *     __GLOBAL_PARSER_CONTEXT.setDefaultParser(parser)
  * 
  * def get_default_parser():             # <<<<<<<<<<<<<<
@@ -99083,7 +99527,7 @@ static PyObject *__pyx_pf_4lxml_5etree_44get_default_parser(CYTHON_UNUSED PyObje
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1526
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1582
  *     reasons.
  *     """
  *     def __init__(self, *, encoding=None, remove_blank_text=False,             # <<<<<<<<<<<<<<
@@ -99116,7 +99560,7 @@ static int __pyx_pw_4lxml_5etree_10HTMLParser_1__init__(PyObject *__pyx_v_self,
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_False);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1527
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1583
  *     """
  *     def __init__(self, *, encoding=None, remove_blank_text=False,
  *                  remove_comments=False, remove_pis=False, strip_cdata=True,             # <<<<<<<<<<<<<<
@@ -99127,7 +99571,7 @@ static int __pyx_pw_4lxml_5etree_10HTMLParser_1__init__(PyObject *__pyx_v_self,
     values[3] = ((PyObject *)Py_False);
     values[4] = ((PyObject *)Py_True);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1528
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1584
  *     def __init__(self, *, encoding=None, remove_blank_text=False,
  *                  remove_comments=False, remove_pis=False, strip_cdata=True,
  *                  no_network=True, target=None, XMLSchema schema=None,             # <<<<<<<<<<<<<<
@@ -99138,7 +99582,7 @@ static int __pyx_pw_4lxml_5etree_10HTMLParser_1__init__(PyObject *__pyx_v_self,
     values[6] = ((PyObject *)Py_None);
     values[7] = (PyObject *)((struct __pyx_obj_4lxml_5etree_XMLSchema *)Py_None);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1529
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1585
  *                  remove_comments=False, remove_pis=False, strip_cdata=True,
  *                  no_network=True, target=None, XMLSchema schema=None,
  *                  recover=True, compact=True):             # <<<<<<<<<<<<<<
@@ -99163,7 +99607,7 @@ static int __pyx_pw_4lxml_5etree_10HTMLParser_1__init__(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "__init__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1526; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "__init__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1582; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 0) {
       goto __pyx_L5_argtuple_error;
@@ -99182,16 +99626,16 @@ static int __pyx_pw_4lxml_5etree_10HTMLParser_1__init__(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1526; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1582; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree.HTMLParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_4lxml_5etree_XMLSchema, 1, "schema", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_schema), __pyx_ptype_4lxml_5etree_XMLSchema, 1, "schema", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_4lxml_5etree_10HTMLParser___init__(((struct __pyx_obj_4lxml_5etree_HTMLParser *)__pyx_v_self), __pyx_v_encoding, __pyx_v_remove_blank_text, __pyx_v_remove_comments, __pyx_v_remove_pis, __pyx_v_strip_cdata, __pyx_v_no_network, __pyx_v_target, __pyx_v_schema, __pyx_v_recover, __pyx_v_compact);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1526
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1582
  *     reasons.
  *     """
  *     def __init__(self, *, encoding=None, remove_blank_text=False,             # <<<<<<<<<<<<<<
@@ -99222,7 +99666,7 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1531
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1587
  *                  recover=True, compact=True):
  *         cdef int parse_options
  *         parse_options = _HTML_DEFAULT_PARSE_OPTIONS             # <<<<<<<<<<<<<<
@@ -99231,17 +99675,17 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
  */
   __pyx_v_parse_options = __pyx_v_4lxml_5etree__HTML_DEFAULT_PARSE_OPTIONS;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1532
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1588
  *         cdef int parse_options
  *         parse_options = _HTML_DEFAULT_PARSE_OPTIONS
  *         if remove_blank_text:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options | htmlparser.HTML_PARSE_NOBLANKS
  *         if not recover:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_remove_blank_text); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1532; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_remove_blank_text); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1533
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1589
  *         parse_options = _HTML_DEFAULT_PARSE_OPTIONS
  *         if remove_blank_text:
  *             parse_options = parse_options | htmlparser.HTML_PARSE_NOBLANKS             # <<<<<<<<<<<<<<
@@ -99253,18 +99697,18 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1534
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1590
  *         if remove_blank_text:
  *             parse_options = parse_options | htmlparser.HTML_PARSE_NOBLANKS
  *         if not recover:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_RECOVER
  *         if not no_network:
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_recover); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_recover); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1535
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1591
  *             parse_options = parse_options | htmlparser.HTML_PARSE_NOBLANKS
  *         if not recover:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_RECOVER             # <<<<<<<<<<<<<<
@@ -99276,18 +99720,18 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1536
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1592
  *         if not recover:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_RECOVER
  *         if not no_network:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NONET
  *         if not compact:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_no_network); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_no_network); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1592; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = ((!__pyx_t_2) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1537
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1593
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_RECOVER
  *         if not no_network:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NONET             # <<<<<<<<<<<<<<
@@ -99299,18 +99743,18 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1538
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1594
  *         if not no_network:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NONET
  *         if not compact:             # <<<<<<<<<<<<<<
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_COMPACT
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_compact); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1538; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_compact); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_2 = ((!__pyx_t_1) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1539
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1595
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_NONET
  *         if not compact:
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_COMPACT             # <<<<<<<<<<<<<<
@@ -99322,26 +99766,26 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
   }
   __pyx_L6:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1541
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1597
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_COMPACT
  * 
  *         _BaseParser.__init__(self, parse_options, 1, schema,             # <<<<<<<<<<<<<<
  *                              remove_comments, remove_pis, strip_cdata,
  *                              target, encoding)
  */
-  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__BaseParser)), __pyx_n_s_init); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__BaseParser)), __pyx_n_s_init); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1597; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_parse_options); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_parse_options); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1597; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1543
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1599
  *         _BaseParser.__init__(self, parse_options, 1, schema,
  *                              remove_comments, remove_pis, strip_cdata,
  *                              target, encoding)             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_5 = PyTuple_New(9); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(9); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1597; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_self));
@@ -99371,20 +99815,20 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
   __Pyx_GIVEREF(__pyx_v_encoding);
   __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1541
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1597
  *             parse_options = parse_options ^ htmlparser.HTML_PARSE_COMPACT
  * 
  *         _BaseParser.__init__(self, parse_options, 1, schema,             # <<<<<<<<<<<<<<
  *                              remove_comments, remove_pis, strip_cdata,
  *                              target, encoding)
  */
-  __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1597; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1526
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1582
  *     reasons.
  *     """
  *     def __init__(self, *, encoding=None, remove_blank_text=False,             # <<<<<<<<<<<<<<
@@ -99406,7 +99850,7 @@ static int __pyx_pf_4lxml_5etree_10HTMLParser___init__(struct __pyx_obj_4lxml_5e
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1568
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1624
  *     source, you can pass the ``base_url``.
  *     """
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):             # <<<<<<<<<<<<<<
@@ -99459,7 +99903,7 @@ static int __pyx_pw_4lxml_5etree_14HTMLPullParser_1__init__(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1568; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kwargs, values, pos_args, "__init__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1624; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -99474,7 +99918,7 @@ static int __pyx_pw_4lxml_5etree_14HTMLPullParser_1__init__(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1568; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1624; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_kwargs); __pyx_v_kwargs = 0;
   __Pyx_AddTraceback("lxml.etree.HTMLPullParser.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -99504,30 +99948,30 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
   __Pyx_RefNannySetupContext("__init__", 0);
   __Pyx_INCREF(__pyx_v_events);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1569
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1625
  *     """
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):
  *         HTMLParser.__init__(self, **kwargs)             # <<<<<<<<<<<<<<
  *         if events is None:
  *             events = ('end',)
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_HTMLParser)), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_HTMLParser)), __pyx_n_s_init); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
   __pyx_t_3 = __pyx_v_kwargs;
   __Pyx_INCREF(__pyx_t_3);
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1570
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1626
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):
  *         HTMLParser.__init__(self, **kwargs)
  *         if events is None:             # <<<<<<<<<<<<<<
@@ -99538,7 +99982,7 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
   __pyx_t_6 = (__pyx_t_5 != 0);
   if (__pyx_t_6) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1571
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1627
  *         HTMLParser.__init__(self, **kwargs)
  *         if events is None:
  *             events = ('end',)             # <<<<<<<<<<<<<<
@@ -99551,29 +99995,29 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1572
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1628
  *         if events is None:
  *             events = ('end',)
  *         self._setBaseURL(base_url)             # <<<<<<<<<<<<<<
  *         self._collectEvents(events, tag)
  * 
  */
-  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._setBaseURL(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_base_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._setBaseURL(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_base_url); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1573
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1629
  *             events = ('end',)
  *         self._setBaseURL(base_url)
  *         self._collectEvents(events, tag)             # <<<<<<<<<<<<<<
  * 
  *     def read_events(self):
  */
-  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._collectEvents(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_events, __pyx_v_tag); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1573; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._collectEvents(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self), __pyx_v_events, __pyx_v_tag); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1568
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1624
  *     source, you can pass the ``base_url``.
  *     """
  *     def __init__(self, events=None, *, tag=None, base_url=None, **kwargs):             # <<<<<<<<<<<<<<
@@ -99597,7 +100041,7 @@ static int __pyx_pf_4lxml_5etree_14HTMLPullParser___init__(struct __pyx_obj_4lxm
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1575
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1631
  *         self._collectEvents(events, tag)
  * 
  *     def read_events(self):             # <<<<<<<<<<<<<<
@@ -99627,7 +100071,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14HTMLPullParser_2read_events(struct __py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("read_events", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1576
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1632
  * 
  *     def read_events(self):
  *         return (<_SaxParserContext?>self._getPushParserContext()).events_iterator             # <<<<<<<<<<<<<<
@@ -99635,15 +100079,15 @@ static PyObject *__pyx_pf_4lxml_5etree_14HTMLPullParser_2read_events(struct __py
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab)->__pyx_base.__pyx_base.__pyx_base._getPushParserContext(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_self))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__SaxParserContext)))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_4lxml_5etree__SaxParserContext)))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_INCREF(((PyObject *)((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_t_1)->events_iterator));
   __pyx_r = ((PyObject *)((struct __pyx_obj_4lxml_5etree__SaxParserContext *)__pyx_t_1)->events_iterator);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1575
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1631
  *         self._collectEvents(events, tag)
  * 
  *     def read_events(self):             # <<<<<<<<<<<<<<
@@ -99662,7 +100106,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14HTMLPullParser_2read_events(struct __py
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1583
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1639
  * ############################################################
  * 
  * cdef xmlDoc* _parseDoc(text, filename, _BaseParser parser) except NULL:             # <<<<<<<<<<<<<<
@@ -99691,7 +100135,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
   __Pyx_INCREF(__pyx_v_text);
   __Pyx_INCREF((PyObject *)__pyx_v_parser);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1588
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1644
  *     cdef Py_ssize_t c_len
  *     cdef bint is_pep393_string
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -99702,14 +100146,14 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1589
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1645
  *     cdef bint is_pep393_string
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()             # <<<<<<<<<<<<<<
  *     if not filename:
  *         c_filename = NULL
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1645; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_3));
     __pyx_t_3 = 0;
@@ -99717,18 +100161,18 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1590
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1646
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     if not filename:             # <<<<<<<<<<<<<<
  *         c_filename = NULL
  *     else:
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_filename); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1590; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_filename); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1646; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = ((!__pyx_t_2) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1591
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1647
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     if not filename:
  *         c_filename = NULL             # <<<<<<<<<<<<<<
@@ -99740,19 +100184,19 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1593
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1649
  *         c_filename = NULL
  *     else:
  *         filename_utf = _encodeFilenameUTF8(filename)             # <<<<<<<<<<<<<<
  *         c_filename = _cstr(filename_utf)
  *     if isinstance(text, unicode):
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__encodeFilenameUTF8(__pyx_v_filename); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1593; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_4lxml_5etree__encodeFilenameUTF8(__pyx_v_filename); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1649; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_filename_utf = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1594
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1650
  *     else:
  *         filename_utf = _encodeFilenameUTF8(filename)
  *         c_filename = _cstr(filename_utf)             # <<<<<<<<<<<<<<
@@ -99763,7 +100207,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1595
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1651
  *         filename_utf = _encodeFilenameUTF8(filename)
  *         c_filename = _cstr(filename_utf)
  *     if isinstance(text, unicode):             # <<<<<<<<<<<<<<
@@ -99774,7 +100218,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1597
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1653
  *     if isinstance(text, unicode):
  *         is_pep393_string = (
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(text))             # <<<<<<<<<<<<<<
@@ -99789,7 +100233,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     }
     __pyx_v_is_pep393_string = __pyx_t_1;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1598
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1654
  *         is_pep393_string = (
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(text))
  *         if is_pep393_string:             # <<<<<<<<<<<<<<
@@ -99799,7 +100243,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     __pyx_t_1 = (__pyx_v_is_pep393_string != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1599
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1655
  *             python.PEP393_ENABLED and python.PyUnicode_IS_READY(text))
  *         if is_pep393_string:
  *             c_len = python.PyUnicode_GET_LENGTH(text)             # <<<<<<<<<<<<<<
@@ -99808,7 +100252,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  */
       __pyx_v_c_len = PyUnicode_GET_LENGTH(__pyx_v_text);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1600
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1656
  *         if is_pep393_string:
  *             c_len = python.PyUnicode_GET_LENGTH(text)
  *             c_len *= python.PyUnicode_KIND(text)             # <<<<<<<<<<<<<<
@@ -99820,7 +100264,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1602
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1658
  *             c_len *= python.PyUnicode_KIND(text)
  *         else:
  *             c_len = python.PyUnicode_GET_DATA_SIZE(text)             # <<<<<<<<<<<<<<
@@ -99831,7 +100275,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     }
     __pyx_L6:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1603
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1659
  *         else:
  *             c_len = python.PyUnicode_GET_DATA_SIZE(text)
  *         if c_len > limits.INT_MAX:             # <<<<<<<<<<<<<<
@@ -99841,36 +100285,36 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     __pyx_t_1 = ((__pyx_v_c_len > INT_MAX) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1605
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1661
  *         if c_len > limits.INT_MAX:
  *             return (<_BaseParser>parser)._parseDocFromFilelike(
  *                 StringIO(text), filename, None)             # <<<<<<<<<<<<<<
  *         if _UNICODE_ENCODING is NULL and not is_pep393_string:
  *             text = (<unicode>text).encode('utf8')
  */
-      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_v_text);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_text);
       __Pyx_GIVEREF(__pyx_v_text);
-      __pyx_t_4 = PyObject_Call(__pyx_v_4lxml_5etree_StringIO, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1605; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_StringIO, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1661; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1604
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1660
  *             c_len = python.PyUnicode_GET_DATA_SIZE(text)
  *         if c_len > limits.INT_MAX:
  *             return (<_BaseParser>parser)._parseDocFromFilelike(             # <<<<<<<<<<<<<<
  *                 StringIO(text), filename, None)
  *         if _UNICODE_ENCODING is NULL and not is_pep393_string:
  */
-      __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_t_4, __pyx_v_filename, Py_None); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1604; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_t_4, __pyx_v_filename, Py_None); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1660; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_r = __pyx_t_5;
       goto __pyx_L0;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1606
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1662
  *             return (<_BaseParser>parser)._parseDocFromFilelike(
  *                 StringIO(text), filename, None)
  *         if _UNICODE_ENCODING is NULL and not is_pep393_string:             # <<<<<<<<<<<<<<
@@ -99886,7 +100330,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     }
     if (__pyx_t_6) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1607
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1663
  *                 StringIO(text), filename, None)
  *         if _UNICODE_ENCODING is NULL and not is_pep393_string:
  *             text = (<unicode>text).encode('utf8')             # <<<<<<<<<<<<<<
@@ -99895,56 +100339,56 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  */
       if (unlikely(__pyx_v_text == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "encode");
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __pyx_t_4 = PyUnicode_AsUTF8String(((PyObject*)__pyx_v_text)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1607; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyUnicode_AsUTF8String(((PyObject*)__pyx_v_text)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_text, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1609
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1665
  *             text = (<unicode>text).encode('utf8')
  *             return (<_BaseParser>parser)._parseDocFromFilelike(
  *                 BytesIO(text), filename, "UTF-8")             # <<<<<<<<<<<<<<
  *         return (<_BaseParser>parser)._parseUnicodeDoc(text, c_filename)
  *     else:
  */
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_v_text);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_text);
       __Pyx_GIVEREF(__pyx_v_text);
-      __pyx_t_3 = PyObject_Call(__pyx_v_4lxml_5etree_BytesIO, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1609; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_BytesIO, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1665; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1608
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1664
  *         if _UNICODE_ENCODING is NULL and not is_pep393_string:
  *             text = (<unicode>text).encode('utf8')
  *             return (<_BaseParser>parser)._parseDocFromFilelike(             # <<<<<<<<<<<<<<
  *                 BytesIO(text), filename, "UTF-8")
  *         return (<_BaseParser>parser)._parseUnicodeDoc(text, c_filename)
  */
-      __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_t_3, __pyx_v_filename, __pyx_kp_s_UTF_8); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1608; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_t_3, __pyx_v_filename, __pyx_kp_s_UTF_8); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1664; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_5;
       goto __pyx_L0;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1610
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1666
  *             return (<_BaseParser>parser)._parseDocFromFilelike(
  *                 BytesIO(text), filename, "UTF-8")
  *         return (<_BaseParser>parser)._parseUnicodeDoc(text, c_filename)             # <<<<<<<<<<<<<<
  *     else:
  *         c_len = python.PyBytes_GET_SIZE(text)
  */
-    __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseUnicodeDoc(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_v_text, __pyx_v_c_filename); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1610; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseUnicodeDoc(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_v_text, __pyx_v_c_filename); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_r = __pyx_t_5;
     goto __pyx_L0;
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1612
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1668
  *         return (<_BaseParser>parser)._parseUnicodeDoc(text, c_filename)
  *     else:
  *         c_len = python.PyBytes_GET_SIZE(text)             # <<<<<<<<<<<<<<
@@ -99953,7 +100397,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  */
     __pyx_v_c_len = PyBytes_GET_SIZE(__pyx_v_text);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1613
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1669
  *     else:
  *         c_len = python.PyBytes_GET_SIZE(text)
  *         if c_len > limits.INT_MAX:             # <<<<<<<<<<<<<<
@@ -99963,36 +100407,36 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
     __pyx_t_6 = ((__pyx_v_c_len > INT_MAX) != 0);
     if (__pyx_t_6) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1615
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1671
  *         if c_len > limits.INT_MAX:
  *             return (<_BaseParser>parser)._parseDocFromFilelike(
  *                 BytesIO(text), filename, None)             # <<<<<<<<<<<<<<
  *         c_text = _cstr(text)
  *         return (<_BaseParser>parser)._parseDoc(c_text, c_len, c_filename)
  */
-      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_v_text);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_text);
       __Pyx_GIVEREF(__pyx_v_text);
-      __pyx_t_4 = PyObject_Call(__pyx_v_4lxml_5etree_BytesIO, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1615; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_BytesIO, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1614
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1670
  *         c_len = python.PyBytes_GET_SIZE(text)
  *         if c_len > limits.INT_MAX:
  *             return (<_BaseParser>parser)._parseDocFromFilelike(             # <<<<<<<<<<<<<<
  *                 BytesIO(text), filename, None)
  *         c_text = _cstr(text)
  */
-      __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_t_4, __pyx_v_filename, Py_None); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1614; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_t_4, __pyx_v_filename, Py_None); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __pyx_r = __pyx_t_5;
       goto __pyx_L0;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1616
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1672
  *             return (<_BaseParser>parser)._parseDocFromFilelike(
  *                 BytesIO(text), filename, None)
  *         c_text = _cstr(text)             # <<<<<<<<<<<<<<
@@ -100001,19 +100445,19 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
  */
     __pyx_v_c_text = PyBytes_AS_STRING(__pyx_v_text);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1617
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1673
  *                 BytesIO(text), filename, None)
  *         c_text = _cstr(text)
  *         return (<_BaseParser>parser)._parseDoc(c_text, c_len, c_filename)             # <<<<<<<<<<<<<<
  * 
  * cdef xmlDoc* _parseDocFromFile(filename8, _BaseParser parser) except NULL:
  */
-    __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDoc(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_v_c_text, __pyx_v_c_len, __pyx_v_c_filename); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1617; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDoc(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_v_c_text, __pyx_v_c_len, __pyx_v_c_filename); if (unlikely(__pyx_t_5 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_r = __pyx_t_5;
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1583
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1639
  * ############################################################
  * 
  * cdef xmlDoc* _parseDoc(text, filename, _BaseParser parser) except NULL:             # <<<<<<<<<<<<<<
@@ -100035,7 +100479,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDoc(PyObject *__pyx_v_text, PyObject *
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1619
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1675
  *         return (<_BaseParser>parser)._parseDoc(c_text, c_len, c_filename)
  * 
  * cdef xmlDoc* _parseDocFromFile(filename8, _BaseParser parser) except NULL:             # <<<<<<<<<<<<<<
@@ -100056,7 +100500,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFile(PyObject *__pyx_v_filename
   __Pyx_RefNannySetupContext("_parseDocFromFile", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_parser);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1620
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1676
  * 
  * cdef xmlDoc* _parseDocFromFile(filename8, _BaseParser parser) except NULL:
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -100067,14 +100511,14 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFile(PyObject *__pyx_v_filename
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1621
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1677
  * cdef xmlDoc* _parseDocFromFile(filename8, _BaseParser parser) except NULL:
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()             # <<<<<<<<<<<<<<
  *     return (<_BaseParser>parser)._parseDocFromFile(_cstr(filename8))
  * 
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1677; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_3));
     __pyx_t_3 = 0;
@@ -100082,18 +100526,18 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFile(PyObject *__pyx_v_filename
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1622
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1678
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     return (<_BaseParser>parser)._parseDocFromFile(_cstr(filename8))             # <<<<<<<<<<<<<<
  * 
  * cdef xmlDoc* _parseDocFromFilelike(source, filename,
  */
-  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFile(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), PyBytes_AS_STRING(__pyx_v_filename8)); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1622; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFile(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), PyBytes_AS_STRING(__pyx_v_filename8)); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_t_4;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1619
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1675
  *         return (<_BaseParser>parser)._parseDoc(c_text, c_len, c_filename)
  * 
  * cdef xmlDoc* _parseDocFromFile(filename8, _BaseParser parser) except NULL:             # <<<<<<<<<<<<<<
@@ -100112,7 +100556,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFile(PyObject *__pyx_v_filename
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1624
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1680
  *     return (<_BaseParser>parser)._parseDocFromFile(_cstr(filename8))
  * 
  * cdef xmlDoc* _parseDocFromFilelike(source, filename,             # <<<<<<<<<<<<<<
@@ -100133,7 +100577,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFilelike(PyObject *__pyx_v_sour
   __Pyx_RefNannySetupContext("_parseDocFromFilelike", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_parser);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1626
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1682
  * cdef xmlDoc* _parseDocFromFilelike(source, filename,
  *                                    _BaseParser parser) except NULL:
  *     if parser is None:             # <<<<<<<<<<<<<<
@@ -100144,14 +100588,14 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFilelike(PyObject *__pyx_v_sour
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1627
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1683
  *                                    _BaseParser parser) except NULL:
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()             # <<<<<<<<<<<<<<
  *     return (<_BaseParser>parser)._parseDocFromFilelike(source, filename, None)
  * 
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_parser, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_3));
     __pyx_t_3 = 0;
@@ -100159,18 +100603,18 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFilelike(PyObject *__pyx_v_sour
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1628
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1684
  *     if parser is None:
  *         parser = __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  *     return (<_BaseParser>parser)._parseDocFromFilelike(source, filename, None)             # <<<<<<<<<<<<<<
  * 
  * cdef xmlDoc* _newXMLDoc() except NULL:
  */
-  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_v_source, __pyx_v_filename, Py_None); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((struct __pyx_vtabstruct_4lxml_5etree__BaseParser *)((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser)->__pyx_vtab)->_parseDocFromFilelike(((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_v_parser), __pyx_v_source, __pyx_v_filename, Py_None); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1684; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_t_4;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1624
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1680
  *     return (<_BaseParser>parser)._parseDocFromFile(_cstr(filename8))
  * 
  * cdef xmlDoc* _parseDocFromFilelike(source, filename,             # <<<<<<<<<<<<<<
@@ -100189,7 +100633,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__parseDocFromFilelike(PyObject *__pyx_v_sour
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1630
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1686
  *     return (<_BaseParser>parser)._parseDocFromFilelike(source, filename, None)
  * 
  * cdef xmlDoc* _newXMLDoc() except NULL:             # <<<<<<<<<<<<<<
@@ -100207,7 +100651,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_newXMLDoc", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1632
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1688
  * cdef xmlDoc* _newXMLDoc() except NULL:
  *     cdef xmlDoc* result
  *     result = tree.xmlNewDoc(NULL)             # <<<<<<<<<<<<<<
@@ -100216,7 +100660,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
  */
   __pyx_v_result = xmlNewDoc(NULL);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1633
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1689
  *     cdef xmlDoc* result
  *     result = tree.xmlNewDoc(NULL)
  *     if result is NULL:             # <<<<<<<<<<<<<<
@@ -100226,17 +100670,17 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
   __pyx_t_1 = ((__pyx_v_result == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1634
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1690
  *     result = tree.xmlNewDoc(NULL)
  *     if result is NULL:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     if result.encoding is NULL:
  *         result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")
  */
-    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1690; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1635
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1691
  *     if result is NULL:
  *         raise MemoryError()
  *     if result.encoding is NULL:             # <<<<<<<<<<<<<<
@@ -100246,7 +100690,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
   __pyx_t_1 = ((__pyx_v_result->encoding == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1636
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1692
  *         raise MemoryError()
  *     if result.encoding is NULL:
  *         result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")             # <<<<<<<<<<<<<<
@@ -100258,7 +100702,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1637
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1693
  *     if result.encoding is NULL:
  *         result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)             # <<<<<<<<<<<<<<
@@ -100267,7 +100711,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_result);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1638
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1694
  *         result.encoding = tree.xmlStrdup(<unsigned char*>"UTF-8")
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     return result             # <<<<<<<<<<<<<<
@@ -100277,7 +100721,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1630
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1686
  *     return (<_BaseParser>parser)._parseDocFromFilelike(source, filename, None)
  * 
  * cdef xmlDoc* _newXMLDoc() except NULL:             # <<<<<<<<<<<<<<
@@ -100294,7 +100738,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newXMLDoc(void) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1640
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1696
  *     return result
  * 
  * cdef xmlDoc* _newHTMLDoc() except NULL:             # <<<<<<<<<<<<<<
@@ -100312,7 +100756,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newHTMLDoc(void) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_newHTMLDoc", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1642
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1698
  * cdef xmlDoc* _newHTMLDoc() except NULL:
  *     cdef xmlDoc* result
  *     result = tree.htmlNewDoc(NULL, NULL)             # <<<<<<<<<<<<<<
@@ -100321,7 +100765,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newHTMLDoc(void) {
  */
   __pyx_v_result = htmlNewDoc(NULL, NULL);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1643
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1699
  *     cdef xmlDoc* result
  *     result = tree.htmlNewDoc(NULL, NULL)
  *     if result is NULL:             # <<<<<<<<<<<<<<
@@ -100331,17 +100775,17 @@ static xmlDoc *__pyx_f_4lxml_5etree__newHTMLDoc(void) {
   __pyx_t_1 = ((__pyx_v_result == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1644
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1700
  *     result = tree.htmlNewDoc(NULL, NULL)
  *     if result is NULL:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     return result
  */
-    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1644; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1645
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1701
  *     if result is NULL:
  *         raise MemoryError()
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)             # <<<<<<<<<<<<<<
@@ -100350,7 +100794,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newHTMLDoc(void) {
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_result);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1646
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1702
  *         raise MemoryError()
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     return result             # <<<<<<<<<<<<<<
@@ -100360,7 +100804,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newHTMLDoc(void) {
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1640
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1696
  *     return result
  * 
  * cdef xmlDoc* _newHTMLDoc() except NULL:             # <<<<<<<<<<<<<<
@@ -100377,7 +100821,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__newHTMLDoc(void) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1648
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1704
  *     return result
  * 
  * cdef xmlDoc* _copyDoc(xmlDoc* c_doc, int recursive) except NULL:             # <<<<<<<<<<<<<<
@@ -100395,7 +100839,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_copyDoc", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1650
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1706
  * cdef xmlDoc* _copyDoc(xmlDoc* c_doc, int recursive) except NULL:
  *     cdef xmlDoc* result
  *     if recursive:             # <<<<<<<<<<<<<<
@@ -100405,7 +100849,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
   __pyx_t_1 = (__pyx_v_recursive != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1651
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1707
  *     cdef xmlDoc* result
  *     if recursive:
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -100419,7 +100863,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
         #endif
         /*try:*/ {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1652
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1708
  *     if recursive:
  *         with nogil:
  *             result = tree.xmlCopyDoc(c_doc, recursive)             # <<<<<<<<<<<<<<
@@ -100429,7 +100873,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
           __pyx_v_result = xmlCopyDoc(__pyx_v_c_doc, __pyx_v_recursive);
         }
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1651
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1707
  *     cdef xmlDoc* result
  *     if recursive:
  *         with nogil:             # <<<<<<<<<<<<<<
@@ -100450,7 +100894,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1654
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1710
  *             result = tree.xmlCopyDoc(c_doc, recursive)
  *     else:
  *         result = tree.xmlCopyDoc(c_doc, 0)             # <<<<<<<<<<<<<<
@@ -100461,7 +100905,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1655
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1711
  *     else:
  *         result = tree.xmlCopyDoc(c_doc, 0)
  *     if result is NULL:             # <<<<<<<<<<<<<<
@@ -100471,17 +100915,17 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
   __pyx_t_1 = ((__pyx_v_result == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1656
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1712
  *         result = tree.xmlCopyDoc(c_doc, 0)
  *     if result is NULL:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     return result
  */
-    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1656; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1712; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1657
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1713
  *     if result is NULL:
  *         raise MemoryError()
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)             # <<<<<<<<<<<<<<
@@ -100490,7 +100934,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_result);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1658
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1714
  *         raise MemoryError()
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     return result             # <<<<<<<<<<<<<<
@@ -100500,7 +100944,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1648
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1704
  *     return result
  * 
  * cdef xmlDoc* _copyDoc(xmlDoc* c_doc, int recursive) except NULL:             # <<<<<<<<<<<<<<
@@ -100517,7 +100961,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDoc(xmlDoc *__pyx_v_c_doc, int __pyx_v_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1660
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1716
  *     return result
  * 
  * cdef xmlDoc* _copyDocRoot(xmlDoc* c_doc, xmlNode* c_new_root) except NULL:             # <<<<<<<<<<<<<<
@@ -100537,7 +100981,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_copyDocRoot", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1664
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1720
  *     cdef xmlDoc* result
  *     cdef xmlNode* c_node
  *     result = tree.xmlCopyDoc(c_doc, 0) # non recursive             # <<<<<<<<<<<<<<
@@ -100546,7 +100990,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
  */
   __pyx_v_result = xmlCopyDoc(__pyx_v_c_doc, 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1665
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1721
  *     cdef xmlNode* c_node
  *     result = tree.xmlCopyDoc(c_doc, 0) # non recursive
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)             # <<<<<<<<<<<<<<
@@ -100555,7 +100999,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, __pyx_v_result);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1666
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1722
  *     result = tree.xmlCopyDoc(c_doc, 0) # non recursive
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     with nogil:             # <<<<<<<<<<<<<<
@@ -100569,7 +101013,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
       #endif
       /*try:*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1667
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1723
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     with nogil:
  *         c_node = tree.xmlDocCopyNode(c_new_root, result, 1) # recursive             # <<<<<<<<<<<<<<
@@ -100579,7 +101023,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
         __pyx_v_c_node = xmlDocCopyNode(__pyx_v_c_new_root, __pyx_v_result, 1);
       }
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1666
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1722
  *     result = tree.xmlCopyDoc(c_doc, 0) # non recursive
  *     __GLOBAL_PARSER_CONTEXT.initDocDict(result)
  *     with nogil:             # <<<<<<<<<<<<<<
@@ -100597,7 +101041,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
       }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1668
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1724
  *     with nogil:
  *         c_node = tree.xmlDocCopyNode(c_new_root, result, 1) # recursive
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -100607,17 +101051,17 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1669
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1725
  *         c_node = tree.xmlDocCopyNode(c_new_root, result, 1) # recursive
  *     if c_node is NULL:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     tree.xmlDocSetRootElement(result, c_node)
  *     _copyTail(c_new_root.next, c_node)
  */
-    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1669; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1670
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1726
  *     if c_node is NULL:
  *         raise MemoryError()
  *     tree.xmlDocSetRootElement(result, c_node)             # <<<<<<<<<<<<<<
@@ -100626,16 +101070,16 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
  */
   xmlDocSetRootElement(__pyx_v_result, __pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1671
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1727
  *         raise MemoryError()
  *     tree.xmlDocSetRootElement(result, c_node)
  *     _copyTail(c_new_root.next, c_node)             # <<<<<<<<<<<<<<
  *     return result
  * 
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__copyTail(__pyx_v_c_new_root->next, __pyx_v_c_node); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1671; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_4lxml_5etree__copyTail(__pyx_v_c_new_root->next, __pyx_v_c_node); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1727; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1672
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1728
  *     tree.xmlDocSetRootElement(result, c_node)
  *     _copyTail(c_new_root.next, c_node)
  *     return result             # <<<<<<<<<<<<<<
@@ -100645,7 +101089,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1660
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1716
  *     return result
  * 
  * cdef xmlDoc* _copyDocRoot(xmlDoc* c_doc, xmlNode* c_new_root) except NULL:             # <<<<<<<<<<<<<<
@@ -100662,7 +101106,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__copyDocRoot(xmlDoc *__pyx_v_c_doc, xmlNode
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1674
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1730
  *     return result
  * 
  * cdef xmlNode* _copyNodeToDoc(xmlNode* c_node, xmlDoc* c_doc) except NULL:             # <<<<<<<<<<<<<<
@@ -100681,7 +101125,7 @@ static xmlNode *__pyx_f_4lxml_5etree__copyNodeToDoc(xmlNode *__pyx_v_c_node, xml
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_copyNodeToDoc", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1677
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1733
  *     u"Recursively copy the element into the document. c_doc is not modified."
  *     cdef xmlNode* c_root
  *     c_root = tree.xmlDocCopyNode(c_node, c_doc, 1) # recursive             # <<<<<<<<<<<<<<
@@ -100690,7 +101134,7 @@ static xmlNode *__pyx_f_4lxml_5etree__copyNodeToDoc(xmlNode *__pyx_v_c_node, xml
  */
   __pyx_v_c_root = xmlDocCopyNode(__pyx_v_c_node, __pyx_v_c_doc, 1);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1678
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1734
  *     cdef xmlNode* c_root
  *     c_root = tree.xmlDocCopyNode(c_node, c_doc, 1) # recursive
  *     if c_root is NULL:             # <<<<<<<<<<<<<<
@@ -100700,26 +101144,26 @@ static xmlNode *__pyx_f_4lxml_5etree__copyNodeToDoc(xmlNode *__pyx_v_c_node, xml
   __pyx_t_1 = ((__pyx_v_c_root == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1679
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1735
  *     c_root = tree.xmlDocCopyNode(c_node, c_doc, 1) # recursive
  *     if c_root is NULL:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     _copyTail(c_node.next, c_root)
  *     return c_root
  */
-    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_NoMemory(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1680
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1736
  *     if c_root is NULL:
  *         raise MemoryError()
  *     _copyTail(c_node.next, c_root)             # <<<<<<<<<<<<<<
  *     return c_root
  * 
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__copyTail(__pyx_v_c_node->next, __pyx_v_c_root); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_4lxml_5etree__copyTail(__pyx_v_c_node->next, __pyx_v_c_root); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1736; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1681
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1737
  *         raise MemoryError()
  *     _copyTail(c_node.next, c_root)
  *     return c_root             # <<<<<<<<<<<<<<
@@ -100729,7 +101173,7 @@ static xmlNode *__pyx_f_4lxml_5etree__copyNodeToDoc(xmlNode *__pyx_v_c_node, xml
   __pyx_r = __pyx_v_c_root;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1674
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1730
  *     return result
  * 
  * cdef xmlNode* _copyNodeToDoc(xmlNode* c_node, xmlDoc* c_doc) except NULL:             # <<<<<<<<<<<<<<
@@ -100746,7 +101190,7 @@ static xmlNode *__pyx_f_4lxml_5etree__copyNodeToDoc(xmlNode *__pyx_v_c_node, xml
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1688
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1744
  * ############################################################
  * 
  * cdef _Document _parseDocument(source, _BaseParser parser, base_url):             # <<<<<<<<<<<<<<
@@ -100771,7 +101215,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
   __Pyx_RefNannySetupContext("_parseDocument", 0);
   __Pyx_INCREF(__pyx_v_base_url);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1690
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1746
  * cdef _Document _parseDocument(source, _BaseParser parser, base_url):
  *     cdef _Document doc
  *     if _isString(source):             # <<<<<<<<<<<<<<
@@ -100781,22 +101225,22 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
   __pyx_t_1 = (_isString(__pyx_v_source) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1692
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1748
  *     if _isString(source):
  *         # parse the file directly from the filesystem
  *         doc = _parseDocumentFromURL(_encodeFilename(source), parser)             # <<<<<<<<<<<<<<
  *         # fix base URL if requested
  *         if base_url is not None:
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_source); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1692; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_4lxml_5etree__encodeFilename(__pyx_v_source); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocumentFromURL(__pyx_t_2, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1692; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseDocumentFromURL(__pyx_t_2, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1694
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1750
  *         doc = _parseDocumentFromURL(_encodeFilename(source), parser)
  *         # fix base URL if requested
  *         if base_url is not None:             # <<<<<<<<<<<<<<
@@ -100807,19 +101251,19 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
     __pyx_t_4 = (__pyx_t_1 != 0);
     if (__pyx_t_4) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1695
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1751
  *         # fix base URL if requested
  *         if base_url is not None:
  *             base_url = _encodeFilenameUTF8(base_url)             # <<<<<<<<<<<<<<
  *             if doc._c_doc.URL is not NULL:
  *                 tree.xmlFree(<char*>doc._c_doc.URL)
  */
-      __pyx_t_3 = __pyx_f_4lxml_5etree__encodeFilenameUTF8(__pyx_v_base_url); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1695; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_4lxml_5etree__encodeFilenameUTF8(__pyx_v_base_url); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1751; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_base_url, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1696
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1752
  *         if base_url is not None:
  *             base_url = _encodeFilenameUTF8(base_url)
  *             if doc._c_doc.URL is not NULL:             # <<<<<<<<<<<<<<
@@ -100829,7 +101273,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
       __pyx_t_4 = ((__pyx_v_doc->_c_doc->URL != NULL) != 0);
       if (__pyx_t_4) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1697
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1753
  *             base_url = _encodeFilenameUTF8(base_url)
  *             if doc._c_doc.URL is not NULL:
  *                 tree.xmlFree(<char*>doc._c_doc.URL)             # <<<<<<<<<<<<<<
@@ -100841,7 +101285,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
       }
       __pyx_L5:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1698
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1754
  *             if doc._c_doc.URL is not NULL:
  *                 tree.xmlFree(<char*>doc._c_doc.URL)
  *             doc._c_doc.URL = tree.xmlStrdup(_xcstr(base_url))             # <<<<<<<<<<<<<<
@@ -100853,7 +101297,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1699
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1755
  *                 tree.xmlFree(<char*>doc._c_doc.URL)
  *             doc._c_doc.URL = tree.xmlStrdup(_xcstr(base_url))
  *         return doc             # <<<<<<<<<<<<<<
@@ -100866,7 +101310,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1701
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1757
  *         return doc
  * 
  *     if base_url is not None:             # <<<<<<<<<<<<<<
@@ -100877,7 +101321,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
   __pyx_t_1 = (__pyx_t_4 != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1702
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1758
  * 
  *     if base_url is not None:
  *         url = base_url             # <<<<<<<<<<<<<<
@@ -100890,55 +101334,55 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1704
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1760
  *         url = base_url
  *     else:
  *         url = _getFilenameForFile(source)             # <<<<<<<<<<<<<<
  * 
  *     if hasattr(source, u'getvalue') and hasattr(source, u'tell'):
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__getFilenameForFile(__pyx_v_source); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1704; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_4lxml_5etree__getFilenameForFile(__pyx_v_source); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1760; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_url = __pyx_t_3;
     __pyx_t_3 = 0;
   }
   __pyx_L6:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1706
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1762
  *         url = _getFilenameForFile(source)
  * 
  *     if hasattr(source, u'getvalue') and hasattr(source, u'tell'):             # <<<<<<<<<<<<<<
  *         # StringIO - reading from start?
  *         if source.tell() == 0:
  */
-  __pyx_t_1 = PyObject_HasAttr(__pyx_v_source, __pyx_n_u_getvalue); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1706; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_HasAttr(__pyx_v_source, __pyx_n_u_getvalue); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1762; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if ((__pyx_t_1 != 0)) {
-    __pyx_t_4 = PyObject_HasAttr(__pyx_v_source, __pyx_n_u_tell); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1706; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_HasAttr(__pyx_v_source, __pyx_n_u_tell); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1762; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_5 = (__pyx_t_4 != 0);
   } else {
     __pyx_t_5 = (__pyx_t_1 != 0);
   }
   if (__pyx_t_5) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1708
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1764
  *     if hasattr(source, u'getvalue') and hasattr(source, u'tell'):
  *         # StringIO - reading from start?
  *         if source.tell() == 0:             # <<<<<<<<<<<<<<
  *             return _parseMemoryDocument(source.getvalue(), url, parser)
  * 
  */
-    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_tell); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_tell); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_int_0, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if (__pyx_t_5) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1709
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1765
  *         # StringIO - reading from start?
  *         if source.tell() == 0:
  *             return _parseMemoryDocument(source.getvalue(), url, parser)             # <<<<<<<<<<<<<<
@@ -100946,12 +101390,12 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  *     # Support for file-like objects (urlgrabber.urlopen, ...)
  */
       __Pyx_XDECREF(((PyObject *)__pyx_r));
-      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_getvalue); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1709; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_getvalue); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_2 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1709; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseMemoryDocument(__pyx_t_2, __pyx_v_url, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1709; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseMemoryDocument(__pyx_t_2, __pyx_v_url, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_r = ((struct LxmlDocument *)__pyx_t_3);
@@ -100962,18 +101406,18 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
   }
   __pyx_L7:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1712
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1768
  * 
  *     # Support for file-like objects (urlgrabber.urlopen, ...)
  *     if hasattr(source, u'read'):             # <<<<<<<<<<<<<<
  *         return _parseFilelikeDocument(source, url, parser)
  * 
  */
-  __pyx_t_5 = PyObject_HasAttr(__pyx_v_source, __pyx_n_u_read); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1712; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_HasAttr(__pyx_v_source, __pyx_n_u_read); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_t_1 = (__pyx_t_5 != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1713
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1769
  *     # Support for file-like objects (urlgrabber.urlopen, ...)
  *     if hasattr(source, u'read'):
  *         return _parseFilelikeDocument(source, url, parser)             # <<<<<<<<<<<<<<
@@ -100981,14 +101425,14 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  *     raise TypeError, u"cannot parse from '%s'" % python._fqtypename(source).decode('UTF-8')
  */
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseFilelikeDocument(__pyx_v_source, __pyx_v_url, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1713; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__parseFilelikeDocument(__pyx_v_source, __pyx_v_url, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = ((struct LxmlDocument *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1715
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1771
  *         return _parseFilelikeDocument(source, url, parser)
  * 
  *     raise TypeError, u"cannot parse from '%s'" % python._fqtypename(source).decode('UTF-8')             # <<<<<<<<<<<<<<
@@ -100996,16 +101440,16 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
  * cdef _Document _parseDocumentFromURL(url, _BaseParser parser):
  */
   __pyx_t_6 = _fqtypename(__pyx_v_source);
-  __pyx_t_3 = __Pyx_decode_c_string(__pyx_t_6, 0, strlen(__pyx_t_6), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_decode_c_string(__pyx_t_6, 0, strlen(__pyx_t_6), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_2 = PyUnicode_Format(__pyx_kp_u_cannot_parse_from_s, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyUnicode_Format(__pyx_kp_u_cannot_parse_from_s, __pyx_t_3); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_Raise(__pyx_builtin_TypeError, __pyx_t_2, 0, 0);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1688
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1744
  * ############################################################
  * 
  * cdef _Document _parseDocument(source, _BaseParser parser, base_url):             # <<<<<<<<<<<<<<
@@ -101028,7 +101472,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocument(PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1717
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1773
  *     raise TypeError, u"cannot parse from '%s'" % python._fqtypename(source).decode('UTF-8')
  * 
  * cdef _Document _parseDocumentFromURL(url, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -101047,17 +101491,17 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocumentFromURL(PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseDocumentFromURL", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1718
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1774
  * 
  * cdef _Document _parseDocumentFromURL(url, _BaseParser parser):
  *     c_doc = _parseDocFromFile(url, parser)             # <<<<<<<<<<<<<<
  *     return _documentFactory(c_doc, parser)
  * 
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__parseDocFromFile(__pyx_v_url, __pyx_v_parser); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_4lxml_5etree__parseDocFromFile(__pyx_v_url, __pyx_v_parser); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_c_doc = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1719
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1775
  * cdef _Document _parseDocumentFromURL(url, _BaseParser parser):
  *     c_doc = _parseDocFromFile(url, parser)
  *     return _documentFactory(c_doc, parser)             # <<<<<<<<<<<<<<
@@ -101065,13 +101509,13 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocumentFromURL(PyObject
  * cdef _Document _parseMemoryDocument(text, url, _BaseParser parser):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = ((struct LxmlDocument *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1717
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1773
  *     raise TypeError, u"cannot parse from '%s'" % python._fqtypename(source).decode('UTF-8')
  * 
  * cdef _Document _parseDocumentFromURL(url, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -101090,7 +101534,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseDocumentFromURL(PyObject
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1721
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1777
  *     return _documentFactory(c_doc, parser)
  * 
  * cdef _Document _parseMemoryDocument(text, url, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -101111,7 +101555,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseMemoryDocument", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1722
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1778
  * 
  * cdef _Document _parseMemoryDocument(text, url, _BaseParser parser):
  *     if isinstance(text, unicode):             # <<<<<<<<<<<<<<
@@ -101122,34 +101566,34 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1723
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1779
  * cdef _Document _parseMemoryDocument(text, url, _BaseParser parser):
  *     if isinstance(text, unicode):
  *         if _hasEncodingDeclaration(text):             # <<<<<<<<<<<<<<
  *             raise ValueError(
  *                 u"Unicode strings with encoding declaration are not supported. "
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree__hasEncodingDeclaration(__pyx_v_text); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_4lxml_5etree__hasEncodingDeclaration(__pyx_v_text); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1779; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1724
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1780
  *     if isinstance(text, unicode):
  *         if _hasEncodingDeclaration(text):
  *             raise ValueError(             # <<<<<<<<<<<<<<
  *                 u"Unicode strings with encoding declaration are not supported. "
  *                 u"Please use bytes input or XML fragments without declaration.")
  */
-      __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__49, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1724; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__49, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1724; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     goto __pyx_L3;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1727
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1783
  *                 u"Unicode strings with encoding declaration are not supported. "
  *                 u"Please use bytes input or XML fragments without declaration.")
  *     elif not isinstance(text, bytes):             # <<<<<<<<<<<<<<
@@ -101160,7 +101604,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
   __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1728
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1784
  *                 u"Please use bytes input or XML fragments without declaration.")
  *     elif not isinstance(text, bytes):
  *         raise ValueError, u"can only parse strings"             # <<<<<<<<<<<<<<
@@ -101168,21 +101612,21 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
  *     return _documentFactory(c_doc, parser)
  */
     __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_u_can_only_parse_strings, 0, 0);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1728; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1729
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1785
  *     elif not isinstance(text, bytes):
  *         raise ValueError, u"can only parse strings"
  *     c_doc = _parseDoc(text, url, parser)             # <<<<<<<<<<<<<<
  *     return _documentFactory(c_doc, parser)
  * 
  */
-  __pyx_t_4 = __pyx_f_4lxml_5etree__parseDoc(__pyx_v_text, __pyx_v_url, __pyx_v_parser); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_4lxml_5etree__parseDoc(__pyx_v_text, __pyx_v_url, __pyx_v_parser); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_c_doc = __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1730
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1786
  *         raise ValueError, u"can only parse strings"
  *     c_doc = _parseDoc(text, url, parser)
  *     return _documentFactory(c_doc, parser)             # <<<<<<<<<<<<<<
@@ -101190,13 +101634,13 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
  * cdef _Document _parseFilelikeDocument(source, url, _BaseParser parser):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = ((struct LxmlDocument *)__pyx_t_3);
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1721
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1777
  *     return _documentFactory(c_doc, parser)
  * 
  * cdef _Document _parseMemoryDocument(text, url, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -101215,7 +101659,7 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseMemoryDocument(PyObject *
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1732
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1788
  *     return _documentFactory(c_doc, parser)
  * 
  * cdef _Document _parseFilelikeDocument(source, url, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -101234,28 +101678,28 @@ static struct LxmlDocument *__pyx_f_4lxml_5etree__parseFilelikeDocument(PyObject
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_parseFilelikeDocument", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1733
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1789
  * 
  * cdef _Document _parseFilelikeDocument(source, url, _BaseParser parser):
  *     c_doc = _parseDocFromFilelike(source, url, parser)             # <<<<<<<<<<<<<<
  *     return _documentFactory(c_doc, parser)
  */
-  __pyx_t_1 = __pyx_f_4lxml_5etree__parseDocFromFilelike(__pyx_v_source, __pyx_v_url, __pyx_v_parser); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_4lxml_5etree__parseDocFromFilelike(__pyx_v_source, __pyx_v_url, __pyx_v_parser); if (unlikely(__pyx_t_1 == NULL)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_c_doc = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1734
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1790
  * cdef _Document _parseFilelikeDocument(source, url, _BaseParser parser):
  *     c_doc = _parseDocFromFilelike(source, url, parser)
  *     return _documentFactory(c_doc, parser)             # <<<<<<<<<<<<<<
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = ((struct LxmlDocument *)__pyx_t_2);
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1732
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1788
  *     return _documentFactory(c_doc, parser)
  * 
  * cdef _Document _parseFilelikeDocument(source, url, _BaseParser parser):             # <<<<<<<<<<<<<<
@@ -101935,7 +102379,7 @@ static int __pyx_pf_4lxml_5etree_17_SaxParserContext___cinit__(struct __pyx_obj_
  * 
  *     cdef void _setSaxParserTarget(self, _SaxParserTarget target):
  */
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ParseEventsIterator)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ParseEventsIterator)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->events_iterator);
@@ -102732,7 +103176,7 @@ static PyObject *__pyx_f_4lxml_5etree_17_SaxParserContext__setEventFilter(struct
     __Pyx_INCREF(__pyx_v_tag);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
-    __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_GIVEREF(__pyx_t_7);
@@ -108580,7 +109024,7 @@ static PyObject *__pyx_f_4lxml_5etree_11TreeBuilder__handleSaxStart(struct __pyx
     __Pyx_INCREF(__pyx_v_attrib);
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_attrib);
     __Pyx_GIVEREF(__pyx_v_attrib);
-    __pyx_t_5 = PyObject_Call(__pyx_v_self->_factory, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_self->_factory, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_4lxml_5etree__Element))))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -108788,7 +109232,7 @@ static PyObject *__pyx_f_4lxml_5etree_11TreeBuilder__handleSaxEnd(struct __pyx_o
  *         self._in_tail = 1
  *         return self._last
  */
-  __pyx_t_2 = PyObject_Call(__pyx_v_self->_element_stack_pop, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_self->_element_stack_pop, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_4lxml_5etree__Element))))) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 689; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GIVEREF(__pyx_t_2);
@@ -108933,7 +109377,7 @@ static PyObject *__pyx_f_4lxml_5etree_11TreeBuilder__handleSaxPi(struct __pyx_ob
   __Pyx_INCREF(__pyx_v_data);
   PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_data);
   __Pyx_GIVEREF(__pyx_v_data);
-  __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -109063,7 +109507,7 @@ static PyObject *__pyx_f_4lxml_5etree_11TreeBuilder__handleSaxComment(struct __p
   __Pyx_INCREF(__pyx_v_comment);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_comment);
   __Pyx_GIVEREF(__pyx_v_comment);
-  __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -110049,7 +110493,7 @@ static int __pyx_pf_4lxml_5etree_22_PythonSaxParserTarget___cinit__(struct __pyx
           __Pyx_INCREF(__pyx_v_self->_target_start);
           PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_self->_target_start);
           __Pyx_GIVEREF(__pyx_v_self->_target_start);
-          __pyx_t_10 = PyObject_Call(__pyx_v_4lxml_5etree_inspect_getargspec, __pyx_t_4, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
+          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_inspect_getargspec, __pyx_t_4, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 36; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
           __Pyx_GOTREF(__pyx_t_10);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
           __pyx_v_arguments = __pyx_t_10;
@@ -110673,7 +111117,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxStart(s
     __Pyx_INCREF(__pyx_v_nsmap);
     PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_nsmap);
     __Pyx_GIVEREF(__pyx_v_nsmap);
-    __pyx_t_3 = PyObject_Call(__pyx_v_self->_target_start, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_self->_target_start, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 75; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_r = __pyx_t_3;
@@ -110698,7 +111142,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxStart(s
     __Pyx_INCREF(__pyx_v_attrib);
     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_attrib);
     __Pyx_GIVEREF(__pyx_v_attrib);
-    __pyx_t_2 = PyObject_Call(__pyx_v_self->_target_start, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_self->_target_start, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_r = __pyx_t_2;
@@ -110757,7 +111201,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxEnd(str
   __Pyx_INCREF(__pyx_v_tag);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_tag);
   __Pyx_GIVEREF(__pyx_v_tag);
-  __pyx_t_2 = PyObject_Call(__pyx_v_self->_target_end, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_self->_target_end, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 80; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -110814,7 +111258,7 @@ static int __pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxData(struct _
   __Pyx_INCREF(__pyx_v_data);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_data);
   __Pyx_GIVEREF(__pyx_v_data);
-  __pyx_t_2 = PyObject_Call(__pyx_v_self->_target_data, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_self->_target_data, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -110876,7 +111320,7 @@ static int __pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxDoctype(struc
   __Pyx_INCREF(__pyx_v_system_id);
   PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_system_id);
   __Pyx_GIVEREF(__pyx_v_system_id);
-  __pyx_t_2 = PyObject_Call(__pyx_v_self->_target_doctype, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_self->_target_doctype, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 86; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -110936,7 +111380,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxPi(stru
   __Pyx_INCREF(__pyx_v_data);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_data);
   __Pyx_GIVEREF(__pyx_v_data);
-  __pyx_t_2 = PyObject_Call(__pyx_v_self->_target_pi, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_self->_target_pi, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -110994,7 +111438,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxComment
   __Pyx_INCREF(__pyx_v_comment);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_comment);
   __Pyx_GIVEREF(__pyx_v_comment);
-  __pyx_t_2 = PyObject_Call(__pyx_v_self->_target_comment, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_self->_target_comment, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -111093,7 +111537,7 @@ static int __pyx_f_4lxml_5etree_20_TargetParserContext__setTarget(struct __pyx_o
     __Pyx_INCREF(__pyx_v_target);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_target);
     __Pyx_GIVEREF(__pyx_v_target);
-    __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__PythonSaxParserTarget)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__PythonSaxParserTarget)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_target, __pyx_t_5);
@@ -111462,7 +111906,7 @@ static PyObject *__pyx_f_4lxml_5etree_20_TargetParserContext__handleParseResult(
  */
         __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_python_target, __pyx_n_s_close); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
         __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
+        __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 135; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
@@ -111492,7 +111936,7 @@ static PyObject *__pyx_f_4lxml_5etree_20_TargetParserContext__handleParseResult(
  */
         __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_exc_info); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
         __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_11 = PyObject_Call(__pyx_t_12, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
+        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L5_except_error;}
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
         __pyx_v_exc = __pyx_t_11;
@@ -111513,7 +111957,7 @@ static PyObject *__pyx_f_4lxml_5etree_20_TargetParserContext__handleParseResult(
           /*try:*/ {
             __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_python_target, __pyx_n_s_close); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L16_error;}
             __Pyx_GOTREF(__pyx_t_11);
-            __pyx_t_12 = PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L16_error;}
+            __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L16_error;}
             __Pyx_GOTREF(__pyx_t_12);
             __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
             __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
@@ -111593,7 +112037,7 @@ static PyObject *__pyx_f_4lxml_5etree_20_TargetParserContext__handleParseResult(
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_python_target, __pyx_n_s_close); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_10);
-  __pyx_t_9 = PyObject_Call(__pyx_t_10, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   __pyx_r = __pyx_t_9;
@@ -111800,7 +112244,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_20_TargetParserContext__handleParseResultDoc
  */
         __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_python_target, __pyx_n_s_close); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
         __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
+        __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 159; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
         __Pyx_GOTREF(__pyx_t_12);
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
@@ -111830,7 +112274,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_20_TargetParserContext__handleParseResultDoc
  */
         __pyx_t_12 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_exc_info); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
         __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_11 = PyObject_Call(__pyx_t_12, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
+        __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 162; __pyx_clineno = __LINE__; goto __pyx_L6_except_error;}
         __Pyx_GOTREF(__pyx_t_11);
         __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
         __pyx_v_exc = __pyx_t_11;
@@ -111851,7 +112295,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_20_TargetParserContext__handleParseResultDoc
           /*try:*/ {
             __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_python_target, __pyx_n_s_close); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L16_error;}
             __Pyx_GOTREF(__pyx_t_11);
-            __pyx_t_12 = PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L16_error;}
+            __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L16_error;}
             __Pyx_GOTREF(__pyx_t_12);
             __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
             __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
@@ -111929,7 +112373,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_20_TargetParserContext__handleParseResultDoc
  */
   __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_python_target, __pyx_n_s_close); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_10);
-  __pyx_t_9 = PyObject_Call(__pyx_t_10, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   __pyx_v_parse_result = __pyx_t_9;
@@ -111947,7 +112391,7 @@ static xmlDoc *__pyx_f_4lxml_5etree_20_TargetParserContext__handleParseResultDoc
   __Pyx_INCREF(__pyx_v_parse_result);
   PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_parse_result);
   __Pyx_GIVEREF(__pyx_v_parse_result);
-  __pyx_t_8 = PyObject_Call(__pyx_t_9, __pyx_t_10, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_10, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
@@ -112031,7 +112475,7 @@ static int __pyx_f_4lxml_5etree__findOutputMethod(PyObject *__pyx_v_method) {
  */
   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_method, __pyx_n_s_lower); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF_SET(__pyx_v_method, __pyx_t_4);
@@ -112114,7 +112558,7 @@ static int __pyx_f_4lxml_5etree__findOutputMethod(PyObject *__pyx_v_method) {
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 25; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_Raise(__pyx_t_4, 0, 0, 0);
@@ -112410,7 +112854,7 @@ static PyObject *__pyx_f_4lxml_5etree__textToString(xmlNode *__pyx_v_c_node, PyO
  */
       __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_lower); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_t_5);
@@ -112425,16 +112869,12 @@ static PyObject *__pyx_f_4lxml_5etree__textToString(xmlNode *__pyx_v_c_node, PyO
  */
       __Pyx_INCREF(__pyx_v_encoding);
       __pyx_t_5 = __pyx_v_encoding;
-      __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_n_u_utf8, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
-      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      if (((int)__pyx_t_3)) {
-        __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_kp_u_utf_8, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
-        __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
-        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-        __pyx_t_2 = ((int)__pyx_t_1);
+      __pyx_t_3 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_n_u_utf8, Py_NE)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
+      if (__pyx_t_3) {
+        __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_t_5, __pyx_kp_u_utf_8, Py_NE)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
+        __pyx_t_2 = __pyx_t_1;
       } else {
-        __pyx_t_2 = ((int)__pyx_t_3);
+        __pyx_t_2 = __pyx_t_3;
       }
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_3 = (__pyx_t_2 != 0);
@@ -112910,7 +113350,7 @@ static PyObject *__pyx_f_4lxml_5etree__tostring(struct LxmlElement *__pyx_v_elem
  */
       __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_encoding, __pyx_n_s_decode); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_6 = PyObject_Call(__pyx_t_4, __pyx_tuple__50, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__50, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF_SET(__pyx_v_encoding, __pyx_t_6);
@@ -113718,7 +114158,7 @@ static PyObject *__pyx_f_4lxml_5etree__raiseSerialisationError(int __pyx_v_error
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -115331,7 +115771,7 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
  *                 fileobj=filelike, mode='wb', compresslevel=compression)
  *             self._close_filelike = filelike.close
  */
-    __pyx_t_5 = PyObject_Call(__pyx_v_4lxml_5etree_GzipFile, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_GzipFile, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 376; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF_SET(__pyx_v_filelike, __pyx_t_5);
@@ -115386,7 +115826,7 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
  *         else:
  *             self._exc_context = exc_context
  */
-    __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ExceptionContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ExceptionContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 381; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
     __Pyx_GOTREF(__pyx_v_self->_exc_context);
@@ -115422,7 +115862,7 @@ static int __pyx_pf_4lxml_5etree_15_FilelikeWriter___cinit__(struct __pyx_obj_4l
  * 
  *     cdef tree.xmlOutputBuffer* _createOutputBuffer(
  */
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __Pyx_GOTREF(__pyx_v_self->error_log);
@@ -115621,7 +116061,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_write(struct __pyx_obj_4lxml_5
         __Pyx_INCREF(__pyx_v_py_buffer);
         PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_py_buffer);
         __Pyx_GIVEREF(__pyx_v_py_buffer);
-        __pyx_t_8 = PyObject_Call(__pyx_t_7, __pyx_t_6, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
         __Pyx_GOTREF(__pyx_t_8);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -115817,7 +116257,7 @@ static int __pyx_f_4lxml_5etree_15_FilelikeWriter_close(struct __pyx_obj_4lxml_5
  *             # we should not close the file here as we didn't open it
  *             self._filelike = None
  */
-          __pyx_t_6 = PyObject_Call(__pyx_v_self->_close_filelike, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_self->_close_filelike, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
           goto __pyx_L14;
@@ -116141,7 +116581,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  *             gzip_file = GzipFile(
  *                 fileobj=bytes_out, mode='wb', compresslevel=compression)
  */
-      __pyx_t_3 = PyObject_Call(__pyx_v_4lxml_5etree_BytesIO, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_BytesIO, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 443; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_v_bytes_out = __pyx_t_3;
       __pyx_t_3 = 0;
@@ -116177,7 +116617,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  *                 fileobj=bytes_out, mode='wb', compresslevel=compression)
  *             try:
  */
-      __pyx_t_4 = PyObject_Call(__pyx_v_4lxml_5etree_GzipFile, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree_GzipFile, __pyx_empty_tuple, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_v_gzip_file = __pyx_t_4;
@@ -116206,7 +116646,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
         __Pyx_INCREF(__pyx_v_data);
         PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_data);
         __Pyx_GIVEREF(__pyx_v_data);
-        __pyx_t_5 = PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 447; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -116224,7 +116664,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
         /*normal exit:*/{
           __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_gzip_file, __pyx_n_s_close); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_5);
-          __pyx_t_3 = PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -116248,7 +116688,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
           {
             __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_gzip_file, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_3);
-            __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+            __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
             __Pyx_GOTREF(__pyx_t_5);
             __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
             __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -116291,7 +116731,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
  */
       __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_bytes_out, __pyx_n_s_getvalue); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 450; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF_SET(__pyx_v_data, __pyx_t_3);
@@ -116337,7 +116777,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
       __Pyx_INCREF(__pyx_n_s_wb);
       PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_wb);
       __Pyx_GIVEREF(__pyx_n_s_wb);
-      __pyx_t_5 = PyObject_Call(__pyx_builtin_open, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF_SET(__pyx_v_f, __pyx_t_5);
@@ -116366,7 +116806,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
         __Pyx_INCREF(__pyx_v_data);
         PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_data);
         __Pyx_GIVEREF(__pyx_v_data);
-        __pyx_t_4 = PyObject_Call(__pyx_t_5, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -116384,7 +116824,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
         /*normal exit:*/{
           __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_close); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_4);
-          __pyx_t_3 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -116408,7 +116848,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
           {
             __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_f, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
             __Pyx_GOTREF(__pyx_t_3);
-            __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+            __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 457; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
             __Pyx_GOTREF(__pyx_t_4);
             __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -116459,7 +116899,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelike(PyObject *__pyx_v_f, struct Lx
       __Pyx_INCREF(__pyx_v_data);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_data);
       __Pyx_GIVEREF(__pyx_v_data);
-      __pyx_t_5 = PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -116851,7 +117291,7 @@ static PyObject *__pyx_f_4lxml_5etree__create_output_buffer(PyObject *__pyx_v_f,
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
     __Pyx_GIVEREF(__pyx_t_2);
     __pyx_t_2 = 0;
-    __pyx_t_2 = PyObject_Call(__pyx_builtin_LookupError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_LookupError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 500; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
@@ -116970,7 +117410,7 @@ static PyObject *__pyx_f_4lxml_5etree__create_output_buffer(PyObject *__pyx_v_f,
         __Pyx_GOTREF(__pyx_t_3);
         if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_compression, __pyx_t_3) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-        __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FilelikeWriter)), __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+        __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FilelikeWriter)), __pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 511; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -117024,7 +117464,7 @@ static PyObject *__pyx_f_4lxml_5etree__create_output_buffer(PyObject *__pyx_v_f,
         PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
         __Pyx_GIVEREF(__pyx_t_4);
         __pyx_t_4 = 0;
-        __pyx_t_4 = PyObject_Call(__pyx_builtin_TypeError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __Pyx_Raise(__pyx_t_4, 0, 0, 0);
@@ -117669,7 +118109,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
       __Pyx_GOTREF(__pyx_t_8);
       if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_compression, __pyx_t_8) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      __pyx_t_8 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FilelikeWriter)), __pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FilelikeWriter)), __pyx_t_5, __pyx_t_7); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -117733,7 +118173,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
         /*finally:*/ {
           /*normal exit:*/{
             if (__pyx_t_10) {
-              __pyx_t_14 = PyObject_Call(__pyx_t_10, __pyx_tuple__57, NULL);
+              __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_tuple__57, NULL);
               __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
               if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
               __Pyx_GOTREF(__pyx_t_14);
@@ -117801,7 +118241,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
       PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_7);
       __pyx_t_7 = 0;
-      __pyx_t_7 = PyObject_Call(__pyx_builtin_TypeError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_Raise(__pyx_t_7, 0, 0, 0);
@@ -118022,7 +118462,7 @@ static PyObject *__pyx_f_4lxml_5etree__tofilelikeC14N(PyObject *__pyx_v_f, struc
     __Pyx_INCREF(__pyx_v_message);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_message);
     __Pyx_GIVEREF(__pyx_v_message);
-    __pyx_t_5 = PyObject_Call(__pyx_t_8, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -118303,7 +118743,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7xmlfile_2__enter__(struct __pyx_obj_4lxm
   PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__IncrementalFileWriter)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__IncrementalFileWriter)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 631; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_v_writer = ((struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)__pyx_t_2);
@@ -118935,7 +119375,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
  */
     __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_tuple__58, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__58, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
@@ -119202,7 +119642,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
  */
     __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_tuple__59, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__59, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
@@ -119438,16 +119878,13 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
  *                 attrib = attrib.items()
  *             for name, value in attrib:
  */
-    __Pyx_INCREF(__pyx_v_attrib);
-    __pyx_t_1 = __pyx_v_attrib;
-    __pyx_t_3 = PyDict_Check(__pyx_t_1); 
+    __pyx_t_3 = PyDict_Check(__pyx_v_attrib); 
     if (!__pyx_t_3) {
-      __pyx_t_2 = __Pyx_TypeCheck(__pyx_t_1, ((PyObject*)__pyx_ptype_4lxml_5etree__Attrib)); 
+      __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_attrib, ((PyObject*)__pyx_ptype_4lxml_5etree__Attrib)); 
       __pyx_t_4 = __pyx_t_2;
     } else {
       __pyx_t_4 = __pyx_t_3;
     }
-    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_3 = (__pyx_t_4 != 0);
     if (__pyx_t_3) {
 
@@ -119460,7 +119897,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
  */
       __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s_items); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_5 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF_SET(__pyx_v_attrib, __pyx_t_5);
@@ -119783,7 +120220,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
  */
     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_nsmap, __pyx_n_s_items); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_9 = PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if (PyList_CheckExact(__pyx_t_9) || PyTuple_CheckExact(__pyx_t_9)) {
@@ -120000,7 +120437,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
   PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FileWriterElement)), __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FileWriterElement)), __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __pyx_r = __pyx_t_5;
@@ -120177,7 +120614,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  */
     __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_tuple__61, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__61, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
@@ -120967,7 +121404,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
     __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_tuple__65, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__65, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
@@ -121016,7 +121453,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
     __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_3 = PyObject_Call(__pyx_t_5, __pyx_tuple__68, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__68, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
@@ -121859,7 +122296,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
         if (!__pyx_t_4) {
           __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_content, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_3);
-          __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_5);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -121879,7 +122316,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
  */
           __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_5);
-          __pyx_t_3 = PyObject_Call(__pyx_t_5, __pyx_tuple__71, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__71, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           __Pyx_Raise(__pyx_t_3, 0, 0, 0);
@@ -121927,7 +122364,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
     __Pyx_INCREF(__pyx_v_content);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_content);
     __Pyx_GIVEREF(__pyx_v_content);
-    __pyx_t_8 = PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 846; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 846; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -121954,7 +122391,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
  */
         __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 848; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_8);
-        __pyx_t_5 = PyObject_Call(__pyx_t_8, __pyx_tuple__72, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 848; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_tuple__72, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 848; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
         __Pyx_Raise(__pyx_t_5, 0, 0, 0);
@@ -122024,7 +122461,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
       PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5);
       __Pyx_GIVEREF(__pyx_t_5);
       __pyx_t_5 = 0;
-      __pyx_t_5 = PyObject_Call(__pyx_builtin_TypeError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 856; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 856; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __Pyx_Raise(__pyx_t_5, 0, 0, 0);
@@ -122121,7 +122558,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
  */
       __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 862; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_tuple__73, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 862; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__73, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 862; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_Raise(__pyx_t_3, 0, 0, 0);
@@ -122148,7 +122585,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
  */
       __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_LxmlSyntaxError); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_2 = PyObject_Call(__pyx_t_3, __pyx_tuple__74, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__74, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 864; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_Raise(__pyx_t_2, 0, 0, 0);
@@ -122895,8 +123332,7 @@ static int __pyx_pf_4lxml_5etree_9iterparse___init__(struct __pyx_obj_4lxml_5etr
   Py_ssize_t __pyx_t_5;
   PyObject *(*__pyx_t_6)(PyObject *);
   PyObject *__pyx_t_7 = NULL;
-  PyObject *__pyx_t_8 = NULL;
-  int __pyx_t_9;
+  int __pyx_t_8;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -122969,7 +123405,7 @@ static int __pyx_pf_4lxml_5etree_9iterparse___init__(struct __pyx_obj_4lxml_5etr
     __Pyx_INCREF(__pyx_n_s_rb);
     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_n_s_rb);
     __Pyx_GIVEREF(__pyx_n_s_rb);
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_open, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 77; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF_SET(__pyx_v_source, __pyx_t_4);
@@ -123119,19 +123555,15 @@ static int __pyx_pf_4lxml_5etree_9iterparse___init__(struct __pyx_obj_4lxml_5etr
  */
       __Pyx_INCREF(__pyx_v_event);
       __pyx_t_7 = __pyx_v_event;
-      __pyx_t_8 = PyObject_RichCompare(__pyx_t_7, __pyx_kp_s_start_ns, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-      if (((int)__pyx_t_1)) {
-        __pyx_t_8 = PyObject_RichCompare(__pyx_t_7, __pyx_kp_s_end_ns, Py_NE); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-        __pyx_t_9 = ((int)__pyx_t_2);
+      __pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_kp_s_start_ns, Py_NE)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__pyx_t_1) {
+        __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_7, __pyx_kp_s_end_ns, Py_NE)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_8 = __pyx_t_2;
       } else {
-        __pyx_t_9 = ((int)__pyx_t_1);
+        __pyx_t_8 = __pyx_t_1;
       }
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_1 = (__pyx_t_9 != 0);
+      __pyx_t_1 = (__pyx_t_8 != 0);
       if (__pyx_t_1) {
 
         /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/iterparse.pxi":88
@@ -123280,7 +123712,7 @@ static int __pyx_pf_4lxml_5etree_9iterparse___init__(struct __pyx_obj_4lxml_5etr
  *                 events,
  *                 tag=tag,
  */
-    __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_HTMLPullParser)), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_HTMLPullParser)), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -123465,7 +123897,7 @@ static int __pyx_pf_4lxml_5etree_9iterparse___init__(struct __pyx_obj_4lxml_5etr
  *                 events,
  *                 tag=tag,
  */
-    __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XMLPullParser)), __pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XMLPullParser)), __pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -123483,7 +123915,7 @@ static int __pyx_pf_4lxml_5etree_9iterparse___init__(struct __pyx_obj_4lxml_5etr
  */
   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_parser), __pyx_n_s_read_events); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_GIVEREF(__pyx_t_3);
@@ -123533,7 +123965,6 @@ static int __pyx_pf_4lxml_5etree_9iterparse___init__(struct __pyx_obj_4lxml_5etr
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_8);
   __Pyx_AddTraceback("lxml.etree.iterparse.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1;
   __pyx_L0:;
@@ -123850,7 +124281,7 @@ static PyObject *__pyx_f_4lxml_5etree_9iterparse__close_source(struct __pyx_obj_
  * 
  *     def __iter__(self):
  */
-    __pyx_t_9 = PyObject_Call(__pyx_v_close, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_v_close, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     goto __pyx_L20;
@@ -124534,7 +124965,7 @@ static int __pyx_f_4lxml_5etree_9iterparse__read_more_events(struct __pyx_obj_4l
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->_source, __pyx_n_s_read); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_tuple__76, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__76, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_data = __pyx_t_2;
@@ -124569,7 +125000,7 @@ static int __pyx_f_4lxml_5etree_9iterparse__read_more_events(struct __pyx_obj_4l
  *         if not data:
  *             try:
  */
-    __pyx_t_2 = PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__77, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__77, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -124928,7 +125359,7 @@ static int __pyx_pf_4lxml_5etree_8iterwalk___init__(struct __pyx_obj_4lxml_5etre
     __Pyx_INCREF(__pyx_v_tag);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
-    __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_GIVEREF(__pyx_t_6);
@@ -125193,7 +125624,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8iterwalk_4__next__(struct __pyx_obj_4lxm
  *             node = self._node_stack[self._index][0]
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = PyObject_Call(__pyx_v_self->_pop_event, __pyx_tuple__79, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_self->_pop_event, __pyx_tuple__79, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
@@ -125391,7 +125822,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8iterwalk_4__next__(struct __pyx_obj_4lxm
  */
         __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_node), __pyx_n_s_getnext); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_2 = PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_2);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_4lxml_5etree__Element))))) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -125511,7 +125942,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8iterwalk_4__next__(struct __pyx_obj_4lxm
  * 
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_5 = PyObject_Call(__pyx_v_self->_pop_event, __pyx_tuple__80, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_self->_pop_event, __pyx_tuple__80, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_r = __pyx_t_5;
       __pyx_t_5 = 0;
@@ -126331,7 +126762,7 @@ static PyObject *__pyx_pf_4lxml_5etree_46XMLID(CYTHON_UNUSED PyObject *__pyx_sel
  * 
  *     # ElementTree compatible implementation: parse and look for 'id' attributes
  */
-    __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPath)), __pyx_tuple__82, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPath)), __pyx_tuple__82, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_XGOTREF(__pyx_v_4lxml_5etree__find_id_attributes);
     __Pyx_DECREF_SET(__pyx_v_4lxml_5etree__find_id_attributes, __pyx_t_3);
@@ -126361,7 +126792,7 @@ static PyObject *__pyx_pf_4lxml_5etree_46XMLID(CYTHON_UNUSED PyObject *__pyx_sel
   __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_base_url, __pyx_v_base_url) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -126393,7 +126824,7 @@ static PyObject *__pyx_pf_4lxml_5etree_46XMLID(CYTHON_UNUSED PyObject *__pyx_sel
   __Pyx_INCREF(__pyx_v_root);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_root);
   __Pyx_GIVEREF(__pyx_v_root);
-  __pyx_t_5 = PyObject_Call(__pyx_v_4lxml_5etree__find_id_attributes, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree__find_id_attributes, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (PyList_CheckExact(__pyx_t_5) || PyTuple_CheckExact(__pyx_t_5)) {
@@ -126444,7 +126875,7 @@ static PyObject *__pyx_pf_4lxml_5etree_46XMLID(CYTHON_UNUSED PyObject *__pyx_sel
  */
     __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_elem, __pyx_n_s_get); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = PyObject_Call(__pyx_t_5, __pyx_tuple__83, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__83, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if (unlikely(PyDict_SetItem(__pyx_v_dic, __pyx_t_4, __pyx_v_elem) < 0)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 21; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -126613,7 +127044,7 @@ static PyObject *__pyx_pf_4lxml_5etree_48XMLDTDID(CYTHON_UNUSED PyObject *__pyx_
   __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_base_url, __pyx_v_base_url) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 37; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -126669,7 +127100,7 @@ static PyObject *__pyx_pf_4lxml_5etree_48XMLDTDID(CYTHON_UNUSED PyObject *__pyx_
     __Pyx_INCREF(((PyObject *)__pyx_v_root));
     PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_root));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_root));
-    __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__IDDict)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__IDDict)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -126830,7 +127261,7 @@ static PyObject *__pyx_pf_4lxml_5etree_50parseid(CYTHON_UNUSED PyObject *__pyx_s
   __Pyx_INCREF(((PyObject *)__pyx_v_doc));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_doc));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_doc));
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__IDDict)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__IDDict)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -127075,7 +127506,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_IDDict_2copy(struct __pyx_obj_4lxml_5et
   __Pyx_INCREF(((PyObject *)__pyx_v_self->_doc));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self->_doc));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self->_doc));
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__IDDict)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__IDDict)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -127523,7 +127954,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_IDDict_12__repr__(struct __pyx_obj_4lxm
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = PyObject_Repr(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -128319,7 +128750,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7_IDDict_28itervalues(struct __pyx_obj_4l
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_values); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -128813,7 +129244,7 @@ static int __pyx_pf_4lxml_5etree_8XInclude___init__(struct __pyx_obj_4lxml_5etre
  * 
  *     property error_log:
  */
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 19; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_error_log);
@@ -129191,7 +129622,7 @@ static PyObject *__pyx_pf_4lxml_5etree_8XInclude_2__call__(struct __pyx_obj_4lxm
     PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_self->_error_log));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self->_error_log));
     __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 51; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -129438,7 +129869,7 @@ static PyObject *__pyx_pf_4lxml_5etree_54strip_attributes(CYTHON_UNUSED PyObject
   __Pyx_INCREF(__pyx_v_attribute_names);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_attribute_names);
   __Pyx_GIVEREF(__pyx_v_attribute_names);
-  __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 35; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_matcher = ((struct __pyx_obj_4lxml_5etree__MultiTagMatcher *)__pyx_t_4);
@@ -129815,7 +130246,7 @@ static PyObject *__pyx_pf_4lxml_5etree_56strip_elements(CYTHON_UNUSED PyObject *
   __Pyx_INCREF(__pyx_v_tag_names);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_tag_names);
   __Pyx_GIVEREF(__pyx_v_tag_names);
-  __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_matcher = ((struct __pyx_obj_4lxml_5etree__MultiTagMatcher *)__pyx_t_4);
@@ -130320,7 +130751,7 @@ static PyObject *__pyx_pf_4lxml_5etree_58strip_tags(CYTHON_UNUSED PyObject *__py
   __Pyx_INCREF(__pyx_v_tag_names);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_tag_names);
   __Pyx_GIVEREF(__pyx_v_tag_names);
-  __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MultiTagMatcher)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_matcher = ((struct __pyx_obj_4lxml_5etree__MultiTagMatcher *)__pyx_t_4);
@@ -131060,7 +131491,7 @@ static int __pyx_pf_4lxml_5etree_12_BaseContext_2__init__(struct __pyx_obj_4lxml
  */
       __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_extension, __pyx_n_s_items); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       if (PyList_CheckExact(__pyx_t_7) || PyTuple_CheckExact(__pyx_t_7)) {
@@ -131326,7 +131757,7 @@ static int __pyx_pf_4lxml_5etree_12_BaseContext_2__init__(struct __pyx_obj_4lxml
  */
       __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_namespaces, __pyx_n_s_items); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_6 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 79; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF_SET(__pyx_v_namespaces, __pyx_t_6);
@@ -131602,7 +132033,7 @@ static int __pyx_pf_4lxml_5etree_12_BaseContext_2__init__(struct __pyx_obj_4lxml
  *         self._extensions = extensions
  *         self._namespaces = namespaces
  */
-  __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ExceptionContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ExceptionContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_6);
   __Pyx_GOTREF(__pyx_v_self->_exc);
@@ -131649,7 +132080,7 @@ static int __pyx_pf_4lxml_5etree_12_BaseContext_2__init__(struct __pyx_obj_4lxml
  *         self._temp_documents  = set()
  *         self._build_smart_strings = build_smart_strings
  */
-  __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__TempStore)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__TempStore)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_6);
   __Pyx_GOTREF(__pyx_v_self->_temp_refs);
@@ -131699,7 +132130,7 @@ static int __pyx_pf_4lxml_5etree_12_BaseContext_2__init__(struct __pyx_obj_4lxml
  *             _regexp._register_in_context(self)
  * 
  */
-    __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ExsltRegExp)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ExsltRegExp)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_v__regexp = ((struct __pyx_obj_4lxml_5etree__ExsltRegExp *)__pyx_t_6);
     __pyx_t_6 = 0;
@@ -131868,7 +132299,7 @@ static struct __pyx_obj_4lxml_5etree__BaseContext *__pyx_f_4lxml_5etree_12_BaseC
   PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -135508,7 +135939,7 @@ static PyObject *__pyx_pf_4lxml_5etree_60Extension(CYTHON_UNUSED PyObject *__pyx
  */
     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_function_mapping, __pyx_n_s_items); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) {
@@ -135698,7 +136129,7 @@ static PyObject *__pyx_pf_4lxml_5etree_60Extension(CYTHON_UNUSED PyObject *__pyx
  */
         __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_startswith); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_7 = PyObject_Call(__pyx_t_4, __pyx_tuple__86, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__86, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_7); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -136153,7 +136584,7 @@ static PyObject *__pyx_f_4lxml_5etree_12_ExsltRegExp__make_string(CYTHON_UNUSED
       __Pyx_INCREF(__pyx_v_firstnode);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_firstnode);
       __Pyx_GIVEREF(__pyx_v_firstnode);
-      __pyx_t_13 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_13 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_13);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_r = __pyx_t_13;
@@ -136176,7 +136607,7 @@ static PyObject *__pyx_f_4lxml_5etree_12_ExsltRegExp__make_string(CYTHON_UNUSED
     __Pyx_INCREF(__pyx_v_value);
     PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_v_value);
     __Pyx_GIVEREF(__pyx_v_value);
-    __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_13, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_13, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
     __pyx_r = __pyx_t_3;
@@ -136352,7 +136783,7 @@ static PyObject *__pyx_f_4lxml_5etree_12_ExsltRegExp__compile(struct __pyx_obj_4
   __Pyx_INCREF(__pyx_v_py_flags);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_py_flags);
   __Pyx_GIVEREF(__pyx_v_py_flags);
-  __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -136569,7 +137000,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ExsltRegExp_2test(struct __pyx_obj_4lx
   __Pyx_INCREF(__pyx_v_s);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_s);
   __Pyx_GIVEREF(__pyx_v_s);
-  __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 502; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -136811,7 +137242,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ExsltRegExp_4match(struct __pyx_obj_4l
     __Pyx_INCREF(__pyx_v_s);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_s);
     __Pyx_GIVEREF(__pyx_v_s);
-    __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -136859,7 +137290,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ExsltRegExp_4match(struct __pyx_obj_4l
     __Pyx_INCREF(__pyx_v_s);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_s);
     __Pyx_GIVEREF(__pyx_v_s);
-    __pyx_t_3 = PyObject_Call(__pyx_t_5, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 517; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -136899,7 +137330,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ExsltRegExp_4match(struct __pyx_obj_4l
  */
     __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_group); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_1 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -136921,7 +137352,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ExsltRegExp_4match(struct __pyx_obj_4l
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_result, __pyx_n_s_groups); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PyObject_Call(__pyx_t_1, __pyx_tuple__87, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__87, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -136929,7 +137360,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ExsltRegExp_4match(struct __pyx_obj_4l
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -136958,7 +137389,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ExsltRegExp_4match(struct __pyx_obj_4l
  */
   __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_Element); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyObject_Call(__pyx_t_5, __pyx_tuple__88, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__88, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_root = __pyx_t_1;
@@ -137043,7 +137474,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ExsltRegExp_4match(struct __pyx_obj_4l
       __Pyx_INCREF(__pyx_v_s_match);
       PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_s_match);
       __Pyx_GIVEREF(__pyx_v_s_match);
-      __pyx_t_3 = PyObject_Call(__pyx_v_join_groups, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_v_join_groups, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 527; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF_SET(__pyx_v_s_match, __pyx_t_3);
@@ -137069,7 +137500,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ExsltRegExp_4match(struct __pyx_obj_4l
     __Pyx_INCREF(__pyx_n_u_match);
     PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_n_u_match);
     __Pyx_GIVEREF(__pyx_n_u_match);
-    __pyx_t_8 = PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 528; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -137363,7 +137794,7 @@ static PyObject *__pyx_pf_4lxml_5etree_12_ExsltRegExp_6replace(struct __pyx_obj_
   PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -138483,7 +138914,7 @@ static PyObject *__pyx_f_4lxml_5etree__unwrapXPathObject(xmlXPathObject *__pyx_v
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = PyUnicode_Format(__pyx_kp_u_Unknown_xpath_result_s, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -139606,7 +140037,7 @@ static PyObject *__pyx_f_4lxml_5etree__elementStringResultFactory(PyObject *__py
     __Pyx_INCREF(__pyx_v_string_value);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_string_value);
     __Pyx_GIVEREF(__pyx_v_string_value);
-    __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -139693,7 +140124,7 @@ static PyObject *__pyx_f_4lxml_5etree__elementStringResultFactory(PyObject *__py
     __Pyx_INCREF(__pyx_v_string_value);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_string_value);
     __Pyx_GIVEREF(__pyx_v_string_value);
-    __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ElementUnicodeResult)), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ElementUnicodeResult)), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_v_uresult = ((struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *)__pyx_t_4);
@@ -140289,7 +140720,7 @@ static void __pyx_f_4lxml_5etree__extension_function_call(struct __pyx_obj_4lxml
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-        __pyx_t_8 = PyObject_Call(__pyx_v_function, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_function, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 822; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
         __Pyx_GOTREF(__pyx_t_8);
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_v_res = __pyx_t_8;
@@ -140594,7 +141025,7 @@ static void __pyx_f_4lxml_5etree__xpath_function_call(xmlXPathParserContext *__p
           PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);
           __Pyx_GIVEREF(__pyx_t_9);
           __pyx_t_9 = 0;
-          __pyx_t_9 = PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 848; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 848; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
           __Pyx_GOTREF(__pyx_t_9);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
@@ -141030,7 +141461,7 @@ static int __pyx_pf_4lxml_5etree_13_XPathContext___init__(struct __pyx_obj_4lxml
  *                               build_smart_strings)
  * 
  */
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 57; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -141411,7 +141842,7 @@ static PyObject *__pyx_f_4lxml_5etree_13_XPathContext_registerVariables(struct _
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_variable_dict, __pyx_n_s_items); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) {
@@ -141858,7 +142289,7 @@ static int __pyx_pf_4lxml_5etree_19_XPathEvaluatorBase___cinit__(struct __pyx_ob
  * 
  *     def __init__(self, namespaces, extensions, enable_regexp,
  */
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __Pyx_GOTREF(__pyx_v_self->_error_log);
@@ -142025,7 +142456,7 @@ static int __pyx_pf_4lxml_5etree_19_XPathEvaluatorBase_2__init__(struct __pyx_ob
  */
     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_warnings, __pyx_n_s_warn); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_tuple__89, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__89, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -142060,7 +142491,7 @@ static int __pyx_pf_4lxml_5etree_19_XPathEvaluatorBase_2__init__(struct __pyx_ob
   __Pyx_INCREF(__pyx_v_smart_strings);
   PyTuple_SET_ITEM(__pyx_t_3, 5, __pyx_v_smart_strings);
   __Pyx_GIVEREF(__pyx_v_smart_strings);
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__XPathContext)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__XPathContext)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 144; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_GIVEREF(__pyx_t_2);
@@ -142415,7 +142846,7 @@ static PyObject *__pyx_pf_4lxml_5etree_19_XPathEvaluatorBase_6evaluate(struct __
   __Pyx_GIVEREF(__pyx_v__eval_arg);
   __pyx_t_2 = __pyx_v__variables;
   __Pyx_INCREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -142773,7 +143204,7 @@ static PyObject *__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__raise_parse_error(s
   __Pyx_INCREF(__pyx_v_4lxml_5etree__XPATH_SYNTAX_ERRORS);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_4lxml_5etree__XPATH_SYNTAX_ERRORS);
   __Pyx_GIVEREF(__pyx_v_4lxml_5etree__XPATH_SYNTAX_ERRORS);
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -142831,7 +143262,7 @@ static PyObject *__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__raise_parse_error(s
       __Pyx_INCREF(((PyObject *)__pyx_v_self->_error_log));
       PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self->_error_log));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_self->_error_log));
-      __pyx_t_1 = PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -142878,7 +143309,7 @@ static PyObject *__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__raise_parse_error(s
  *                 u"Error in xpath expression"),
  *                                self._error_log)
  */
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 211; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -142945,7 +143376,7 @@ static PyObject *__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__raise_eval_error(st
   __Pyx_INCREF(__pyx_v_4lxml_5etree__XPATH_EVAL_ERRORS);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_4lxml_5etree__XPATH_EVAL_ERRORS);
   __Pyx_GIVEREF(__pyx_v_4lxml_5etree__XPATH_EVAL_ERRORS);
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -142978,7 +143409,7 @@ static PyObject *__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__raise_eval_error(st
     __Pyx_INCREF(__pyx_v_4lxml_5etree__XPATH_SYNTAX_ERRORS);
     PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_4lxml_5etree__XPATH_SYNTAX_ERRORS);
     __Pyx_GIVEREF(__pyx_v_4lxml_5etree__XPATH_SYNTAX_ERRORS);
-    __pyx_t_1 = PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -143039,7 +143470,7 @@ static PyObject *__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__raise_eval_error(st
       __Pyx_INCREF(((PyObject *)__pyx_v_self->_error_log));
       PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self->_error_log));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_self->_error_log));
-      __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -143086,7 +143517,7 @@ static PyObject *__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__raise_eval_error(st
  *                 u"Error in xpath expression"),
  *                              self._error_log)
  */
-  __pyx_t_2 = PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -143593,7 +144024,7 @@ static int __pyx_pf_4lxml_5etree_21XPathElementEvaluator___init__(struct __pyx_o
  *                                      regexp, smart_strings)
  *         xpathCtxt = xpath.xmlXPathNewContext(doc._c_doc)
  */
-  __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -143854,7 +144285,7 @@ static PyObject *__pyx_pf_4lxml_5etree_21XPathElementEvaluator_4register_namespa
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_namespaces, __pyx_n_s_items); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   if (PyList_CheckExact(__pyx_t_2) || PyTuple_CheckExact(__pyx_t_2)) {
@@ -144539,7 +144970,7 @@ static int __pyx_pf_4lxml_5etree_22XPathDocumentEvaluator___init__(struct __pyx_
  *             self, etree._context_node, namespaces=namespaces,
  *             extensions=extensions, regexp=regexp,
  */
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 338; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -145192,7 +145623,7 @@ static PyObject *__pyx_pf_4lxml_5etree_62XPathEvaluator(CYTHON_UNUSED PyObject *
  *             etree_or_element, namespaces=namespaces,
  *             extensions=extensions, regexp=regexp, smart_strings=smart_strings)
  */
-    __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPathDocumentEvaluator)), __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPathDocumentEvaluator)), __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -145261,7 +145692,7 @@ static PyObject *__pyx_pf_4lxml_5etree_62XPathEvaluator(CYTHON_UNUSED PyObject *
  *             etree_or_element, namespaces=namespaces,
  *             extensions=extensions, regexp=regexp, smart_strings=smart_strings)
  */
-    __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPathElementEvaluator)), __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPathElementEvaluator)), __pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 400; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -145493,7 +145924,7 @@ static int __pyx_pf_4lxml_5etree_5XPath_2__init__(struct __pyx_obj_4lxml_5etree_
  *                                      regexp, smart_strings)
  *         self._path = _utf8(path)
  */
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 425; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -146387,7 +146818,7 @@ static int __pyx_pf_4lxml_5etree_7ETXPath___init__(struct __pyx_obj_4lxml_5etree
  *                        extensions=extensions, regexp=regexp,
  *                        smart_strings=smart_strings)
  */
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 493; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -146505,7 +146936,7 @@ static PyObject *__pyx_f_4lxml_5etree_7ETXPath__nsextract_path(CYTHON_UNUSED str
   __Pyx_INCREF(__pyx_v_path_utf);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_path_utf);
   __Pyx_GIVEREF(__pyx_v_path_utf);
-  __pyx_t_2 = PyObject_Call(__pyx_v_4lxml_5etree__replace_strings, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree__replace_strings, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_stripped_path = __pyx_t_2;
@@ -146532,7 +146963,7 @@ static PyObject *__pyx_f_4lxml_5etree_7ETXPath__nsextract_path(CYTHON_UNUSED str
   __Pyx_INCREF(__pyx_v_stripped_path);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_stripped_path);
   __Pyx_GIVEREF(__pyx_v_stripped_path);
-  __pyx_t_1 = PyObject_Call(__pyx_v_4lxml_5etree__find_namespaces, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree__find_namespaces, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 505; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   if (PyList_CheckExact(__pyx_t_1) || PyTuple_CheckExact(__pyx_t_1)) {
@@ -146688,7 +147119,7 @@ static PyObject *__pyx_f_4lxml_5etree_7ETXPath__nsextract_path(CYTHON_UNUSED str
       __Pyx_INCREF(__pyx_v_prefix_str);
       PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_prefix_str);
       __Pyx_GIVEREF(__pyx_v_prefix_str);
-      __pyx_t_9 = PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
@@ -146708,7 +147139,7 @@ static PyObject *__pyx_f_4lxml_5etree_7ETXPath__nsextract_path(CYTHON_UNUSED str
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_path_utf, __pyx_n_s_decode); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_9 = PyObject_Call(__pyx_t_2, __pyx_tuple__91, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__91, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF_SET(__pyx_v_path, __pyx_t_9);
@@ -146790,7 +147221,7 @@ static struct __pyx_obj_4lxml_5etree__XSLTResolverContext *__pyx_f_4lxml_5etree_
  *         _initXSLTResolverContext(context, self._parser)
  *         context._c_style_doc = self._c_style_doc
  */
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__XSLTResolverContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__XSLTResolverContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = ((struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -147138,7 +147569,7 @@ static xmlDoc *__pyx_f_4lxml_5etree__xslt_resolve_from_python(const xmlChar *__p
         __Pyx_INCREF(((PyObject *)__pyx_v_context));
         PyTuple_SET_ITEM(__pyx_t_9, 2, ((PyObject *)__pyx_v_context));
         __Pyx_GIVEREF(((PyObject *)__pyx_v_context));
-        __pyx_t_10 = PyObject_Call(__pyx_t_1, __pyx_t_9, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
+        __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L6_error;}
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -147545,7 +147976,7 @@ static void __pyx_f_4lxml_5etree__xslt_store_resolver_exception(const xmlChar *_
         __Pyx_INCREF(__pyx_v_message);
         PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_message);
         __Pyx_GIVEREF(__pyx_v_message);
-        __pyx_t_7 = PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 121; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -147569,7 +148000,7 @@ static void __pyx_f_4lxml_5etree__xslt_store_resolver_exception(const xmlChar *_
         __Pyx_INCREF(__pyx_v_message);
         PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_message);
         __Pyx_GIVEREF(__pyx_v_message);
-        __pyx_t_5 = PyObject_Call(__pyx_t_7, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -148591,7 +149022,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17XSLTAccessControl_6__repr__(struct __py
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_items); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -148599,7 +149030,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17XSLTAccessControl_6__repr__(struct __py
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_builtin_sorted, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_sorted, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_items = __pyx_t_1;
@@ -149016,7 +149447,7 @@ static int __pyx_pf_4lxml_5etree_12_XSLTContext_2__init__(struct __pyx_obj_4lxml
  */
     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_extensions, __pyx_n_s_items); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 282; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (PyList_CheckExact(__pyx_t_5) || PyTuple_CheckExact(__pyx_t_5)) {
@@ -149184,7 +149615,7 @@ static int __pyx_pf_4lxml_5etree_12_XSLTContext_2__init__(struct __pyx_obj_4lxml
  */
           __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_extensions, __pyx_n_s_copy); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_5);
-          __pyx_t_9 = PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 289; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_9);
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           __Pyx_DECREF_SET(__pyx_v_extensions, __pyx_t_9);
@@ -149307,7 +149738,7 @@ static int __pyx_pf_4lxml_5etree_12_XSLTContext_2__init__(struct __pyx_obj_4lxml
  *                               build_smart_strings)
  * 
  */
-  __pyx_t_5 = PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
@@ -149977,7 +150408,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_id, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_id, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_string___STRING__XSLT___d_xslt, __pyx_t_4); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -150016,7 +150447,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  *         self._xslt_resolver_context = _XSLTResolverContext()
  *         _initXSLTResolverContext(self._xslt_resolver_context, doc._parser)
  */
-  __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __Pyx_GOTREF(__pyx_v_self->_error_log);
@@ -150031,7 +150462,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  *         _initXSLTResolverContext(self._xslt_resolver_context, doc._parser)
  *         # keep a copy in case we need to access the stylesheet via 'document()'
  */
-  __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__XSLTResolverContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__XSLTResolverContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __Pyx_GOTREF(__pyx_v_self->_xslt_resolver_context);
@@ -150113,7 +150544,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
     /*finally:*/ {
       /*normal exit:*/{
         if (__pyx_t_6) {
-          __pyx_t_10 = PyObject_Call(__pyx_t_6, __pyx_tuple__93, NULL);
+          __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__93, NULL);
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
           if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 398; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_10);
@@ -150247,7 +150678,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
  *                                      self._error_log)
  *             else:
  */
-      __pyx_t_1 = PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 409; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -150292,7 +150723,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
       PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)__pyx_v_self->_error_log));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_self->_error_log));
       __pyx_t_4 = 0;
-      __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -150344,7 +150775,7 @@ static int __pyx_pf_4lxml_5etree_4XSLT_2__init__(struct __pyx_obj_4lxml_5etree_X
   __Pyx_INCREF(Py_True);
   PyTuple_SET_ITEM(__pyx_t_4, 4, Py_True);
   __Pyx_GIVEREF(Py_True);
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__XSLTContext)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__XSLTContext)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 419; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_GIVEREF(__pyx_t_5);
@@ -150622,7 +151053,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_6strparam(PyObject *__pyx_v_strval)
   __Pyx_INCREF(__pyx_v_strval);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_strval);
   __Pyx_GIVEREF(__pyx_v_strval);
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__XSLTQuotedStringParam)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__XSLTQuotedStringParam)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -150738,7 +151169,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_8set_global_max_depth(int __pyx_v_m
  *         xslt.xsltMaxDepth = max_depth
  * 
  */
-    __pyx_t_2 = PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__94, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__94, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_Raise(__pyx_t_2, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -150879,7 +151310,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_10apply(struct __pyx_obj_4lxml_5etr
     __Pyx_RaiseDoubleKeywordsError("function", __pyx_n_s_profile_run); {__pyx_filename = __pyx_f[2]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_profile_run, __pyx_v_profile_run) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_3 = PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -150961,7 +151392,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_12tostring(CYTHON_UNUSED struct __p
   __Pyx_INCREF(((PyObject *)__pyx_v_result_tree));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_result_tree));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_result_tree));
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyString_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -151029,7 +151460,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_14__deepcopy__(struct __pyx_obj_4lx
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_copy_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 484; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -152092,7 +152523,7 @@ static PyObject *__pyx_pf_4lxml_5etree_4XSLT_18__call__(struct __pyx_obj_4lxml_5
       __Pyx_INCREF(((PyObject *)__pyx_v_self->_error_log));
       PyTuple_SET_ITEM(__pyx_t_17, 1, ((PyObject *)__pyx_v_self->_error_log));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_self->_error_log));
-      __pyx_t_1 = PyObject_Call(__pyx_t_5, __pyx_t_17, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L21_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_17, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 599; __pyx_clineno = __LINE__; goto __pyx_L21_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
@@ -153005,7 +153436,7 @@ static struct __pyx_obj_4lxml_5etree_XSLT *__pyx_f_4lxml_5etree__copyXSLT(struct
  *     new_xslt._context = stylesheet._context._copy()
  * 
  */
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_new_xslt->_error_log);
@@ -153487,7 +153918,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_2__str__(struct __pyx_o
     __Pyx_XDECREF(__pyx_r);
     __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_unicode_2); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_r = __pyx_t_3;
@@ -154470,7 +154901,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_XSLTResultTree_12xslt_profile___get__(
   __Pyx_INCREF(__pyx_v_root);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_root);
   __Pyx_GIVEREF(__pyx_v_root);
-  __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -154708,7 +155139,7 @@ static PyObject *__pyx_f_4lxml_5etree__findStylesheetByID(struct LxmlDocument *_
  *             u"//xsl:stylesheet[@xml:id = $id]",
  *             namespaces={u"xsl" : u"http://www.w3.org/1999/XSL/Transform"})
  */
-    __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPath)), __pyx_tuple__95, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPath)), __pyx_tuple__95, __pyx_t_3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree___findStylesheetByID));
@@ -154735,7 +155166,7 @@ static PyObject *__pyx_f_4lxml_5etree__findStylesheetByID(struct LxmlDocument *_
   __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_id, __pyx_v_id) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = PyObject_Call(((PyObject *)__pyx_v_4lxml_5etree___findStylesheetByID), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_4lxml_5etree___findStylesheetByID), __pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 847; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -154902,7 +155333,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
   __pyx_t_3 = ((unsigned char *)__pyx_v_self->__pyx_base.__pyx_base.__pyx_base.__pyx_base._c_node->content);
   __pyx_t_4 = __Pyx_decode_c_string(((char *)__pyx_t_3), 0, strlen(((char *)__pyx_t_3)), NULL, NULL, PyUnicode_DecodeUTF8); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = __Pyx_PyUnicode_Concat(__pyx_kp_u__14, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyUnicode_ConcatSafe(__pyx_kp_u__14, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -154910,7 +155341,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL(str
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_5);
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(__pyx_v_4lxml_5etree__FIND_PI_HREF, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree__FIND_PI_HREF, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 869; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_hrefs = __pyx_t_5;
@@ -155509,7 +155940,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
   __Pyx_INCREF(__pyx_v_text);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_text);
   __Pyx_GIVEREF(__pyx_v_text);
-  __pyx_t_4 = PyObject_Call(__pyx_v_4lxml_5etree__FIND_PI_HREF, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree__FIND_PI_HREF, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 923; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -155531,7 +155962,7 @@ static PyObject *__pyx_pf_4lxml_5etree_26_XSLTProcessingInstruction_2set(struct
     __Pyx_INCREF(__pyx_v_text);
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_text);
     __Pyx_GIVEREF(__pyx_v_text);
-    __pyx_t_5 = PyObject_Call(__pyx_v_4lxml_5etree__REPLACE_PI_HREF, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_5etree__REPLACE_PI_HREF, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_text, __pyx_t_5) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 924; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -156533,7 +156964,7 @@ static PyObject *__pyx_f_4lxml_5etree_13XSLTExtension__collectXSLTResultContent(
         if (!__pyx_t_3) {
           __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_strip); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_1);
-          __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_4);
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -157262,7 +157693,7 @@ static void __pyx_f_4lxml_5etree__callExtensionElement(xsltTransformContext *__p
                 PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_11);
                 __Pyx_GIVEREF(__pyx_t_11);
                 __pyx_t_11 = 0;
-                __pyx_t_11 = PyObject_Call(__pyx_builtin_TypeError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L28_error;}
+                __pyx_t_11 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_t_2, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L28_error;}
                 __Pyx_GOTREF(__pyx_t_11);
                 __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
                 __Pyx_Raise(__pyx_t_11, 0, 0, 0);
@@ -157324,7 +157755,7 @@ static void __pyx_f_4lxml_5etree__callExtensionElement(xsltTransformContext *__p
               __Pyx_INCREF(__pyx_v_output_parent);
               PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_output_parent);
               __Pyx_GIVEREF(__pyx_v_output_parent);
-              __pyx_t_10 = PyObject_Call(__pyx_t_11, __pyx_t_2, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L28_error;}
+              __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_2, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L28_error;}
               __Pyx_GOTREF(__pyx_t_10);
               __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
               __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -157510,7 +157941,7 @@ static void __pyx_f_4lxml_5etree__callExtensionElement(xsltTransformContext *__p
                 __Pyx_INCREF(__pyx_v_e);
                 PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_e);
                 __Pyx_GIVEREF(__pyx_v_e);
-                __pyx_t_22 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_9, NULL); if (unlikely(!__pyx_t_22)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L40_error;}
+                __pyx_t_22 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_9, NULL); if (unlikely(!__pyx_t_22)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L40_error;}
                 __Pyx_GOTREF(__pyx_t_22);
                 __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
                 __pyx_t_9 = PyUnicode_AsUTF8String(((PyObject*)__pyx_t_22)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L40_error;}
@@ -157553,7 +157984,7 @@ static void __pyx_f_4lxml_5etree__callExtensionElement(xsltTransformContext *__p
                 __pyx_t_25 = __Pyx_PyObject_GetAttrStr(__pyx_t_24, __pyx_n_s_encode); if (unlikely(!__pyx_t_25)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L42_except_error;}
                 __Pyx_GOTREF(__pyx_t_25);
                 __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
-                __pyx_t_24 = PyObject_Call(__pyx_t_25, __pyx_tuple__96, NULL); if (unlikely(!__pyx_t_24)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L42_except_error;}
+                __pyx_t_24 = __Pyx_PyObject_Call(__pyx_t_25, __pyx_tuple__96, NULL); if (unlikely(!__pyx_t_24)) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L42_except_error;}
                 __Pyx_GOTREF(__pyx_t_24);
                 __Pyx_DECREF(__pyx_t_25); __pyx_t_25 = 0;
                 __Pyx_DECREF_SET(__pyx_v_e, __pyx_t_24);
@@ -157850,7 +158281,7 @@ static int __pyx_pf_4lxml_5etree_10_Validator___cinit__(struct __pyx_obj_4lxml_5
  * 
  *     def validate(self, etree):
  */
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_error_log);
@@ -157923,7 +158354,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_2validate(struct __pyx_obj_4
   __Pyx_INCREF(__pyx_v_etree);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_etree);
   __Pyx_GIVEREF(__pyx_v_etree);
-  __pyx_t_2 = PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3266; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -157997,7 +158428,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_4assertValid(struct __pyx_ob
   __Pyx_INCREF(__pyx_v_etree);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_etree);
   __Pyx_GIVEREF(__pyx_v_etree);
-  __pyx_t_2 = PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3273; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -158040,7 +158471,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_4assertValid(struct __pyx_ob
  *                     u"Document does not comply with schema"),
  *                                   self._error_log)
  */
-    __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3274; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -158118,7 +158549,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10_Validator_6assert_(struct __pyx_obj_4l
   __Pyx_INCREF(__pyx_v_etree);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_etree);
   __Pyx_GIVEREF(__pyx_v_etree);
-  __pyx_t_2 = PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_self), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3283; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -158220,7 +158651,7 @@ static PyObject *__pyx_f_4lxml_5etree_10_Validator__append_log_message(struct __
       __pyx_t_3 = 0;
       __pyx_t_4 = 0;
       __pyx_t_5 = 0;
-      __pyx_t_5 = PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_r = __pyx_t_5;
@@ -158415,7 +158846,7 @@ static PyObject *__pyx_f_4lxml_5etree_10_Validator__clear_error_log(struct __pyx
     __Pyx_GOTREF(__pyx_t_1);
     if (!PyCFunction_Check(__pyx_t_1) || (PyCFunction_GET_FUNCTION(__pyx_t_1) != (PyCFunction)__pyx_pw_4lxml_5etree_10_Validator_11_clear_error_log)) {
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3292; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_r = __pyx_t_2;
       __pyx_t_2 = 0;
@@ -158611,7 +159042,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__assertValidDTDNode(PyObject *__py
       __Pyx_INCREF(__pyx_v_node);
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_node);
       __Pyx_GIVEREF(__pyx_v_node);
-      __pyx_t_2 = PyObject_Call(__pyx_builtin_id, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_id, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_t_1 = PyUnicode_Format(__pyx_kp_u_invalid_DTD_proxy_at_s, __pyx_t_2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 20; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -158710,7 +159141,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_DTDElementContentDecl___repr__(struct
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_7 = PyObject_Call(__pyx_builtin_id, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_id, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_t_6 = PyTuple_New(6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 31; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -159587,7 +160018,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_DTDAttributeDecl___repr__(struct __pyx
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_9, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_10 = PyObject_Call(__pyx_builtin_id, __pyx_t_9, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_id, __pyx_t_9, NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_10);
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __pyx_t_9 = PyTuple_New(9); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -160681,7 +161112,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_DTDAttributeDecl_5values(struct __pyx_
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_itervalues); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -160689,7 +161120,7 @@ static PyObject *__pyx_pf_4lxml_5etree_17_DTDAttributeDecl_5values(struct __pyx_
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -160781,7 +161212,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_DTDElementDecl___repr__(struct __pyx_o
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_7 = PyObject_Call(__pyx_builtin_id, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_id, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_t_6 = PyTuple_New(6); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -161601,7 +162032,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_DTDElementDecl_5attributes(struct __py
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iterattributes); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -161609,7 +162040,7 @@ static PyObject *__pyx_pf_4lxml_5etree_15_DTDElementDecl_5attributes(struct __py
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -161695,7 +162126,7 @@ static PyObject *__pyx_pf_4lxml_5etree_14_DTDEntityDecl___repr__(struct __pyx_ob
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_5 = PyObject_Call(__pyx_builtin_id, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_id, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -162098,7 +162529,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 277; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -162175,7 +162606,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
         /*finally:*/ {
           /*normal exit:*/{
             if (__pyx_t_6) {
-              __pyx_t_10 = PyObject_Call(__pyx_t_6, __pyx_tuple__97, NULL);
+              __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__97, NULL);
               __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
               if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 281; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_GOTREF(__pyx_t_10);
@@ -162299,7 +162730,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
             __Pyx_GOTREF(__pyx_t_1);
             __pyx_t_13 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;}
             __Pyx_GOTREF(__pyx_t_13);
-            __pyx_t_14 = PyObject_Call(__pyx_t_6, __pyx_t_13, NULL);
+            __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_13, NULL);
             __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
             __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
             if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L24_except_error;}
@@ -162338,7 +162769,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
       /*finally:*/ {
         /*normal exit:*/{
           if (__pyx_t_6) {
-            __pyx_t_8 = PyObject_Call(__pyx_t_6, __pyx_tuple__98, NULL);
+            __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__98, NULL);
             __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
             if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_8);
@@ -162418,7 +162849,7 @@ static int __pyx_pf_4lxml_5etree_3DTD___init__(struct __pyx_obj_4lxml_5etree_DTD
     PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_self->__pyx_base._error_log));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base._error_log));
     __pyx_t_2 = 0;
-    __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 294; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -162820,7 +163251,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_4generator2(__pyx_GeneratorObject *_
  *                 node._dtd = self
  *                 node._c_node = <tree.xmlElement*>c_node
  */
-      __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__DTDElementDecl)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__DTDElementDecl)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 314; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_node));
       __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_node, ((struct __pyx_obj_4lxml_5etree__DTDElementDecl *)__pyx_t_3));
@@ -162943,7 +163374,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_5elements(struct __pyx_obj_4lxml_5et
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iterelements); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -162951,7 +163382,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_5elements(struct __pyx_obj_4lxml_5et
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 321; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -163101,7 +163532,7 @@ static PyObject *__pyx_gb_4lxml_5etree_3DTD_9generator3(__pyx_GeneratorObject *_
  *                 node._dtd = self
  *                 node._c_node = <tree.xmlEntity*>c_node
  */
-      __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__DTDEntityDecl)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__DTDEntityDecl)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_XGOTREF(((PyObject *)__pyx_cur_scope->__pyx_v_node));
       __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_node, ((struct __pyx_obj_4lxml_5etree__DTDEntityDecl *)__pyx_t_3));
@@ -163224,7 +163655,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_10entities(struct __pyx_obj_4lxml_5e
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_iterentities); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -163232,7 +163663,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_10entities(struct __pyx_obj_4lxml_5e
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -163473,7 +163904,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  */
     __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DTDError); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_tuple__99, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__99, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
@@ -163560,7 +163991,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
             __Pyx_GOTREF(__pyx_t_10);
             __pyx_t_11 = PyTuple_Pack(3, __pyx_t_3, __pyx_t_1, __pyx_t_10); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
             __Pyx_GOTREF(__pyx_t_11);
-            __pyx_t_12 = PyObject_Call(__pyx_t_4, __pyx_t_11, NULL);
+            __pyx_t_12 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_11, NULL);
             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
             __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
             if (unlikely(!__pyx_t_12)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
@@ -163599,7 +164030,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
       /*finally:*/ {
         /*normal exit:*/{
           if (__pyx_t_4) {
-            __pyx_t_8 = PyObject_Call(__pyx_t_4, __pyx_tuple__100, NULL);
+            __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__100, NULL);
             __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
             if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 361; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
             __Pyx_GOTREF(__pyx_t_8);
@@ -163708,7 +164139,7 @@ static PyObject *__pyx_pf_4lxml_5etree_3DTD_14__call__(struct __pyx_obj_4lxml_5e
  *                                    self._error_log)
  *         if ret == 1:
  */
-    __pyx_t_3 = PyObject_Call(__pyx_t_10, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -163814,7 +164245,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
  *     dtd_parser = _FileReaderContext(file, exc_context, None)
  *     error_log = _ErrorLog()
  */
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ExceptionContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ExceptionContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_exc_context = ((struct __pyx_obj_4lxml_5etree__ExceptionContext *)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -163837,7 +164268,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
   __Pyx_INCREF(Py_None);
   PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
   __Pyx_GIVEREF(Py_None);
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FileReaderContext)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FileReaderContext)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_dtd_parser = ((struct __pyx_obj_4lxml_5etree__FileReaderContext *)__pyx_t_2);
@@ -163850,7 +164281,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
  * 
  *     with error_log:
  */
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ErrorLog)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)__pyx_t_2);
   __pyx_t_2 = 0;
@@ -163893,7 +164324,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
     /*finally:*/ {
       /*normal exit:*/{
         if (__pyx_t_3) {
-          __pyx_t_7 = PyObject_Call(__pyx_t_3, __pyx_tuple__101, NULL);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__101, NULL);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_7);
@@ -163946,7 +164377,7 @@ static xmlDtd *__pyx_f_4lxml_5etree__parseDtdFromFilelike(PyObject *__pyx_v_file
     __Pyx_INCREF(((PyObject *)__pyx_v_error_log));
     PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_error_log));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_error_log));
-    __pyx_t_9 = PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -164070,7 +164501,7 @@ static struct __pyx_obj_4lxml_5etree_DTD *__pyx_f_4lxml_5etree__dtdFactory(xmlDt
   __Pyx_INCREF(((PyObject *)__pyx_v_dtd));
   PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_dtd));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_dtd));
-  __pyx_t_5 = PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 401; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -164760,7 +165191,7 @@ static int __pyx_pf_4lxml_5etree_7RelaxNG_2__init__(struct __pyx_obj_4lxml_5etre
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -164982,7 +165413,7 @@ static int __pyx_pf_4lxml_5etree_7RelaxNG_2__init__(struct __pyx_obj_4lxml_5etre
         /*finally:*/ {
           /*normal exit:*/{
             if (__pyx_t_9) {
-              __pyx_t_13 = PyObject_Call(__pyx_t_9, __pyx_tuple__102, NULL);
+              __pyx_t_13 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_tuple__102, NULL);
               __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
               if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
               __Pyx_GOTREF(__pyx_t_13);
@@ -165110,7 +165541,7 @@ static int __pyx_pf_4lxml_5etree_7RelaxNG_2__init__(struct __pyx_obj_4lxml_5etre
     PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_self->__pyx_base._error_log));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base._error_log));
     __pyx_t_2 = 0;
-    __pyx_t_2 = PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 69; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -165248,7 +165679,7 @@ static int __pyx_pf_4lxml_5etree_7RelaxNG_2__init__(struct __pyx_obj_4lxml_5etre
     PyTuple_SET_ITEM(__pyx_t_3, 1, ((PyObject *)__pyx_v_self->__pyx_base._error_log));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base._error_log));
     __pyx_t_1 = 0;
-    __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 85; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -165621,7 +166052,7 @@ static PyObject *__pyx_pf_4lxml_5etree_7RelaxNG_6__call__(struct __pyx_obj_4lxml
  *                 u"Internal error in Relax NG validation",
  *                 self._error_log)
  */
-    __pyx_t_5 = PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 125; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -165883,7 +166314,7 @@ static int __pyx_pf_4lxml_5etree_9XMLSchema_2__init__(struct __pyx_obj_4lxml_5et
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -166319,7 +166750,7 @@ static int __pyx_pf_4lxml_5etree_9XMLSchema_2__init__(struct __pyx_obj_4lxml_5et
     PyTuple_SET_ITEM(__pyx_t_2, 1, ((PyObject *)__pyx_v_self->__pyx_base._error_log));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self->__pyx_base._error_log));
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_t_4, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -166351,7 +166782,7 @@ static int __pyx_pf_4lxml_5etree_9XMLSchema_2__init__(struct __pyx_obj_4lxml_5et
     __Pyx_INCREF(((PyObject *)__pyx_v_doc));
     PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_doc));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_doc));
-    __pyx_t_2 = PyObject_Call(((PyObject *)__pyx_v_4lxml_5etree__check_for_default_attributes), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_v_4lxml_5etree__check_for_default_attributes), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -166762,7 +167193,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9XMLSchema_6__call__(struct __pyx_obj_4lx
  *                 u"Internal error in XML Schema validation.",
  *                 self._error_log)
  */
-    __pyx_t_5 = PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -167679,7 +168110,7 @@ static int __pyx_pf_4lxml_5etree_10Schematron_2__init__(struct __pyx_obj_4lxml_5
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -167862,7 +168293,7 @@ static int __pyx_pf_4lxml_5etree_10Schematron_2__init__(struct __pyx_obj_4lxml_5
       /*finally:*/ {
         /*normal exit:*/{
           if (__pyx_t_7) {
-            __pyx_t_11 = PyObject_Call(__pyx_t_7, __pyx_tuple__103, NULL);
+            __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__103, NULL);
             __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
             if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_11);
@@ -167995,7 +168426,7 @@ static int __pyx_pf_4lxml_5etree_10Schematron_2__init__(struct __pyx_obj_4lxml_5
       /*finally:*/ {
         /*normal exit:*/{
           if (__pyx_t_7) {
-            __pyx_t_9 = PyObject_Call(__pyx_t_7, __pyx_tuple__104, NULL);
+            __pyx_t_9 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_tuple__104, NULL);
             __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
             if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L22_error;}
             __Pyx_GOTREF(__pyx_t_9);
@@ -168103,7 +168534,7 @@ static int __pyx_pf_4lxml_5etree_10Schematron_2__init__(struct __pyx_obj_4lxml_5
  *                 u"Document is not a valid Schematron schema",
  *                 self._error_log)
  */
-    __pyx_t_1 = PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 116; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -168628,7 +169059,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10Schematron_6__call__(struct __pyx_obj_4
             __Pyx_GOTREF(__pyx_t_12);
             __pyx_t_13 = PyTuple_Pack(3, __pyx_t_1, __pyx_t_11, __pyx_t_12); if (unlikely(!__pyx_t_13)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
             __Pyx_GOTREF(__pyx_t_13);
-            __pyx_t_14 = PyObject_Call(__pyx_t_6, __pyx_t_13, NULL);
+            __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_13, NULL);
             __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
             __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
             if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L15_except_error;}
@@ -168667,7 +169098,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10Schematron_6__call__(struct __pyx_obj_4
       /*finally:*/ {
         /*normal exit:*/{
           if (__pyx_t_6) {
-            __pyx_t_10 = PyObject_Call(__pyx_t_6, __pyx_tuple__105, NULL);
+            __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__105, NULL);
             __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
             if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             __Pyx_GOTREF(__pyx_t_10);
@@ -168738,7 +169169,7 @@ static PyObject *__pyx_pf_4lxml_5etree_10Schematron_6__call__(struct __pyx_obj_4
  *                 u"Internal error in Schematron validation",
  *                 self._error_log)
  */
-    __pyx_t_1 = PyObject_Call(__pyx_t_12, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_12, __pyx_t_11, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
     __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
@@ -171473,7 +171904,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_6dump(CYTHON_UNUSED struct __p
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_getfilesystemencoding); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -171481,7 +171912,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_6dump(CYTHON_UNUSED struct __p
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -171521,7 +171952,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_6dump(CYTHON_UNUSED struct __p
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_getfilesystemencoding); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -171529,7 +171960,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_6dump(CYTHON_UNUSED struct __p
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -171541,7 +171972,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_6dump(CYTHON_UNUSED struct __p
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_IOError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 56; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
@@ -171841,7 +172272,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_8show(CYTHON_UNUSED struct __p
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_getfilesystemencoding); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -171849,7 +172280,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_8show(CYTHON_UNUSED struct __p
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_5);
     __pyx_t_5 = 0;
-    __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 83; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -171889,7 +172320,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_8show(CYTHON_UNUSED struct __p
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_getfilesystemencoding); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_3 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -171897,7 +172328,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_8show(CYTHON_UNUSED struct __p
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -171909,7 +172340,7 @@ static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_8show(CYTHON_UNUSED struct __p
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_IOError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IOError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
@@ -172013,132 +172444,51 @@ static PyObject *__pyx_pf_4lxml_5etree_9_MemDebug_8show(CYTHON_UNUSED struct __p
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-static struct __pyx_vtabstruct_4lxml_5etree__BaseParser __pyx_vtable_4lxml_5etree__BaseParser;
+static struct __pyx_vtabstruct_4lxml_5etree__TempStore __pyx_vtable_4lxml_5etree__TempStore;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__BaseParser(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__BaseParser *p;
+static PyObject *__pyx_tp_new_4lxml_5etree__TempStore(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__TempStore *p;
   PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+  o = (*t->tp_alloc)(t, 0);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__BaseParser *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__BaseParser;
-  p->_class_lookup = ((struct LxmlElementClassLookup *)Py_None); Py_INCREF(Py_None);
-  p->_resolvers = ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)Py_None); Py_INCREF(Py_None);
-  p->_parser_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)Py_None); Py_INCREF(Py_None);
-  p->_push_parser_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)Py_None); Py_INCREF(Py_None);
-  p->_schema = ((struct __pyx_obj_4lxml_5etree_XMLSchema *)Py_None); Py_INCREF(Py_None);
-  p->_filename = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->target = Py_None; Py_INCREF(Py_None);
-  p->_default_encoding = Py_None; Py_INCREF(Py_None);
-  p->_events_to_collect = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree__TempStore *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__TempStore;
+  p->_storage = ((PyObject*)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__BaseParser(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__BaseParser *p = (struct __pyx_obj_4lxml_5etree__BaseParser *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
+static void __pyx_tp_dealloc_4lxml_5etree__TempStore(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__TempStore *p = (struct __pyx_obj_4lxml_5etree__TempStore *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_class_lookup);
-  Py_CLEAR(p->_resolvers);
-  Py_CLEAR(p->_parser_context);
-  Py_CLEAR(p->_push_parser_context);
-  Py_CLEAR(p->_schema);
-  Py_CLEAR(p->_filename);
-  Py_CLEAR(p->target);
-  Py_CLEAR(p->_default_encoding);
-  Py_CLEAR(p->_events_to_collect);
+  Py_CLEAR(p->_storage);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__BaseParser(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__TempStore(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__BaseParser *p = (struct __pyx_obj_4lxml_5etree__BaseParser *)o;
-  if (p->_class_lookup) {
-    e = (*v)(((PyObject*)p->_class_lookup), a); if (e) return e;
-  }
-  if (p->_resolvers) {
-    e = (*v)(((PyObject*)p->_resolvers), a); if (e) return e;
-  }
-  if (p->_parser_context) {
-    e = (*v)(((PyObject*)p->_parser_context), a); if (e) return e;
-  }
-  if (p->_push_parser_context) {
-    e = (*v)(((PyObject*)p->_push_parser_context), a); if (e) return e;
-  }
-  if (p->_schema) {
-    e = (*v)(((PyObject*)p->_schema), a); if (e) return e;
-  }
-  if (p->target) {
-    e = (*v)(p->target, a); if (e) return e;
-  }
-  if (p->_default_encoding) {
-    e = (*v)(p->_default_encoding, a); if (e) return e;
-  }
-  if (p->_events_to_collect) {
-    e = (*v)(p->_events_to_collect, a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__TempStore *p = (struct __pyx_obj_4lxml_5etree__TempStore *)o;
+  if (p->_storage) {
+    e = (*v)(p->_storage, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__BaseParser(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__BaseParser *p = (struct __pyx_obj_4lxml_5etree__BaseParser *)o;
-  Py_CLEAR(p->_class_lookup);
-  Py_CLEAR(p->_resolvers);
-  Py_CLEAR(p->_parser_context);
-  Py_CLEAR(p->_push_parser_context);
-  Py_CLEAR(p->_schema);
-  Py_CLEAR(p->target);
-  Py_CLEAR(p->_default_encoding);
-  Py_CLEAR(p->_events_to_collect);
+static int __pyx_tp_clear_4lxml_5etree__TempStore(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__TempStore *p = (struct __pyx_obj_4lxml_5etree__TempStore *)o;
+  Py_CLEAR(p->_storage);
   return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_11_BaseParser_error_log(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_11_BaseParser_9error_log_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_11_BaseParser_resolvers(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_11_BaseParser_9resolvers_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_11_BaseParser_version(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_11_BaseParser_7version_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_11_BaseParser_target(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_11_BaseParser_6target_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__BaseParser[] = {
-  {__Pyx_NAMESTR("setElementClassLookup"), (PyCFunction)__pyx_pw_4lxml_5etree_11_BaseParser_3setElementClassLookup, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11_BaseParser_2setElementClassLookup)},
-  {__Pyx_NAMESTR("set_element_class_lookup"), (PyCFunction)__pyx_pw_4lxml_5etree_11_BaseParser_5set_element_class_lookup, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11_BaseParser_4set_element_class_lookup)},
-  {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_4lxml_5etree_11_BaseParser_7copy, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11_BaseParser_6copy)},
-  {__Pyx_NAMESTR("makeelement"), (PyCFunction)__pyx_pw_4lxml_5etree_11_BaseParser_9makeelement, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11_BaseParser_8makeelement)},
+static PyMethodDef __pyx_methods_4lxml_5etree__TempStore[] = {
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__BaseParser[] = {
-  {(char *)"error_log", __pyx_getprop_4lxml_5etree_11_BaseParser_error_log, 0, __Pyx_DOCSTR(__pyx_k_The_error_log_of_the_last_parser), 0},
-  {(char *)"resolvers", __pyx_getprop_4lxml_5etree_11_BaseParser_resolvers, 0, __Pyx_DOCSTR(__pyx_k_The_custom_resolver_registry_of), 0},
-  {(char *)"version", __pyx_getprop_4lxml_5etree_11_BaseParser_version, 0, __Pyx_DOCSTR(__pyx_k_The_version_of_the_underlying_XM), 0},
-  {(char *)"target", __pyx_getprop_4lxml_5etree_11_BaseParser_target, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__BaseParser = {
+static PyTypeObject __pyx_type_4lxml_5etree__TempStore = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._BaseParser"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__BaseParser), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._TempStore"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__TempStore), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__TempStore, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -172157,25 +172507,25 @@ static PyTypeObject __pyx_type_4lxml_5etree__BaseParser = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__TempStore, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__TempStore, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__BaseParser, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__TempStore, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__BaseParser, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_11_BaseParser_1__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_10_TempStore_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__BaseParser, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__TempStore, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -172191,115 +172541,56 @@ static PyTypeObject __pyx_type_4lxml_5etree__BaseParser = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__FeedParser __pyx_vtable_4lxml_5etree__FeedParser;
+static struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext __pyx_vtable_4lxml_5etree__ExceptionContext;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__FeedParser(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__FeedParser *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__BaseParser(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__ExceptionContext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ExceptionContext *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__FeedParser *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseParser*)__pyx_vtabptr_4lxml_5etree__FeedParser;
+  p = ((struct __pyx_obj_4lxml_5etree__ExceptionContext *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ExceptionContext;
+  p->_exc_info = Py_None; Py_INCREF(Py_None);
   return o;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_11_FeedParser_feed_error_log(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_11_FeedParser_14feed_error_log_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__FeedParser[] = {
-  {__Pyx_NAMESTR("feed"), (PyCFunction)__pyx_pw_4lxml_5etree_11_FeedParser_1feed, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11_FeedParser_feed)},
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_4lxml_5etree_11_FeedParser_3close, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11_FeedParser_2close)},
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__FeedParser[] = {
-  {(char *)"feed_error_log", __pyx_getprop_4lxml_5etree_11_FeedParser_feed_error_log, 0, __Pyx_DOCSTR(__pyx_k_The_error_log_of_the_last_or_cur), 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__FeedParser = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._FeedParser"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__FeedParser), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__FeedParser, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__FeedParser, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_11_BaseParser_1__init__, /*tp_init*/
-  #else
-  0, /*tp_init*/
-  #endif
-  0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__FeedParser, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
-  #endif
+static void __pyx_tp_dealloc_4lxml_5etree__ExceptionContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ExceptionContext *p = (struct __pyx_obj_4lxml_5etree__ExceptionContext *)o;
   #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
   #endif
-};
-static struct __pyx_vtabstruct_4lxml_5etree_XMLParser __pyx_vtable_4lxml_5etree_XMLParser;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_exc_info);
+  (*Py_TYPE(o)->tp_free)(o);
+}
 
-static PyObject *__pyx_tp_new_4lxml_5etree_XMLParser(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_XMLParser *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__FeedParser(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_XMLParser *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseParser*)__pyx_vtabptr_4lxml_5etree_XMLParser;
-  return o;
+static int __pyx_tp_traverse_4lxml_5etree__ExceptionContext(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__ExceptionContext *p = (struct __pyx_obj_4lxml_5etree__ExceptionContext *)o;
+  if (p->_exc_info) {
+    e = (*v)(p->_exc_info, a); if (e) return e;
+  }
+  return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_XMLParser[] = {
-  {0, 0, 0, 0}
-};
+static int __pyx_tp_clear_4lxml_5etree__ExceptionContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ExceptionContext *p = (struct __pyx_obj_4lxml_5etree__ExceptionContext *)o;
+  Py_CLEAR(p->_exc_info);
+  return 0;
+}
 
-static PyTypeObject __pyx_type_4lxml_5etree_XMLParser = {
+static PyTypeObject __pyx_type_4lxml_5etree__ExceptionContext = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.XMLParser"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_XMLParser), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ExceptionContext"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ExceptionContext), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ExceptionContext, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -172319,14 +172610,14 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLParser = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("XMLParser(self, encoding=None, attribute_defaults=False, dtd_validation=False, load_dtd=False, no_network=True, ns_clean=False, recover=False, XMLSchema schema=None, remove_blank_text=False, resolve_entities=True, remove_comments=False, remove_pis=False, strip_cdata=True, target=None, compact=True)\n\n    The XML parser.\n\n    Parsers can be supplied as additional argument to various parse\n    functions of the lxml API.  A default parser is always available\n    and can be replaced by a call to the global function\n    'set_default_parser'.  New parsers can be created at any time\n    without a major run-time overhead.\n\n    The keyword arguments in the constructor are mainly based on the\n    libxml2 parser configuration.  A DTD will also be loaded if DTD\n    validation or attribute default values are requested (unless you\n    additionally provide an XMLSchema from which the default\n    attributes can be read).\n\n    Available boolean keyword arguments:\n\n    - attribute_defaults - inject default attributes from DTD or XMLSchema\n    - dtd_validation     - validate against a DTD referenced by the document\n    - load_dtd           - use DTD for parsing\n    - no_network         - prevent network access for related files (default: True)\n    - ns_clean           - clean up redundant namespace declarations\n    - recover            - try hard to parse through broken XML\n    - remove_blank_text  - discard blank text nodes\n    - remove_comments    - discard comments\n    - remove_pis         - discard processing instructions\n    - strip_cdata        - replace CDATA sections by normal text content (default: True)\n    - compact            - safe memory for short text content (default: True)\n    - resolve_entities   - replace entities by their text value (default: True)\n    - huge_tree          - disable security restrictions and support very deep trees\n                           and very long text content (only affects libxml2 2.7+)\n\n    Other keyword arguments:\n\n    - encoding - override the document encoding\n    - target   - a parser target object that will receive the parse events\n    - schema   - an XMLSchema to validate against\n\n    Note that you should avoid sharing parsers between threads.  While this is\n    not harmful, it is more efficient to use separate parsers.  This does not\n    apply to the default parser.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ExceptionContext, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ExceptionContext, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_XMLParser, /*tp_methods*/
+  0, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -172334,9 +172625,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLParser = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_9XMLParser_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_XMLParser, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ExceptionContext, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -172352,27 +172643,75 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLParser = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_ETCompatXMLParser __pyx_vtable_4lxml_5etree_ETCompatXMLParser;
+static struct __pyx_vtabstruct_4lxml_5etree__Document __pyx_vtable_4lxml_5etree__Document;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_ETCompatXMLParser(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_ETCompatXMLParser *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree_XMLParser(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_ETCompatXMLParser *)o);
-  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseParser*)__pyx_vtabptr_4lxml_5etree_ETCompatXMLParser;
+static struct LxmlDocument *__pyx_freelist_4lxml_5etree__Document[8];
+static int __pyx_freecount_4lxml_5etree__Document = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree__Document(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct LxmlDocument *p;
+  PyObject *o;
+  if (likely((__pyx_freecount_4lxml_5etree__Document > 0) & (t->tp_basicsize == sizeof(struct LxmlDocument)))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree__Document[--__pyx_freecount_4lxml_5etree__Document];
+    memset(o, 0, sizeof(struct LxmlDocument));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
+  } else {
+    o = (*t->tp_alloc)(t, 0);
+    if (unlikely(!o)) return 0;
+  }
+  p = ((struct LxmlDocument *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__Document;
+  p->_prefix_tail = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_parser = ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_ETCompatXMLParser[] = {
+static void __pyx_tp_dealloc_4lxml_5etree__Document(PyObject *o) {
+  struct LxmlDocument *p = (struct LxmlDocument *)o;
+  PyObject_GC_UnTrack(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_4lxml_5etree_9_Document_1__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_CLEAR(p->_prefix_tail);
+  Py_CLEAR(p->_parser);
+  if ((__pyx_freecount_4lxml_5etree__Document < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct LxmlDocument))) {
+    __pyx_freelist_4lxml_5etree__Document[__pyx_freecount_4lxml_5etree__Document++] = ((struct LxmlDocument *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
+  }
+}
+
+static int __pyx_tp_traverse_4lxml_5etree__Document(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct LxmlDocument *p = (struct LxmlDocument *)o;
+  if (p->_parser) {
+    e = (*v)(((PyObject*)p->_parser), a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree__Document(PyObject *o) {
+  struct LxmlDocument *p = (struct LxmlDocument *)o;
+  Py_CLEAR(p->_parser);
+  return 0;
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__Document[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_ETCompatXMLParser = {
+DL_EXPORT(PyTypeObject) LxmlDocumentType = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.ETCompatXMLParser"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_ETCompatXMLParser), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._Document"), /*tp_name*/
+  sizeof(struct LxmlDocument), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__Document, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -172391,15 +172730,15 @@ static PyTypeObject __pyx_type_4lxml_5etree_ETCompatXMLParser = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("ETCompatXMLParser(self, encoding=None, attribute_defaults=False,                  dtd_validation=False, load_dtd=False, no_network=True,                  ns_clean=False, recover=False, schema=None,                  huge_tree=False, remove_blank_text=False, resolve_entities=True,                  remove_comments=True, remove_pis=True, strip_cdata=True,                  target=None, compact=True)\n\n    An XML parser with an ElementTree compatible default setup.\n\n    See the XMLParser class for details.\n\n    This parser has ``remove_comments`` and ``remove_pis`` enabled by default\n    and thus ignores comments and processing instructions.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("Internal base class to reference a libxml document.\n\n    When instances of this class are garbage collected, the libxml\n    document is cleaned up.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__Document, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__Document, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_ETCompatXMLParser, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__Document, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -172407,9 +172746,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_ETCompatXMLParser = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_ETCompatXMLParser, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__Document, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -172773,101 +173112,132 @@ DL_EXPORT(PyTypeObject) LxmlElementType = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement __pyx_vtable_4lxml_5etree___ContentOnlyElement;
+static struct __pyx_vtabstruct_4lxml_5etree__BaseParser __pyx_vtable_4lxml_5etree__BaseParser;
 
-static PyObject *__pyx_tp_new_4lxml_5etree___ContentOnlyElement(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree___ContentOnlyElement *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__Element(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__BaseParser(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__BaseParser *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree___ContentOnlyElement *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree___ContentOnlyElement;
+  p = ((struct __pyx_obj_4lxml_5etree__BaseParser *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__BaseParser;
+  p->_class_lookup = ((struct LxmlElementClassLookup *)Py_None); Py_INCREF(Py_None);
+  p->_resolvers = ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)Py_None); Py_INCREF(Py_None);
+  p->_parser_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)Py_None); Py_INCREF(Py_None);
+  p->_push_parser_context = ((struct __pyx_obj_4lxml_5etree__ParserContext *)Py_None); Py_INCREF(Py_None);
+  p->_schema = ((struct __pyx_obj_4lxml_5etree_XMLSchema *)Py_None); Py_INCREF(Py_None);
+  p->_filename = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->target = Py_None; Py_INCREF(Py_None);
+  p->_default_encoding = Py_None; Py_INCREF(Py_None);
+  p->_events_to_collect = ((PyObject*)Py_None); Py_INCREF(Py_None);
   return o;
 }
-static PyObject *__pyx_sq_item_4lxml_5etree___ContentOnlyElement(PyObject *o, Py_ssize_t i) {
-  PyObject *r;
-  PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
-  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
-  Py_DECREF(x);
-  return r;
+
+static void __pyx_tp_dealloc_4lxml_5etree__BaseParser(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__BaseParser *p = (struct __pyx_obj_4lxml_5etree__BaseParser *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_class_lookup);
+  Py_CLEAR(p->_resolvers);
+  Py_CLEAR(p->_parser_context);
+  Py_CLEAR(p->_push_parser_context);
+  Py_CLEAR(p->_schema);
+  Py_CLEAR(p->_filename);
+  Py_CLEAR(p->target);
+  Py_CLEAR(p->_default_encoding);
+  Py_CLEAR(p->_events_to_collect);
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_mp_ass_subscript_4lxml_5etree___ContentOnlyElement(PyObject *o, PyObject *i, PyObject *v) {
-  if (v) {
-    return __pyx_pw_4lxml_5etree_20__ContentOnlyElement_7__setitem__(o, i, v);
+static int __pyx_tp_traverse_4lxml_5etree__BaseParser(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__BaseParser *p = (struct __pyx_obj_4lxml_5etree__BaseParser *)o;
+  if (p->_class_lookup) {
+    e = (*v)(((PyObject*)p->_class_lookup), a); if (e) return e;
   }
-  else {
-    if (__pyx_ptype_4lxml_5etree__Element->tp_as_mapping && __pyx_ptype_4lxml_5etree__Element->tp_as_mapping->mp_ass_subscript)
-      return __pyx_ptype_4lxml_5etree__Element->tp_as_mapping->mp_ass_subscript(o, i, v);
-    PyErr_Format(PyExc_NotImplementedError,
-      "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);
-    return -1;
+  if (p->_resolvers) {
+    e = (*v)(((PyObject*)p->_resolvers), a); if (e) return e;
+  }
+  if (p->_parser_context) {
+    e = (*v)(((PyObject*)p->_parser_context), a); if (e) return e;
+  }
+  if (p->_push_parser_context) {
+    e = (*v)(((PyObject*)p->_push_parser_context), a); if (e) return e;
+  }
+  if (p->_schema) {
+    e = (*v)(((PyObject*)p->_schema), a); if (e) return e;
+  }
+  if (p->target) {
+    e = (*v)(p->target, a); if (e) return e;
+  }
+  if (p->_default_encoding) {
+    e = (*v)(p->_default_encoding, a); if (e) return e;
   }
+  if (p->_events_to_collect) {
+    e = (*v)(p->_events_to_collect, a); if (e) return e;
+  }
+  return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_20__ContentOnlyElement_attrib(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_20__ContentOnlyElement_6attrib_1__get__(o);
+static int __pyx_tp_clear_4lxml_5etree__BaseParser(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__BaseParser *p = (struct __pyx_obj_4lxml_5etree__BaseParser *)o;
+  Py_CLEAR(p->_class_lookup);
+  Py_CLEAR(p->_resolvers);
+  Py_CLEAR(p->_parser_context);
+  Py_CLEAR(p->_push_parser_context);
+  Py_CLEAR(p->_schema);
+  Py_CLEAR(p->target);
+  Py_CLEAR(p->_default_encoding);
+  Py_CLEAR(p->_events_to_collect);
+  return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_20__ContentOnlyElement_text(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_20__ContentOnlyElement_4text_1__get__(o);
+static PyObject *__pyx_getprop_4lxml_5etree_11_BaseParser_error_log(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_11_BaseParser_9error_log_1__get__(o);
 }
 
-static int __pyx_setprop_4lxml_5etree_20__ContentOnlyElement_text(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_4lxml_5etree_20__ContentOnlyElement_4text_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
+static PyObject *__pyx_getprop_4lxml_5etree_11_BaseParser_resolvers(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_11_BaseParser_9resolvers_1__get__(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree___ContentOnlyElement[] = {
-  {__Pyx_NAMESTR("set"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_1set, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_set)},
-  {__Pyx_NAMESTR("append"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_3append, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_2append)},
-  {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_5insert, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_4insert)},
-  {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_13get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_12get)},
-  {__Pyx_NAMESTR("keys"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_15keys, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_14keys)},
-  {__Pyx_NAMESTR("items"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_17items, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_16items)},
-  {__Pyx_NAMESTR("values"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_19values, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_18values)},
-  {0, 0, 0, 0}
-};
+static PyObject *__pyx_getprop_4lxml_5etree_11_BaseParser_version(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_11_BaseParser_7version_1__get__(o);
+}
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree___ContentOnlyElement[] = {
-  {(char *)"attrib", __pyx_getprop_4lxml_5etree_20__ContentOnlyElement_attrib, 0, 0, 0},
-  {(char *)"text", __pyx_getprop_4lxml_5etree_20__ContentOnlyElement_text, __pyx_setprop_4lxml_5etree_20__ContentOnlyElement_text, 0, 0},
-  {0, 0, 0, 0, 0}
-};
+static PyObject *__pyx_getprop_4lxml_5etree_11_BaseParser_target(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_11_BaseParser_6target_1__get__(o);
+}
 
-static PySequenceMethods __pyx_tp_as_sequence___ContentOnlyElement = {
-  __pyx_pw_4lxml_5etree_20__ContentOnlyElement_11__len__, /*sq_length*/
-  0, /*sq_concat*/
-  0, /*sq_repeat*/
-  __pyx_sq_item_4lxml_5etree___ContentOnlyElement, /*sq_item*/
-  0, /*sq_slice*/
-  0, /*sq_ass_item*/
-  0, /*sq_ass_slice*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_8_Element_39__contains__, /*sq_contains*/
-  #else
-  0, /*sq_contains*/
-  #endif
-  0, /*sq_inplace_concat*/
-  0, /*sq_inplace_repeat*/
+static PyMethodDef __pyx_methods_4lxml_5etree__BaseParser[] = {
+  {__Pyx_NAMESTR("setElementClassLookup"), (PyCFunction)__pyx_pw_4lxml_5etree_11_BaseParser_3setElementClassLookup, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11_BaseParser_2setElementClassLookup)},
+  {__Pyx_NAMESTR("set_element_class_lookup"), (PyCFunction)__pyx_pw_4lxml_5etree_11_BaseParser_5set_element_class_lookup, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11_BaseParser_4set_element_class_lookup)},
+  {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_4lxml_5etree_11_BaseParser_7copy, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11_BaseParser_6copy)},
+  {__Pyx_NAMESTR("makeelement"), (PyCFunction)__pyx_pw_4lxml_5etree_11_BaseParser_9makeelement, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11_BaseParser_8makeelement)},
+  {0, 0, 0, 0}
 };
 
-static PyMappingMethods __pyx_tp_as_mapping___ContentOnlyElement = {
-  __pyx_pw_4lxml_5etree_20__ContentOnlyElement_11__len__, /*mp_length*/
-  __pyx_pw_4lxml_5etree_20__ContentOnlyElement_9__getitem__, /*mp_subscript*/
-  __pyx_mp_ass_subscript_4lxml_5etree___ContentOnlyElement, /*mp_ass_subscript*/
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__BaseParser[] = {
+  {(char *)"error_log", __pyx_getprop_4lxml_5etree_11_BaseParser_error_log, 0, __Pyx_DOCSTR(__pyx_k_The_error_log_of_the_last_parser), 0},
+  {(char *)"resolvers", __pyx_getprop_4lxml_5etree_11_BaseParser_resolvers, 0, __Pyx_DOCSTR(__pyx_k_The_custom_resolver_registry_of), 0},
+  {(char *)"version", __pyx_getprop_4lxml_5etree_11_BaseParser_version, 0, __Pyx_DOCSTR(__pyx_k_The_version_of_the_underlying_XM), 0},
+  {(char *)"target", __pyx_getprop_4lxml_5etree_11_BaseParser_target, 0, 0, 0},
+  {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree___ContentOnlyElement = {
+static PyTypeObject __pyx_type_4lxml_5etree__BaseParser = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.__ContentOnlyElement"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree___ContentOnlyElement), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._BaseParser"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__BaseParser), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -172876,14 +173246,10 @@ static PyTypeObject __pyx_type_4lxml_5etree___ContentOnlyElement = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_8_Element_31__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
-  &__pyx_tp_as_sequence___ContentOnlyElement, /*tp_as_sequence*/
-  &__pyx_tp_as_mapping___ContentOnlyElement, /*tp_as_mapping*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
   0, /*tp_hash*/
   0, /*tp_call*/
   0, /*tp_str*/
@@ -172892,27 +173258,23 @@ static PyTypeObject __pyx_type_4lxml_5etree___ContentOnlyElement = {
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
-  0, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree___ContentOnlyElement, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__BaseParser, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree___ContentOnlyElement, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__BaseParser, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_11_BaseParser_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree___ContentOnlyElement, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__BaseParser, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -172928,57 +173290,78 @@ static PyTypeObject __pyx_type_4lxml_5etree___ContentOnlyElement = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ProcessingInstruction __pyx_vtable_4lxml_5etree__ProcessingInstruction;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ProcessingInstruction(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ProcessingInstruction *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree___ContentOnlyElement(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ProcessingInstruction *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree__ProcessingInstruction;
+static struct __pyx_obj_4lxml_5etree_QName *__pyx_freelist_4lxml_5etree_QName[8];
+static int __pyx_freecount_4lxml_5etree_QName = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree_QName(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_QName *p;
+  PyObject *o;
+  if (likely((__pyx_freecount_4lxml_5etree_QName > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree_QName)) & ((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree_QName[--__pyx_freecount_4lxml_5etree_QName];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree_QName));
+    (void) PyObject_INIT(o, t);
+  } else {
+    if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+      o = (*t->tp_alloc)(t, 0);
+    } else {
+      o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+    }
+    if (unlikely(!o)) return 0;
+  }
+  p = ((struct __pyx_obj_4lxml_5etree_QName *)o);
+  p->text = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->localname = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->namespace = ((PyObject*)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_22_ProcessingInstruction_tag(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_22_ProcessingInstruction_3tag_1__get__(o);
+static void __pyx_tp_dealloc_4lxml_5etree_QName(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_QName *p = (struct __pyx_obj_4lxml_5etree_QName *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  Py_CLEAR(p->text);
+  Py_CLEAR(p->localname);
+  Py_CLEAR(p->namespace);
+  if ((__pyx_freecount_4lxml_5etree_QName < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree_QName))) {
+    __pyx_freelist_4lxml_5etree_QName[__pyx_freecount_4lxml_5etree_QName++] = ((struct __pyx_obj_4lxml_5etree_QName *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
+  }
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_22_ProcessingInstruction_target(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_22_ProcessingInstruction_6target_1__get__(o);
+static PyObject *__pyx_getprop_4lxml_5etree_5QName_text(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_5QName_4text_1__get__(o);
 }
 
-static int __pyx_setprop_4lxml_5etree_22_ProcessingInstruction_target(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_4lxml_5etree_22_ProcessingInstruction_6target_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
-  }
+static PyObject *__pyx_getprop_4lxml_5etree_5QName_localname(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_5QName_9localname_1__get__(o);
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_22_ProcessingInstruction_attrib(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_22_ProcessingInstruction_6attrib_1__get__(o);
+static PyObject *__pyx_getprop_4lxml_5etree_5QName_namespace(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_5QName_9namespace_1__get__(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__ProcessingInstruction[] = {
-  {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_4lxml_5etree_22_ProcessingInstruction_3get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_ProcessingInstruction_2get)},
+static PyMethodDef __pyx_methods_4lxml_5etree_QName[] = {
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ProcessingInstruction[] = {
-  {(char *)"tag", __pyx_getprop_4lxml_5etree_22_ProcessingInstruction_tag, 0, 0, 0},
-  {(char *)"target", __pyx_getprop_4lxml_5etree_22_ProcessingInstruction_target, __pyx_setprop_4lxml_5etree_22_ProcessingInstruction_target, 0, 0},
-  {(char *)"attrib", __pyx_getprop_4lxml_5etree_22_ProcessingInstruction_attrib, 0, __Pyx_DOCSTR(__pyx_k_Returns_a_dict_containing_all_ps), 0},
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree_QName[] = {
+  {(char *)"text", __pyx_getprop_4lxml_5etree_5QName_text, 0, 0, 0},
+  {(char *)"localname", __pyx_getprop_4lxml_5etree_5QName_localname, 0, 0, 0},
+  {(char *)"namespace", __pyx_getprop_4lxml_5etree_5QName_namespace, 0, 0, 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ProcessingInstruction = {
+static PyTypeObject __pyx_type_4lxml_5etree_QName = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ProcessingInstruction"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ProcessingInstruction), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.QName"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_QName), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_QName, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -172987,39 +173370,35 @@ static PyTypeObject __pyx_type_4lxml_5etree__ProcessingInstruction = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_22_ProcessingInstruction_1__repr__, /*tp_repr*/
+  0, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
-  0, /*tp_hash*/
+  __pyx_pw_4lxml_5etree_5QName_5__hash__, /*tp_hash*/
   0, /*tp_call*/
-  0, /*tp_str*/
+  __pyx_pw_4lxml_5etree_5QName_3__str__, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+  __Pyx_DOCSTR("QName(text_or_uri_or_element, tag=None)\n\n    QName wrapper for qualified XML names.\n\n    Pass a tag name by itself or a namespace URI and a tag name to\n    create a qualified name.  Alternatively, pass an Element to\n    extract its tag name.\n\n    The ``text`` property holds the qualified name in\n    ``{namespace}tagname`` notation.  The ``namespace`` and\n    ``localname`` properties hold the respective parts of the tag\n    name.\n\n    You can pass QName objects wherever a tag name is expected.  Also,\n    setting Element text from a QName will resolve the namespace\n    prefix and set a qualified text value.  This is helpful in XML\n    languages like SOAP or XML-Schema that use prefixed tag names in\n    their text content.\n    "), /*tp_doc*/
+  0, /*tp_traverse*/
   0, /*tp_clear*/
-  0, /*tp_richcompare*/
+  __pyx_pw_4lxml_5etree_5QName_7__richcmp__, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ProcessingInstruction, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_QName, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__ProcessingInstruction, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree_QName, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_5QName_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ProcessingInstruction, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_QName, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -173035,196 +173414,142 @@ static PyTypeObject __pyx_type_4lxml_5etree__ProcessingInstruction = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_PIBase __pyx_vtable_4lxml_5etree_PIBase;
+static struct __pyx_vtabstruct_4lxml_5etree__LogEntry __pyx_vtable_4lxml_5etree__LogEntry;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_PIBase(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_PIBase *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ProcessingInstruction(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_PIBase *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree_PIBase;
+static struct __pyx_obj_4lxml_5etree__LogEntry *__pyx_freelist_4lxml_5etree__LogEntry[16];
+static int __pyx_freecount_4lxml_5etree__LogEntry = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree__LogEntry(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__LogEntry *p;
+  PyObject *o;
+  if (likely((__pyx_freecount_4lxml_5etree__LogEntry > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__LogEntry)) & ((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree__LogEntry[--__pyx_freecount_4lxml_5etree__LogEntry];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__LogEntry));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
+  } else {
+    if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+      o = (*t->tp_alloc)(t, 0);
+    } else {
+      o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+    }
+    if (unlikely(!o)) return 0;
+  }
+  p = ((struct __pyx_obj_4lxml_5etree__LogEntry *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__LogEntry;
+  p->_message = Py_None; Py_INCREF(Py_None);
+  p->_filename = Py_None; Py_INCREF(Py_None);
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_PIBase[] = {
-  {0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree_PIBase = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.PIBase"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_PIBase), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_22_ProcessingInstruction_1__repr__, /*tp_repr*/
-  #else
-  0, /*tp_repr*/
-  #endif
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("All custom Processing Instruction classes must inherit from this one.\n\n    To create an XML ProcessingInstruction instance, use the ``PI()``\n    factory.\n\n    Subclasses *must not* override __init__ or __new__ as it is\n    absolutely undefined when these objects will be created or\n    destroyed.  All persistent state of PIs must be stored in the\n    underlying XML.  If you really need to initialize the object after\n    creation, you can implement an ``_init(self)`` method that will be\n    called after object creation.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
-  0, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
-  #else
-  0, /*tp_iter*/
-  #endif
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_PIBase, /*tp_methods*/
-  0, /*tp_members*/
-  0, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_6PIBase_1__init__, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_PIBase, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
-  #endif
+static void __pyx_tp_dealloc_4lxml_5etree__LogEntry(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__LogEntry *p = (struct __pyx_obj_4lxml_5etree__LogEntry *)o;
   #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
   #endif
-};
-static struct __pyx_vtabstruct_4lxml_5etree__XSLTProcessingInstruction __pyx_vtable_4lxml_5etree__XSLTProcessingInstruction;
+  PyObject_GC_UnTrack(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_4lxml_5etree_9_LogEntry_1__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_CLEAR(p->_message);
+  Py_CLEAR(p->_filename);
+  if ((__pyx_freecount_4lxml_5etree__LogEntry < 16) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__LogEntry))) {
+    __pyx_freelist_4lxml_5etree__LogEntry[__pyx_freecount_4lxml_5etree__LogEntry++] = ((struct __pyx_obj_4lxml_5etree__LogEntry *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
+  }
+}
 
-static PyObject *__pyx_tp_new_4lxml_5etree__XSLTProcessingInstruction(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__XSLTProcessingInstruction *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree_PIBase(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__XSLTProcessingInstruction *)o);
-  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree__XSLTProcessingInstruction;
-  return o;
+static int __pyx_tp_traverse_4lxml_5etree__LogEntry(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__LogEntry *p = (struct __pyx_obj_4lxml_5etree__LogEntry *)o;
+  if (p->_message) {
+    e = (*v)(p->_message, a); if (e) return e;
+  }
+  if (p->_filename) {
+    e = (*v)(p->_filename, a); if (e) return e;
+  }
+  return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__XSLTProcessingInstruction[] = {
-  {__Pyx_NAMESTR("parseXSL"), (PyCFunction)__pyx_pw_4lxml_5etree_26_XSLTProcessingInstruction_1parseXSL, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL)},
-  {__Pyx_NAMESTR("set"), (PyCFunction)__pyx_pw_4lxml_5etree_26_XSLTProcessingInstruction_3set, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_26_XSLTProcessingInstruction_2set)},
-  {0, 0, 0, 0}
-};
+static int __pyx_tp_clear_4lxml_5etree__LogEntry(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__LogEntry *p = (struct __pyx_obj_4lxml_5etree__LogEntry *)o;
+  Py_CLEAR(p->_message);
+  Py_CLEAR(p->_filename);
+  return 0;
+}
 
-static PyTypeObject __pyx_type_4lxml_5etree__XSLTProcessingInstruction = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._XSLTProcessingInstruction"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__XSLTProcessingInstruction), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_22_ProcessingInstruction_1__repr__, /*tp_repr*/
-  #else
-  0, /*tp_repr*/
-  #endif
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
-  0, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
-  #else
-  0, /*tp_iter*/
-  #endif
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__XSLTProcessingInstruction, /*tp_methods*/
-  0, /*tp_members*/
-  0, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_6PIBase_1__init__, /*tp_init*/
-  #else
-  0, /*tp_init*/
-  #endif
-  0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__XSLTProcessingInstruction, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
-  #endif
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-static struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser __pyx_vtable_4lxml_5etree_XMLPullParser;
+static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_domain_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_9_LogEntry_11domain_name_1__get__(o);
+}
 
-static PyObject *__pyx_tp_new_4lxml_5etree_XMLPullParser(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_XMLPullParser *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree_XMLParser(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_XMLPullParser *)o);
-  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseParser*)__pyx_vtabptr_4lxml_5etree_XMLPullParser;
-  return o;
+static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_type_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_9_LogEntry_9type_name_1__get__(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_XMLPullParser[] = {
-  {__Pyx_NAMESTR("read_events"), (PyCFunction)__pyx_pw_4lxml_5etree_13XMLPullParser_3read_events, METH_NOARGS, __Pyx_DOCSTR(0)},
+static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_level_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_9_LogEntry_10level_name_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_message(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_9_LogEntry_7message_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_filename(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_9_LogEntry_8filename_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_domain(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_9_LogEntry_6domain_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_type(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_9_LogEntry_4type_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_level(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_9_LogEntry_5level_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_line(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_9_LogEntry_4line_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_column(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_9_LogEntry_6column_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__LogEntry[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_XMLPullParser = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__LogEntry[] = {
+  {(char *)"domain_name", __pyx_getprop_4lxml_5etree_9_LogEntry_domain_name, 0, __Pyx_DOCSTR(__pyx_k_The_name_of_the_error_domain_See), 0},
+  {(char *)"type_name", __pyx_getprop_4lxml_5etree_9_LogEntry_type_name, 0, __Pyx_DOCSTR(__pyx_k_The_name_of_the_error_type_See_l), 0},
+  {(char *)"level_name", __pyx_getprop_4lxml_5etree_9_LogEntry_level_name, 0, __Pyx_DOCSTR(__pyx_k_The_name_of_the_error_level_See), 0},
+  {(char *)"message", __pyx_getprop_4lxml_5etree_9_LogEntry_message, 0, 0, 0},
+  {(char *)"filename", __pyx_getprop_4lxml_5etree_9_LogEntry_filename, 0, 0, 0},
+  {(char *)"domain", __pyx_getprop_4lxml_5etree_9_LogEntry_domain, 0, 0, 0},
+  {(char *)"type", __pyx_getprop_4lxml_5etree_9_LogEntry_type, 0, 0, 0},
+  {(char *)"level", __pyx_getprop_4lxml_5etree_9_LogEntry_level, 0, 0, 0},
+  {(char *)"line", __pyx_getprop_4lxml_5etree_9_LogEntry_line, 0, 0, 0},
+  {(char *)"column", __pyx_getprop_4lxml_5etree_9_LogEntry_column, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__LogEntry = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.XMLPullParser"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_XMLPullParser), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._LogEntry"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__LogEntry), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__LogEntry, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -173233,7 +173558,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLPullParser = {
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_9_LogEntry_3__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -173244,24 +173569,24 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLPullParser = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("XMLPullParser(self, events=None, *, tag=None, **kwargs)\n\n    XML parser that collects parse events in an iterator.\n\n    The collected events are the same as for iterparse(), but the\n    parser itself is non-blocking in the sense that it receives\n    data chunks incrementally through its .feed() method, instead\n    of reading them directly from a file(-like) object all by itself.\n\n    By default, it collects Element end events.  To change that,\n    pass any subset of the available events into the ``events``\n    argument: ``'start'``, ``'end'``, ``'start-ns'``,\n    ``'end-ns'``, ``'comment'``, ``'pi'``.\n\n    To support loading external dependencies relative to the input\n    source, you can pass the ``base_url``.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
+  __Pyx_DOCSTR("A log message entry from an error log.\n\n    Attributes:\n\n    - message: the message text\n    - domain: the domain ID (see lxml.etree.ErrorDomains)\n    - type: the message type ID (see lxml.etree.ErrorTypes)\n    - level: the log level ID (see lxml.etree.ErrorLevels)\n    - line: the line at which the message originated (if applicable)\n    - column: the character column at which the message originated (if applicable)\n    - filename: the name of the file in which the message originated (if applicable)\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__LogEntry, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__LogEntry, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_XMLPullParser, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__LogEntry, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__LogEntry, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_13XMLPullParser_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_XMLPullParser, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__LogEntry, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -173277,56 +173602,77 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLPullParser = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog __pyx_vtable_4lxml_5etree__BaseErrorLog;
 
-static struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *__pyx_freelist_4lxml_5etree___pyx_scope_struct__itervalues[8];
-static int __pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct__itervalues(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_4lxml_5etree__BaseErrorLog(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__BaseErrorLog *p;
   PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues)))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct__itervalues[--__pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
-  } else {
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
     o = (*t->tp_alloc)(t, 0);
-    if (unlikely(!o)) return 0;
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__BaseErrorLog;
+  p->_first_error = ((struct __pyx_obj_4lxml_5etree__LogEntry *)Py_None); Py_INCREF(Py_None);
+  p->last_error = Py_None; Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct__itervalues(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->__pyx_v_self);
-  if ((__pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues))) {
-    __pyx_freelist_4lxml_5etree___pyx_scope_struct__itervalues[__pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues++] = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
+static void __pyx_tp_dealloc_4lxml_5etree__BaseErrorLog(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__BaseErrorLog *p = (struct __pyx_obj_4lxml_5etree__BaseErrorLog *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_first_error);
+  Py_CLEAR(p->last_error);
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct__itervalues(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__BaseErrorLog(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *)o;
-  if (p->__pyx_v_self) {
-    e = (*v)(((PyObject*)p->__pyx_v_self), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__BaseErrorLog *p = (struct __pyx_obj_4lxml_5etree__BaseErrorLog *)o;
+  if (p->_first_error) {
+    e = (*v)(((PyObject*)p->_first_error), a); if (e) return e;
+  }
+  if (p->last_error) {
+    e = (*v)(p->last_error, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree___pyx_scope_struct__itervalues(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *)o;
-  Py_CLEAR(p->__pyx_v_self);
+static int __pyx_tp_clear_4lxml_5etree__BaseErrorLog(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__BaseErrorLog *p = (struct __pyx_obj_4lxml_5etree__BaseErrorLog *)o;
+  Py_CLEAR(p->_first_error);
+  Py_CLEAR(p->last_error);
   return 0;
 }
 
-static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct__itervalues = {
+static PyObject *__pyx_getprop_4lxml_5etree_13_BaseErrorLog_last_error(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_13_BaseErrorLog_10last_error_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__BaseErrorLog[] = {
+  {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_4lxml_5etree_13_BaseErrorLog_3copy, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("receive"), (PyCFunction)__pyx_pw_4lxml_5etree_13_BaseErrorLog_7receive, METH_O, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__BaseErrorLog[] = {
+  {(char *)"last_error", __pyx_getprop_4lxml_5etree_13_BaseErrorLog_last_error, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__BaseErrorLog = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.__pyx_scope_struct__itervalues"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._BaseErrorLog"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__BaseErrorLog), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct__itervalues, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__BaseErrorLog, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -173335,7 +173681,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct__itervalues = {
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_13_BaseErrorLog_5__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -173345,25 +173691,25 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct__itervalues = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct__itervalues, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree___pyx_scope_struct__itervalues, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__BaseErrorLog, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__BaseErrorLog, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  0, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__BaseErrorLog, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__BaseErrorLog, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_13_BaseErrorLog_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree___pyx_scope_struct__itervalues, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__BaseErrorLog, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -173379,61 +173725,48 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct__itervalues = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry __pyx_vtable_4lxml_5etree__NamespaceRegistry;
+static struct __pyx_vtabstruct_4lxml_5etree__ListErrorLog __pyx_vtable_4lxml_5etree__ListErrorLog;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__NamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__NamespaceRegistry *p;
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree__ListErrorLog(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ListErrorLog *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__BaseErrorLog(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__NamespaceRegistry *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__NamespaceRegistry;
-  p->_ns_uri = Py_None; Py_INCREF(Py_None);
-  p->_ns_uri_utf = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree__ListErrorLog *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog*)__pyx_vtabptr_4lxml_5etree__ListErrorLog;
   p->_entries = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_18_NamespaceRegistry_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__NamespaceRegistry(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__NamespaceRegistry *p = (struct __pyx_obj_4lxml_5etree__NamespaceRegistry *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__ListErrorLog(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ListErrorLog *p = (struct __pyx_obj_4lxml_5etree__ListErrorLog *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_ns_uri);
-  Py_CLEAR(p->_ns_uri_utf);
   Py_CLEAR(p->_entries);
-  (*Py_TYPE(o)->tp_free)(o);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__BaseErrorLog(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__NamespaceRegistry(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__ListErrorLog(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__NamespaceRegistry *p = (struct __pyx_obj_4lxml_5etree__NamespaceRegistry *)o;
-  if (p->_ns_uri) {
-    e = (*v)(p->_ns_uri, a); if (e) return e;
-  }
+  struct __pyx_obj_4lxml_5etree__ListErrorLog *p = (struct __pyx_obj_4lxml_5etree__ListErrorLog *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__BaseErrorLog(o, v, a); if (e) return e;
   if (p->_entries) {
     e = (*v)(p->_entries, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__NamespaceRegistry(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__NamespaceRegistry *p = (struct __pyx_obj_4lxml_5etree__NamespaceRegistry *)o;
-  Py_CLEAR(p->_ns_uri);
+static int __pyx_tp_clear_4lxml_5etree__ListErrorLog(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ListErrorLog *p = (struct __pyx_obj_4lxml_5etree__ListErrorLog *)o;
+  __pyx_tp_clear_4lxml_5etree__BaseErrorLog(o);
   Py_CLEAR(p->_entries);
   return 0;
 }
-static PyObject *__pyx_sq_item_4lxml_5etree__NamespaceRegistry(PyObject *o, Py_ssize_t i) {
+static PyObject *__pyx_sq_item_4lxml_5etree__ListErrorLog(PyObject *o, Py_ssize_t i) {
   PyObject *r;
   PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
   r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
@@ -173441,146 +173774,101 @@ static PyObject *__pyx_sq_item_4lxml_5etree__NamespaceRegistry(PyObject *o, Py_s
   return r;
 }
 
-static int __pyx_mp_ass_subscript_4lxml_5etree__NamespaceRegistry(PyObject *o, PyObject *i, PyObject *v) {
-  if (v) {
-    PyErr_Format(PyExc_NotImplementedError,
-      "Subscript assignment not supported by %.200s", Py_TYPE(o)->tp_name);
-    return -1;
-  }
-  else {
-    return __pyx_pw_4lxml_5etree_18_NamespaceRegistry_7__delitem__(o, i);
-  }
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__NamespaceRegistry[] = {
-  {__Pyx_NAMESTR("update"), (PyCFunction)__pyx_pw_4lxml_5etree_18_NamespaceRegistry_3update, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_18_NamespaceRegistry_2update)},
-  {__Pyx_NAMESTR("items"), (PyCFunction)__pyx_pw_4lxml_5etree_18_NamespaceRegistry_11items, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("iteritems"), (PyCFunction)__pyx_pw_4lxml_5etree_18_NamespaceRegistry_13iteritems, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("clear"), (PyCFunction)__pyx_pw_4lxml_5etree_18_NamespaceRegistry_15clear, METH_NOARGS, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree__ListErrorLog[] = {
+  {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_3copy, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_2copy)},
+  {__Pyx_NAMESTR("filter_domains"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_17filter_domains, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_16filter_domains)},
+  {__Pyx_NAMESTR("filter_types"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_19filter_types, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_18filter_types)},
+  {__Pyx_NAMESTR("filter_levels"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_21filter_levels, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_20filter_levels)},
+  {__Pyx_NAMESTR("filter_from_level"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_23filter_from_level, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_22filter_from_level)},
+  {__Pyx_NAMESTR("filter_from_fatals"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_25filter_from_fatals, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_24filter_from_fatals)},
+  {__Pyx_NAMESTR("filter_from_errors"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_27filter_from_errors, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_26filter_from_errors)},
+  {__Pyx_NAMESTR("filter_from_warnings"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_29filter_from_warnings, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_28filter_from_warnings)},
   {0, 0, 0, 0}
 };
 
-static PySequenceMethods __pyx_tp_as_sequence__NamespaceRegistry = {
-  0, /*sq_length*/
-  0, /*sq_concat*/
-  0, /*sq_repeat*/
-  __pyx_sq_item_4lxml_5etree__NamespaceRegistry, /*sq_item*/
-  0, /*sq_slice*/
-  0, /*sq_ass_item*/
-  0, /*sq_ass_slice*/
-  0, /*sq_contains*/
-  0, /*sq_inplace_concat*/
-  0, /*sq_inplace_repeat*/
-};
-
-static PyMappingMethods __pyx_tp_as_mapping__NamespaceRegistry = {
-  0, /*mp_length*/
-  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_5__getitem__, /*mp_subscript*/
-  __pyx_mp_ass_subscript_4lxml_5etree__NamespaceRegistry, /*mp_ass_subscript*/
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__NamespaceRegistry = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._NamespaceRegistry"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__NamespaceRegistry), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__NamespaceRegistry, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
+static PyNumberMethods __pyx_tp_as_number__ListErrorLog = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
   #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  __pyx_pw_4lxml_5etree_13_ListErrorLog_15__nonzero__, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_long*/
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  &__pyx_tp_as_sequence__NamespaceRegistry, /*tp_as_sequence*/
-  &__pyx_tp_as_mapping__NamespaceRegistry, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("Dictionary-like namespace registry"), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__NamespaceRegistry, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__NamespaceRegistry, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_9__iter__, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__NamespaceRegistry, /*tp_methods*/
-  0, /*tp_members*/
-  0, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__NamespaceRegistry, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
   #endif
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if PY_VERSION_HEX >= 0x02050000
+  0, /*nb_index*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__FunctionNamespaceRegistry __pyx_vtable_4lxml_5etree__FunctionNamespaceRegistry;
-
-static PyObject *__pyx_tp_new_4lxml_5etree__FunctionNamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__FunctionNamespaceRegistry *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__NamespaceRegistry(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__FunctionNamespaceRegistry *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry*)__pyx_vtabptr_4lxml_5etree__FunctionNamespaceRegistry;
-  return o;
-}
-
-static int __pyx_mp_ass_subscript_4lxml_5etree__FunctionNamespaceRegistry(PyObject *o, PyObject *i, PyObject *v) {
-  if (v) {
-    return __pyx_pw_4lxml_5etree_26_FunctionNamespaceRegistry_1__setitem__(o, i, v);
-  }
-  else {
-    if (__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_as_mapping && __pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_as_mapping->mp_ass_subscript)
-      return __pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_as_mapping->mp_ass_subscript(o, i, v);
-    PyErr_Format(PyExc_NotImplementedError,
-      "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);
-    return -1;
-  }
-}
 
-static PyMethodDef __pyx_methods_4lxml_5etree__FunctionNamespaceRegistry[] = {
-  {0, 0, 0, 0}
+static PySequenceMethods __pyx_tp_as_sequence__ListErrorLog = {
+  __pyx_pw_4lxml_5etree_13_ListErrorLog_11__len__, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  __pyx_sq_item_4lxml_5etree__ListErrorLog, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  __pyx_pw_4lxml_5etree_13_ListErrorLog_13__contains__, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
 };
 
-static PyMappingMethods __pyx_tp_as_mapping__FunctionNamespaceRegistry = {
-  0, /*mp_length*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_5__getitem__, /*mp_subscript*/
-  #else
-  0, /*mp_subscript*/
-  #endif
-  __pyx_mp_ass_subscript_4lxml_5etree__FunctionNamespaceRegistry, /*mp_ass_subscript*/
+static PyMappingMethods __pyx_tp_as_mapping__ListErrorLog = {
+  __pyx_pw_4lxml_5etree_13_ListErrorLog_11__len__, /*mp_length*/
+  __pyx_pw_4lxml_5etree_13_ListErrorLog_9__getitem__, /*mp_subscript*/
+  0, /*mp_ass_subscript*/
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__FunctionNamespaceRegistry = {
+static PyTypeObject __pyx_type_4lxml_5etree__ListErrorLog = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._FunctionNamespaceRegistry"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__FunctionNamespaceRegistry), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ListErrorLog"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ListErrorLog), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__NamespaceRegistry, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ListErrorLog, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -173589,10 +173877,10 @@ static PyTypeObject __pyx_type_4lxml_5etree__FunctionNamespaceRegistry = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_26_FunctionNamespaceRegistry_3__repr__, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  &__pyx_tp_as_mapping__FunctionNamespaceRegistry, /*tp_as_mapping*/
+  __pyx_pw_4lxml_5etree_13_ListErrorLog_7__repr__, /*tp_repr*/
+  &__pyx_tp_as_number__ListErrorLog, /*tp_as_number*/
+  &__pyx_tp_as_sequence__ListErrorLog, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping__ListErrorLog, /*tp_as_mapping*/
   0, /*tp_hash*/
   0, /*tp_call*/
   0, /*tp_str*/
@@ -173600,18 +173888,14 @@ static PyTypeObject __pyx_type_4lxml_5etree__FunctionNamespaceRegistry = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__NamespaceRegistry, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__NamespaceRegistry, /*tp_clear*/
+  __Pyx_DOCSTR("Immutable base version of a list based error log."), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ListErrorLog, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ListErrorLog, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_9__iter__, /*tp_iter*/
-  #else
-  0, /*tp_iter*/
-  #endif
+  __pyx_pw_4lxml_5etree_13_ListErrorLog_5__iter__, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__FunctionNamespaceRegistry, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__ListErrorLog, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -173619,9 +173903,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__FunctionNamespaceRegistry = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_13_ListErrorLog_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__FunctionNamespaceRegistry, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ListErrorLog, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -173637,69 +173921,24 @@ static PyTypeObject __pyx_type_4lxml_5etree__FunctionNamespaceRegistry = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__XPathFunctionNamespaceRegistry __pyx_vtable_4lxml_5etree__XPathFunctionNamespaceRegistry;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__XPathFunctionNamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__FunctionNamespaceRegistry(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__ErrorLogContext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  PyObject *o;
+  o = (*t->tp_alloc)(t, 0);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry*)__pyx_vtabptr_4lxml_5etree__XPathFunctionNamespaceRegistry;
-  p->_prefix = Py_None; Py_INCREF(Py_None);
-  p->_prefix_utf = ((PyObject*)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__XPathFunctionNamespaceRegistry(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *p = (struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_prefix);
-  Py_CLEAR(p->_prefix_utf);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__NamespaceRegistry(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__XPathFunctionNamespaceRegistry(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *p = (struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__NamespaceRegistry(o, v, a); if (e) return e;
-  if (p->_prefix) {
-    e = (*v)(p->_prefix, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__XPathFunctionNamespaceRegistry(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *p = (struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *)o;
-  __pyx_tp_clear_4lxml_5etree__NamespaceRegistry(o);
-  Py_CLEAR(p->_prefix);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_31_XPathFunctionNamespaceRegistry_prefix(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_31_XPathFunctionNamespaceRegistry_6prefix_3__get__(o);
-}
-
-static int __pyx_setprop_4lxml_5etree_31_XPathFunctionNamespaceRegistry_prefix(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_4lxml_5etree_31_XPathFunctionNamespaceRegistry_6prefix_5__set__(o, v);
-  }
-  else {
-    return __pyx_pw_4lxml_5etree_31_XPathFunctionNamespaceRegistry_6prefix_1__del__(o);
-  }
+static void __pyx_tp_dealloc_4lxml_5etree__ErrorLogContext(PyObject *o) {
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__XPathFunctionNamespaceRegistry[] = {
-  {(char *)"prefix", __pyx_getprop_4lxml_5etree_31_XPathFunctionNamespaceRegistry_prefix, __pyx_setprop_4lxml_5etree_31_XPathFunctionNamespaceRegistry_prefix, __Pyx_DOCSTR(__pyx_k_Namespace_prefix_for_extension_f), 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__XPathFunctionNamespaceRegistry = {
+static PyTypeObject __pyx_type_4lxml_5etree__ErrorLogContext = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._XPathFunctionNamespaceRegistry"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ErrorLogContext"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ErrorLogContext), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__XPathFunctionNamespaceRegistry, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ErrorLogContext, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -173708,11 +173947,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__XPathFunctionNamespaceRegistry = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_26_FunctionNamespaceRegistry_3__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -173722,21 +173957,17 @@ static PyTypeObject __pyx_type_4lxml_5etree__XPathFunctionNamespaceRegistry = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__XPathFunctionNamespaceRegistry, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__XPathFunctionNamespaceRegistry, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
+  __Pyx_DOCSTR("\n    Error log context for the 'with' statement.\n    Stores a reference to the current callbacks to allow for\n    recursively stacked log contexts.\n    "), /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_9__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
   0, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__XPathFunctionNamespaceRegistry, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -173744,7 +173975,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__XPathFunctionNamespaceRegistry = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__XPathFunctionNamespaceRegistry, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ErrorLogContext, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -173760,78 +173991,65 @@ static PyTypeObject __pyx_type_4lxml_5etree__XPathFunctionNamespaceRegistry = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__FileReaderContext __pyx_vtable_4lxml_5etree__FileReaderContext;
+static struct __pyx_vtabstruct_4lxml_5etree__ErrorLog __pyx_vtable_4lxml_5etree__ErrorLog;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__FileReaderContext(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__FileReaderContext *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
+static PyObject *__pyx_tp_new_4lxml_5etree__ErrorLog(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ErrorLog *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ListErrorLog(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__FileReaderContext *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__FileReaderContext;
-  p->_filelike = Py_None; Py_INCREF(Py_None);
-  p->_encoding = Py_None; Py_INCREF(Py_None);
-  p->_url = Py_None; Py_INCREF(Py_None);
-  p->_bytes = Py_None; Py_INCREF(Py_None);
-  p->_exc_context = ((struct __pyx_obj_4lxml_5etree__ExceptionContext *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_18_FileReaderContext_1__cinit__(o, a, k) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog*)__pyx_vtabptr_4lxml_5etree__ErrorLog;
+  p->_logContexts = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_9_ErrorLog_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__FileReaderContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__FileReaderContext *p = (struct __pyx_obj_4lxml_5etree__FileReaderContext *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__ErrorLog(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ErrorLog *p = (struct __pyx_obj_4lxml_5etree__ErrorLog *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_filelike);
-  Py_CLEAR(p->_encoding);
-  Py_CLEAR(p->_url);
-  Py_CLEAR(p->_bytes);
-  Py_CLEAR(p->_exc_context);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_CLEAR(p->_logContexts);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__ListErrorLog(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__FileReaderContext(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__ErrorLog(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__FileReaderContext *p = (struct __pyx_obj_4lxml_5etree__FileReaderContext *)o;
-  if (p->_filelike) {
-    e = (*v)(p->_filelike, a); if (e) return e;
-  }
-  if (p->_encoding) {
-    e = (*v)(p->_encoding, a); if (e) return e;
-  }
-  if (p->_url) {
-    e = (*v)(p->_url, a); if (e) return e;
-  }
-  if (p->_bytes) {
-    e = (*v)(p->_bytes, a); if (e) return e;
-  }
-  if (p->_exc_context) {
-    e = (*v)(((PyObject*)p->_exc_context), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__ErrorLog *p = (struct __pyx_obj_4lxml_5etree__ErrorLog *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__ListErrorLog(o, v, a); if (e) return e;
+  if (p->_logContexts) {
+    e = (*v)(p->_logContexts, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__FileReaderContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__FileReaderContext *p = (struct __pyx_obj_4lxml_5etree__FileReaderContext *)o;
-  Py_CLEAR(p->_filelike);
-  Py_CLEAR(p->_encoding);
-  Py_CLEAR(p->_url);
-  Py_CLEAR(p->_bytes);
-  Py_CLEAR(p->_exc_context);
+static int __pyx_tp_clear_4lxml_5etree__ErrorLog(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ErrorLog *p = (struct __pyx_obj_4lxml_5etree__ErrorLog *)o;
+  __pyx_tp_clear_4lxml_5etree__ListErrorLog(o);
+  Py_CLEAR(p->_logContexts);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__FileReaderContext[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree__ErrorLog[] = {
+  {__Pyx_NAMESTR("__exit__"), (PyCFunction)__pyx_pw_4lxml_5etree_9_ErrorLog_5__exit__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("clear"), (PyCFunction)__pyx_pw_4lxml_5etree_9_ErrorLog_7clear, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_4lxml_5etree_9_ErrorLog_9copy, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_9_ErrorLog_8copy)},
+  {__Pyx_NAMESTR("receive"), (PyCFunction)__pyx_pw_4lxml_5etree_9_ErrorLog_13receive, METH_O, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__FileReaderContext = {
+static PyTypeObject __pyx_type_4lxml_5etree__ErrorLog = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._FileReaderContext"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__FileReaderContext), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ErrorLog"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ErrorLog), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__FileReaderContext, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ErrorLog, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -173840,7 +174058,11 @@ static PyTypeObject __pyx_type_4lxml_5etree__FileReaderContext = {
   #else
   0, /*reserved*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_13_ListErrorLog_7__repr__, /*tp_repr*/
+  #else
   0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -173850,15 +174072,15 @@ static PyTypeObject __pyx_type_4lxml_5etree__FileReaderContext = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__FileReaderContext, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__FileReaderContext, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__ErrorLog, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ErrorLog, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
+  __pyx_pw_4lxml_5etree_9_ErrorLog_11__iter__, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__FileReaderContext, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__ErrorLog, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -173866,9 +174088,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__FileReaderContext = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_9_ErrorLog_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__FileReaderContext, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ErrorLog, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -173884,77 +174106,28 @@ static PyTypeObject __pyx_type_4lxml_5etree__FileReaderContext = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog __pyx_vtable_4lxml_5etree__BaseErrorLog;
+static struct __pyx_vtabstruct_4lxml_5etree__DomainErrorLog __pyx_vtable_4lxml_5etree__DomainErrorLog;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__BaseErrorLog(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__BaseErrorLog *p;
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree__DomainErrorLog(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__DomainErrorLog *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ErrorLog(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__BaseErrorLog;
-  p->_first_error = ((struct __pyx_obj_4lxml_5etree__LogEntry *)Py_None); Py_INCREF(Py_None);
-  p->last_error = Py_None; Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree__DomainErrorLog *)o);
+  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog*)__pyx_vtabptr_4lxml_5etree__DomainErrorLog;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__BaseErrorLog(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__BaseErrorLog *p = (struct __pyx_obj_4lxml_5etree__BaseErrorLog *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_first_error);
-  Py_CLEAR(p->last_error);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__BaseErrorLog(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__BaseErrorLog *p = (struct __pyx_obj_4lxml_5etree__BaseErrorLog *)o;
-  if (p->_first_error) {
-    e = (*v)(((PyObject*)p->_first_error), a); if (e) return e;
-  }
-  if (p->last_error) {
-    e = (*v)(p->last_error, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__BaseErrorLog(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__BaseErrorLog *p = (struct __pyx_obj_4lxml_5etree__BaseErrorLog *)o;
-  Py_CLEAR(p->_first_error);
-  Py_CLEAR(p->last_error);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_13_BaseErrorLog_last_error(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_13_BaseErrorLog_10last_error_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__BaseErrorLog[] = {
-  {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_4lxml_5etree_13_BaseErrorLog_3copy, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("receive"), (PyCFunction)__pyx_pw_4lxml_5etree_13_BaseErrorLog_7receive, METH_O, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree__DomainErrorLog[] = {
+  {__Pyx_NAMESTR("receive"), (PyCFunction)__pyx_pw_4lxml_5etree_15_DomainErrorLog_3receive, METH_O, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__BaseErrorLog[] = {
-  {(char *)"last_error", __pyx_getprop_4lxml_5etree_13_BaseErrorLog_last_error, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__BaseErrorLog = {
+static PyTypeObject __pyx_type_4lxml_5etree__DomainErrorLog = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._BaseErrorLog"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__BaseErrorLog), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._DomainErrorLog"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__DomainErrorLog), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__BaseErrorLog, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ErrorLog, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -173963,7 +174136,11 @@ static PyTypeObject __pyx_type_4lxml_5etree__BaseErrorLog = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_13_BaseErrorLog_5__repr__, /*tp_repr*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_13_ListErrorLog_7__repr__, /*tp_repr*/
+  #else
+  0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -173975,23 +174152,27 @@ static PyTypeObject __pyx_type_4lxml_5etree__BaseErrorLog = {
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__BaseErrorLog, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__BaseErrorLog, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__ErrorLog, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ErrorLog, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_9_ErrorLog_11__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__BaseErrorLog, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__DomainErrorLog, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__BaseErrorLog, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_13_BaseErrorLog_1__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_15_DomainErrorLog_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__BaseErrorLog, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__DomainErrorLog, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -174007,56 +174188,28 @@ static PyTypeObject __pyx_type_4lxml_5etree__BaseErrorLog = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher __pyx_vtable_4lxml_5etree__ElementTagMatcher;
+static struct __pyx_vtabstruct_4lxml_5etree__RotatingErrorLog __pyx_vtable_4lxml_5etree__RotatingErrorLog;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ElementTagMatcher(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct LxmlElementTagMatcher *p;
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree__RotatingErrorLog(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__RotatingErrorLog *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ErrorLog(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct LxmlElementTagMatcher *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ElementTagMatcher;
-  p->_pystrings = Py_None; Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree__RotatingErrorLog *)o);
+  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog*)__pyx_vtabptr_4lxml_5etree__RotatingErrorLog;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ElementTagMatcher(PyObject *o) {
-  struct LxmlElementTagMatcher *p = (struct LxmlElementTagMatcher *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_pystrings);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__ElementTagMatcher(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct LxmlElementTagMatcher *p = (struct LxmlElementTagMatcher *)o;
-  if (p->_pystrings) {
-    e = (*v)(p->_pystrings, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__ElementTagMatcher(PyObject *o) {
-  struct LxmlElementTagMatcher *p = (struct LxmlElementTagMatcher *)o;
-  Py_CLEAR(p->_pystrings);
-  return 0;
-}
+static PyMethodDef __pyx_methods_4lxml_5etree__RotatingErrorLog[] = {
+  {__Pyx_NAMESTR("receive"), (PyCFunction)__pyx_pw_4lxml_5etree_17_RotatingErrorLog_3receive, METH_O, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
 
-DL_EXPORT(PyTypeObject) LxmlElementTagMatcherType = {
+static PyTypeObject __pyx_type_4lxml_5etree__RotatingErrorLog = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ElementTagMatcher"), /*tp_name*/
-  sizeof(struct LxmlElementTagMatcher), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._RotatingErrorLog"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__RotatingErrorLog), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ElementTagMatcher, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ErrorLog, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -174065,7 +174218,11 @@ DL_EXPORT(PyTypeObject) LxmlElementTagMatcherType = {
   #else
   0, /*reserved*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_13_ListErrorLog_7__repr__, /*tp_repr*/
+  #else
   0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -174076,14 +174233,18 @@ DL_EXPORT(PyTypeObject) LxmlElementTagMatcherType = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("\n    Dead but public. :)\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ElementTagMatcher, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ElementTagMatcher, /*tp_clear*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ErrorLog, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ErrorLog, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_9_ErrorLog_11__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  0, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__RotatingErrorLog, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -174091,9 +174252,9 @@ DL_EXPORT(PyTypeObject) LxmlElementTagMatcherType = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_17_RotatingErrorLog_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ElementTagMatcher, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__RotatingErrorLog, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -174109,95 +174270,82 @@ DL_EXPORT(PyTypeObject) LxmlElementTagMatcherType = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_XSLT __pyx_vtable_4lxml_5etree_XSLT;
+static struct __pyx_vtabstruct_4lxml_5etree_PyErrorLog __pyx_vtable_4lxml_5etree_PyErrorLog;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_XSLT(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_XSLT *p;
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree_PyErrorLog(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_PyErrorLog *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__BaseErrorLog(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_XSLT *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_XSLT;
-  p->_context = ((struct __pyx_obj_4lxml_5etree__XSLTContext *)Py_None); Py_INCREF(Py_None);
-  p->_xslt_resolver_context = ((struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)Py_None); Py_INCREF(Py_None);
-  p->_access_control = ((struct __pyx_obj_4lxml_5etree_XSLTAccessControl *)Py_None); Py_INCREF(Py_None);
-  p->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_4XSLT_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  p = ((struct __pyx_obj_4lxml_5etree_PyErrorLog *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog*)__pyx_vtabptr_4lxml_5etree_PyErrorLog;
+  p->level_map = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_map_level = Py_None; Py_INCREF(Py_None);
+  p->_log = Py_None; Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_XSLT(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_XSLT *p = (struct __pyx_obj_4lxml_5etree_XSLT *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_PyErrorLog(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_PyErrorLog *p = (struct __pyx_obj_4lxml_5etree_PyErrorLog *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_4XSLT_5__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
-  }
-  Py_CLEAR(p->_context);
-  Py_CLEAR(p->_xslt_resolver_context);
-  Py_CLEAR(p->_access_control);
-  Py_CLEAR(p->_error_log);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_CLEAR(p->level_map);
+  Py_CLEAR(p->_map_level);
+  Py_CLEAR(p->_log);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__BaseErrorLog(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree_XSLT(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree_PyErrorLog(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree_XSLT *p = (struct __pyx_obj_4lxml_5etree_XSLT *)o;
-  if (p->_context) {
-    e = (*v)(((PyObject*)p->_context), a); if (e) return e;
-  }
-  if (p->_xslt_resolver_context) {
-    e = (*v)(((PyObject*)p->_xslt_resolver_context), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree_PyErrorLog *p = (struct __pyx_obj_4lxml_5etree_PyErrorLog *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__BaseErrorLog(o, v, a); if (e) return e;
+  if (p->level_map) {
+    e = (*v)(p->level_map, a); if (e) return e;
   }
-  if (p->_access_control) {
-    e = (*v)(((PyObject*)p->_access_control), a); if (e) return e;
+  if (p->_map_level) {
+    e = (*v)(p->_map_level, a); if (e) return e;
   }
-  if (p->_error_log) {
-    e = (*v)(((PyObject*)p->_error_log), a); if (e) return e;
+  if (p->_log) {
+    e = (*v)(p->_log, a); if (e) return e;
   }
   return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_4XSLT_error_log(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_4XSLT_9error_log_1__get__(o);
+static int __pyx_tp_clear_4lxml_5etree_PyErrorLog(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_PyErrorLog *p = (struct __pyx_obj_4lxml_5etree_PyErrorLog *)o;
+  __pyx_tp_clear_4lxml_5etree__BaseErrorLog(o);
+  Py_CLEAR(p->level_map);
+  Py_CLEAR(p->_map_level);
+  Py_CLEAR(p->_log);
+  return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_XSLT[] = {
-  {__Pyx_NAMESTR("strparam"), (PyCFunction)__pyx_pw_4lxml_5etree_4XSLT_7strparam, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_4XSLT_6strparam)},
-  {__Pyx_NAMESTR("set_global_max_depth"), (PyCFunction)__pyx_pw_4lxml_5etree_4XSLT_9set_global_max_depth, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_4XSLT_8set_global_max_depth)},
-  {__Pyx_NAMESTR("apply"), (PyCFunction)__pyx_pw_4lxml_5etree_4XSLT_11apply, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_4XSLT_10apply)},
-  {__Pyx_NAMESTR("tostring"), (PyCFunction)__pyx_pw_4lxml_5etree_4XSLT_13tostring, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_4XSLT_12tostring)},
-  {__Pyx_NAMESTR("__deepcopy__"), (PyCFunction)__pyx_pw_4lxml_5etree_4XSLT_15__deepcopy__, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("__copy__"), (PyCFunction)__pyx_pw_4lxml_5etree_4XSLT_17__copy__, METH_NOARGS, __Pyx_DOCSTR(0)},
+static PyObject *__pyx_getprop_4lxml_5etree_10PyErrorLog_level_map(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_10PyErrorLog_9level_map_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_PyErrorLog[] = {
+  {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_4lxml_5etree_10PyErrorLog_3copy, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_10PyErrorLog_2copy)},
+  {__Pyx_NAMESTR("log"), (PyCFunction)__pyx_pw_4lxml_5etree_10PyErrorLog_5log, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_10PyErrorLog_4log)},
+  {__Pyx_NAMESTR("receive"), (PyCFunction)__pyx_pw_4lxml_5etree_10PyErrorLog_7receive, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_10PyErrorLog_6receive)},
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree_XSLT[] = {
-  {(char *)"error_log", __pyx_getprop_4lxml_5etree_4XSLT_error_log, 0, __Pyx_DOCSTR(__pyx_k_The_log_of_errors_and_warnings_o), 0},
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree_PyErrorLog[] = {
+  {(char *)"level_map", __pyx_getprop_4lxml_5etree_10PyErrorLog_level_map, 0, 0, 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_XSLT = {
+static PyTypeObject __pyx_type_4lxml_5etree_PyErrorLog = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.XSLT"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_XSLT), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.PyErrorLog"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_PyErrorLog), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_XSLT, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_PyErrorLog, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -174206,35 +174354,39 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLT = {
   #else
   0, /*reserved*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_13_BaseErrorLog_5__repr__, /*tp_repr*/
+  #else
   0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  __pyx_pw_4lxml_5etree_4XSLT_19__call__, /*tp_call*/
+  0, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("XSLT(self, xslt_input, extensions=None, regexp=True, access_control=None)\n\n    Turn an XSL document into an XSLT object.\n\n    Calling this object on a tree or Element will execute the XSLT::\n\n        transform = etree.XSLT(xsl_tree)\n        result = transform(xml_tree)\n\n    Keyword arguments of the constructor:\n\n    - extensions: a dict mapping ``(namespace, name)`` pairs to\n      extension functions or extension elements\n    - regexp: enable exslt regular expression support in XPath\n      (default: True)\n    - access_control: access restrictions for network or file\n      system (see `XSLTAccessControl`)\n\n    Keyword arguments of the XSLT call:\n\n    - profile_run: enable XSLT profiling (default: False)\n\n    Other keyword arguments of the call are passed to the stylesheet\n    as parameters.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_XSLT, /*tp_traverse*/
-  0, /*tp_clear*/
+  __Pyx_DOCSTR("PyErrorLog(self, logger_name=None, logger=None)\n    A global error log that connects to the Python stdlib logging package.\n\n    The constructor accepts an optional logger name or a readily\n    instantiated logger instance.\n\n    If you want to change the mapping between libxml2's ErrorLevels and Python\n    logging levels, you can modify the level_map dictionary from a subclass.\n\n    The default mapping is::\n\n            ErrorLevels.WARNING = logging.WARNING\n            ErrorLevels.ERROR   = logging.ERROR\n            ErrorLevels.FATAL   = logging.CRITICAL\n\n    You can also override the method ``receive()`` that takes a LogEntry\n    object and calls ``self.log(log_entry, format_string, arg1, arg2, ...)``\n    with appropriate data.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_PyErrorLog, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_PyErrorLog, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_XSLT, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_PyErrorLog, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree_XSLT, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree_PyErrorLog, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_4XSLT_3__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_10PyErrorLog_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_XSLT, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_PyErrorLog, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -174250,76 +174402,139 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLT = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_ElementDepthFirstIterator __pyx_vtable_4lxml_5etree_ElementDepthFirstIterator;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementDepthFirstIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *p;
+static struct __pyx_obj_4lxml_5etree_DocInfo *__pyx_freelist_4lxml_5etree_DocInfo[4];
+static int __pyx_freecount_4lxml_5etree_DocInfo = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree_DocInfo(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_DocInfo *p;
   PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
+  if (likely((__pyx_freecount_4lxml_5etree_DocInfo > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree_DocInfo)) & ((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree_DocInfo[--__pyx_freecount_4lxml_5etree_DocInfo];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree_DocInfo));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
   } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+    if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+      o = (*t->tp_alloc)(t, 0);
+    } else {
+      o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+    }
+    if (unlikely(!o)) return 0;
   }
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_ElementDepthFirstIterator;
-  p->_next_node = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
-  p->_top_node = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
-  p->_matcher = ((struct __pyx_obj_4lxml_5etree__MultiTagMatcher *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_25ElementDepthFirstIterator_1__cinit__(o, a, k) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree_DocInfo *)o);
+  p->_doc = ((struct LxmlDocument *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_7DocInfo_1__cinit__(o, a, k) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_ElementDepthFirstIterator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *p = (struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_DocInfo(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_DocInfo *p = (struct __pyx_obj_4lxml_5etree_DocInfo *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_next_node);
-  Py_CLEAR(p->_top_node);
-  Py_CLEAR(p->_matcher);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_CLEAR(p->_doc);
+  if ((__pyx_freecount_4lxml_5etree_DocInfo < 4) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree_DocInfo))) {
+    __pyx_freelist_4lxml_5etree_DocInfo[__pyx_freecount_4lxml_5etree_DocInfo++] = ((struct __pyx_obj_4lxml_5etree_DocInfo *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
+  }
 }
 
-static int __pyx_tp_traverse_4lxml_5etree_ElementDepthFirstIterator(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree_DocInfo(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *p = (struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *)o;
-  if (p->_next_node) {
-    e = (*v)(((PyObject*)p->_next_node), a); if (e) return e;
-  }
-  if (p->_top_node) {
-    e = (*v)(((PyObject*)p->_top_node), a); if (e) return e;
-  }
-  if (p->_matcher) {
-    e = (*v)(((PyObject*)p->_matcher), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree_DocInfo *p = (struct __pyx_obj_4lxml_5etree_DocInfo *)o;
+  if (p->_doc) {
+    e = (*v)(((PyObject*)p->_doc), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree_ElementDepthFirstIterator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *p = (struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *)o;
-  Py_CLEAR(p->_next_node);
-  Py_CLEAR(p->_top_node);
-  Py_CLEAR(p->_matcher);
+static int __pyx_tp_clear_4lxml_5etree_DocInfo(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_DocInfo *p = (struct __pyx_obj_4lxml_5etree_DocInfo *)o;
+  Py_CLEAR(p->_doc);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_ElementDepthFirstIterator[] = {
-  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_25ElementDepthFirstIterator_5__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
+static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_root_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_7DocInfo_9root_name_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_public_id(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_7DocInfo_9public_id_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_system_url(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_7DocInfo_10system_url_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_xml_version(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_7DocInfo_11xml_version_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_encoding(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_7DocInfo_8encoding_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_standalone(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_7DocInfo_10standalone_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_URL(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_7DocInfo_3URL_1__get__(o);
+}
+
+static int __pyx_setprop_4lxml_5etree_7DocInfo_URL(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_7DocInfo_3URL_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_doctype(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_7DocInfo_7doctype_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_internalDTD(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_7DocInfo_11internalDTD_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_externalDTD(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_7DocInfo_11externalDTD_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_DocInfo[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_ElementDepthFirstIterator = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree_DocInfo[] = {
+  {(char *)"root_name", __pyx_getprop_4lxml_5etree_7DocInfo_root_name, 0, __Pyx_DOCSTR(__pyx_k_Returns_the_name_of_the_root_nod), 0},
+  {(char *)"public_id", __pyx_getprop_4lxml_5etree_7DocInfo_public_id, 0, __Pyx_DOCSTR(__pyx_k_Returns_the_public_ID_of_the_DOC), 0},
+  {(char *)"system_url", __pyx_getprop_4lxml_5etree_7DocInfo_system_url, 0, __Pyx_DOCSTR(__pyx_k_Returns_the_system_ID_of_the_DOC), 0},
+  {(char *)"xml_version", __pyx_getprop_4lxml_5etree_7DocInfo_xml_version, 0, __Pyx_DOCSTR(__pyx_k_Returns_the_XML_version_as_decla), 0},
+  {(char *)"encoding", __pyx_getprop_4lxml_5etree_7DocInfo_encoding, 0, __Pyx_DOCSTR(__pyx_k_Returns_the_encoding_name_as_dec), 0},
+  {(char *)"standalone", __pyx_getprop_4lxml_5etree_7DocInfo_standalone, 0, __Pyx_DOCSTR(__pyx_k_Returns_the_standalone_flag_as_d), 0},
+  {(char *)"URL", __pyx_getprop_4lxml_5etree_7DocInfo_URL, __pyx_setprop_4lxml_5etree_7DocInfo_URL, __Pyx_DOCSTR(__pyx_k_The_source_URL_of_the_document_o), 0},
+  {(char *)"doctype", __pyx_getprop_4lxml_5etree_7DocInfo_doctype, 0, __Pyx_DOCSTR(__pyx_k_Returns_a_DOCTYPE_declaration_st), 0},
+  {(char *)"internalDTD", __pyx_getprop_4lxml_5etree_7DocInfo_internalDTD, 0, __Pyx_DOCSTR(__pyx_k_Returns_a_DTD_validator_based_on), 0},
+  {(char *)"externalDTD", __pyx_getprop_4lxml_5etree_7DocInfo_externalDTD, 0, __Pyx_DOCSTR(__pyx_k_Returns_a_DTD_validator_based_on_2), 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree_DocInfo = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.ElementDepthFirstIterator"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.DocInfo"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_DocInfo), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_ElementDepthFirstIterator, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_DocInfo, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -174339,16 +174554,16 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementDepthFirstIterator = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("ElementDepthFirstIterator(self, node, tag=None, inclusive=True)\n    Iterates over an element and its sub-elements in document order (depth\n    first pre-order).\n\n    Note that this also includes comments, entities and processing\n    instructions.  To filter them out, check if the ``tag`` property\n    of the returned element is a string (i.e. not None and not a\n    factory function), or pass the ``Element`` factory for the ``tag``\n    argument to receive only Elements.\n\n    If the optional ``tag`` argument is not None, the iterator returns only\n    the elements that match the respective name and namespace.\n\n    The optional boolean argument 'inclusive' defaults to True and can be set\n    to False to exclude the start element itself.\n\n    Note that the behaviour of this iterator is completely undefined if the\n    tree it traverses is modified during iteration.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_ElementDepthFirstIterator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_ElementDepthFirstIterator, /*tp_clear*/
+  __Pyx_DOCSTR("Document information provided by parser and DTD."), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_DocInfo, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_DocInfo, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_4lxml_5etree_25ElementDepthFirstIterator_3__iter__, /*tp_iter*/
-  __pyx_pw_4lxml_5etree_25ElementDepthFirstIterator_5__next__, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_ElementDepthFirstIterator, /*tp_methods*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree_DocInfo, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree_DocInfo, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -174356,7 +174571,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementDepthFirstIterator = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_ElementDepthFirstIterator, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_DocInfo, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -174372,40 +174587,101 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementDepthFirstIterator = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement __pyx_vtable_4lxml_5etree___ContentOnlyElement;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementClassLookup(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree___ContentOnlyElement(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree___ContentOnlyElement *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__Element(t, a, k);
   if (unlikely(!o)) return 0;
-  if (unlikely(__pyx_pw_4lxml_5etree_18ElementClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  p = ((struct __pyx_obj_4lxml_5etree___ContentOnlyElement *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree___ContentOnlyElement;
   return o;
 }
+static PyObject *__pyx_sq_item_4lxml_5etree___ContentOnlyElement(PyObject *o, Py_ssize_t i) {
+  PyObject *r;
+  PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
+  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
+  Py_DECREF(x);
+  return r;
+}
 
-static void __pyx_tp_dealloc_4lxml_5etree_ElementClassLookup(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
+static int __pyx_mp_ass_subscript_4lxml_5etree___ContentOnlyElement(PyObject *o, PyObject *i, PyObject *v) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_20__ContentOnlyElement_7__setitem__(o, i, v);
+  }
+  else {
+    if (__pyx_ptype_4lxml_5etree__Element->tp_as_mapping && __pyx_ptype_4lxml_5etree__Element->tp_as_mapping->mp_ass_subscript)
+      return __pyx_ptype_4lxml_5etree__Element->tp_as_mapping->mp_ass_subscript(o, i, v);
+    PyErr_Format(PyExc_NotImplementedError,
+      "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);
+    return -1;
   }
-  #endif
-  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_ElementClassLookup[] = {
+static PyObject *__pyx_getprop_4lxml_5etree_20__ContentOnlyElement_attrib(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_20__ContentOnlyElement_6attrib_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_20__ContentOnlyElement_text(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_20__ContentOnlyElement_4text_1__get__(o);
+}
+
+static int __pyx_setprop_4lxml_5etree_20__ContentOnlyElement_text(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_20__ContentOnlyElement_4text_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree___ContentOnlyElement[] = {
+  {__Pyx_NAMESTR("set"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_1set, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_set)},
+  {__Pyx_NAMESTR("append"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_3append, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_2append)},
+  {__Pyx_NAMESTR("insert"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_5insert, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_4insert)},
+  {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_13get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_12get)},
+  {__Pyx_NAMESTR("keys"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_15keys, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_14keys)},
+  {__Pyx_NAMESTR("items"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_17items, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_16items)},
+  {__Pyx_NAMESTR("values"), (PyCFunction)__pyx_pw_4lxml_5etree_20__ContentOnlyElement_19values, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_20__ContentOnlyElement_18values)},
   {0, 0, 0, 0}
 };
 
-DL_EXPORT(PyTypeObject) LxmlElementClassLookupType = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree___ContentOnlyElement[] = {
+  {(char *)"attrib", __pyx_getprop_4lxml_5etree_20__ContentOnlyElement_attrib, 0, 0, 0},
+  {(char *)"text", __pyx_getprop_4lxml_5etree_20__ContentOnlyElement_text, __pyx_setprop_4lxml_5etree_20__ContentOnlyElement_text, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PySequenceMethods __pyx_tp_as_sequence___ContentOnlyElement = {
+  __pyx_pw_4lxml_5etree_20__ContentOnlyElement_11__len__, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  __pyx_sq_item_4lxml_5etree___ContentOnlyElement, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_8_Element_39__contains__, /*sq_contains*/
+  #else
+  0, /*sq_contains*/
+  #endif
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping___ContentOnlyElement = {
+  __pyx_pw_4lxml_5etree_20__ContentOnlyElement_11__len__, /*mp_length*/
+  __pyx_pw_4lxml_5etree_20__ContentOnlyElement_9__getitem__, /*mp_subscript*/
+  __pyx_mp_ass_subscript_4lxml_5etree___ContentOnlyElement, /*mp_ass_subscript*/
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree___ContentOnlyElement = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.ElementClassLookup"), /*tp_name*/
-  sizeof(struct LxmlElementClassLookup), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.__ContentOnlyElement"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree___ContentOnlyElement), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_ElementClassLookup, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -174414,27 +174690,35 @@ DL_EXPORT(PyTypeObject) LxmlElementClassLookupType = {
   #else
   0, /*reserved*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_8_Element_31__repr__, /*tp_repr*/
+  #else
   0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
+  &__pyx_tp_as_sequence___ContentOnlyElement, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping___ContentOnlyElement, /*tp_as_mapping*/
   0, /*tp_hash*/
   0, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
-  __Pyx_DOCSTR("ElementClassLookup(self)\n    Superclass of Element class lookups.\n    "), /*tp_doc*/
-  0, /*tp_traverse*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
   0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_ElementClassLookup, /*tp_methods*/
+  __pyx_methods_4lxml_5etree___ContentOnlyElement, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree___ContentOnlyElement, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -174442,7 +174726,7 @@ DL_EXPORT(PyTypeObject) LxmlElementClassLookupType = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_ElementClassLookup, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree___ContentOnlyElement, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -174458,64 +174742,36 @@ DL_EXPORT(PyTypeObject) LxmlElementClassLookupType = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ResolverRegistry __pyx_vtable_4lxml_5etree__ResolverRegistry;
+static struct __pyx_vtabstruct_4lxml_5etree__Comment __pyx_vtable_4lxml_5etree__Comment;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ResolverRegistry(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ResolverRegistry *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
+static PyObject *__pyx_tp_new_4lxml_5etree__Comment(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__Comment *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree___ContentOnlyElement(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ResolverRegistry;
-  p->_resolvers = Py_None; Py_INCREF(Py_None);
-  p->_default_resolver = ((struct __pyx_obj_4lxml_5etree_Resolver *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_17_ResolverRegistry_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  p = ((struct __pyx_obj_4lxml_5etree__Comment *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree__Comment;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ResolverRegistry(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ResolverRegistry *p = (struct __pyx_obj_4lxml_5etree__ResolverRegistry *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_resolvers);
-  Py_CLEAR(p->_default_resolver);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__ResolverRegistry(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__ResolverRegistry *p = (struct __pyx_obj_4lxml_5etree__ResolverRegistry *)o;
-  if (p->_resolvers) {
-    e = (*v)(p->_resolvers, a); if (e) return e;
-  }
-  if (p->_default_resolver) {
-    e = (*v)(((PyObject*)p->_default_resolver), a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__ResolverRegistry(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ResolverRegistry *p = (struct __pyx_obj_4lxml_5etree__ResolverRegistry *)o;
-  Py_CLEAR(p->_resolvers);
-  Py_CLEAR(p->_default_resolver);
-  return 0;
+static PyObject *__pyx_getprop_4lxml_5etree_8_Comment_tag(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_8_Comment_3tag_1__get__(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__ResolverRegistry[] = {
-  {__Pyx_NAMESTR("add"), (PyCFunction)__pyx_pw_4lxml_5etree_17_ResolverRegistry_3add, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_17_ResolverRegistry_2add)},
-  {__Pyx_NAMESTR("remove"), (PyCFunction)__pyx_pw_4lxml_5etree_17_ResolverRegistry_5remove, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_17_ResolverRegistry_4remove)},
-  {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_4lxml_5etree_17_ResolverRegistry_7copy, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_17_ResolverRegistry_6copy)},
-  {__Pyx_NAMESTR("resolve"), (PyCFunction)__pyx_pw_4lxml_5etree_17_ResolverRegistry_9resolve, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_17_ResolverRegistry_8resolve)},
+static PyMethodDef __pyx_methods_4lxml_5etree__Comment[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ResolverRegistry = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__Comment[] = {
+  {(char *)"tag", __pyx_getprop_4lxml_5etree_8_Comment_tag, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__Comment = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ResolverRegistry"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ResolverRegistry), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._Comment"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__Comment), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ResolverRegistry, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -174524,7 +174780,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ResolverRegistry = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_17_ResolverRegistry_11__repr__, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_8_Comment_1__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -174534,17 +174790,21 @@ static PyTypeObject __pyx_type_4lxml_5etree__ResolverRegistry = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ResolverRegistry, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ResolverRegistry, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
+  0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ResolverRegistry, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__Comment, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__Comment, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -174552,7 +174812,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ResolverRegistry = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ResolverRegistry, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__Comment, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -174568,44 +174828,57 @@ static PyTypeObject __pyx_type_4lxml_5etree__ResolverRegistry = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__SaxParserTarget __pyx_vtable_4lxml_5etree__SaxParserTarget;
+static struct __pyx_vtabstruct_4lxml_5etree__ProcessingInstruction __pyx_vtable_4lxml_5etree__ProcessingInstruction;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__SaxParserTarget(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__SaxParserTarget *p;
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree__ProcessingInstruction(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ProcessingInstruction *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree___ContentOnlyElement(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__SaxParserTarget *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__SaxParserTarget;
-  if (unlikely(__pyx_pw_4lxml_5etree_16_SaxParserTarget_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  p = ((struct __pyx_obj_4lxml_5etree__ProcessingInstruction *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree__ProcessingInstruction;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__SaxParserTarget(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
+static PyObject *__pyx_getprop_4lxml_5etree_22_ProcessingInstruction_tag(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_22_ProcessingInstruction_3tag_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_22_ProcessingInstruction_target(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_22_ProcessingInstruction_6target_1__get__(o);
+}
+
+static int __pyx_setprop_4lxml_5etree_22_ProcessingInstruction_target(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_22_ProcessingInstruction_6target_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
   }
-  #endif
-  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__SaxParserTarget[] = {
+static PyObject *__pyx_getprop_4lxml_5etree_22_ProcessingInstruction_attrib(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_22_ProcessingInstruction_6attrib_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__ProcessingInstruction[] = {
+  {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_4lxml_5etree_22_ProcessingInstruction_3get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_ProcessingInstruction_2get)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__SaxParserTarget = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ProcessingInstruction[] = {
+  {(char *)"tag", __pyx_getprop_4lxml_5etree_22_ProcessingInstruction_tag, 0, 0, 0},
+  {(char *)"target", __pyx_getprop_4lxml_5etree_22_ProcessingInstruction_target, __pyx_setprop_4lxml_5etree_22_ProcessingInstruction_target, 0, 0},
+  {(char *)"attrib", __pyx_getprop_4lxml_5etree_22_ProcessingInstruction_attrib, 0, __Pyx_DOCSTR(__pyx_k_Returns_a_dict_containing_all_ps), 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__ProcessingInstruction = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._SaxParserTarget"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__SaxParserTarget), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ProcessingInstruction"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ProcessingInstruction), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__SaxParserTarget, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -174614,7 +174887,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__SaxParserTarget = {
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_22_ProcessingInstruction_1__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -174624,17 +174897,21 @@ static PyTypeObject __pyx_type_4lxml_5etree__SaxParserTarget = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  0, /*tp_traverse*/
+  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
   0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__SaxParserTarget, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__ProcessingInstruction, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__ProcessingInstruction, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -174642,7 +174919,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__SaxParserTarget = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__SaxParserTarget, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ProcessingInstruction, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -174658,97 +174935,56 @@ static PyTypeObject __pyx_type_4lxml_5etree__SaxParserTarget = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_TreeBuilder __pyx_vtable_4lxml_5etree_TreeBuilder;
-
-static PyObject *__pyx_tp_new_4lxml_5etree_TreeBuilder(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_TreeBuilder *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__SaxParserTarget(t, a, k);
+static struct __pyx_vtabstruct_4lxml_5etree__Entity __pyx_vtable_4lxml_5etree__Entity;
+
+static PyObject *__pyx_tp_new_4lxml_5etree__Entity(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__Entity *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree___ContentOnlyElement(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_TreeBuilder *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__SaxParserTarget*)__pyx_vtabptr_4lxml_5etree_TreeBuilder;
-  p->_parser = ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None); Py_INCREF(Py_None);
-  p->_factory = Py_None; Py_INCREF(Py_None);
-  p->_data = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_element_stack = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_element_stack_pop = Py_None; Py_INCREF(Py_None);
-  p->_last = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree__Entity *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree__Entity;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_TreeBuilder(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_TreeBuilder *p = (struct __pyx_obj_4lxml_5etree_TreeBuilder *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_parser);
-  Py_CLEAR(p->_factory);
-  Py_CLEAR(p->_data);
-  Py_CLEAR(p->_element_stack);
-  Py_CLEAR(p->_element_stack_pop);
-  Py_CLEAR(p->_last);
-  #if CYTHON_COMPILING_IN_CPYTHON
-  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
-  #endif
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__SaxParserTarget(o);
+static PyObject *__pyx_getprop_4lxml_5etree_7_Entity_tag(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_7_Entity_3tag_1__get__(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree_TreeBuilder(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree_TreeBuilder *p = (struct __pyx_obj_4lxml_5etree_TreeBuilder *)o;
-  e = ((likely(__pyx_ptype_4lxml_5etree__SaxParserTarget)) ? ((__pyx_ptype_4lxml_5etree__SaxParserTarget->tp_traverse) ? __pyx_ptype_4lxml_5etree__SaxParserTarget->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_4lxml_5etree_TreeBuilder)); if (e) return e;
-  if (p->_parser) {
-    e = (*v)(((PyObject*)p->_parser), a); if (e) return e;
-  }
-  if (p->_factory) {
-    e = (*v)(p->_factory, a); if (e) return e;
-  }
-  if (p->_data) {
-    e = (*v)(p->_data, a); if (e) return e;
-  }
-  if (p->_element_stack) {
-    e = (*v)(p->_element_stack, a); if (e) return e;
-  }
-  if (p->_element_stack_pop) {
-    e = (*v)(p->_element_stack_pop, a); if (e) return e;
+static PyObject *__pyx_getprop_4lxml_5etree_7_Entity_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_7_Entity_4name_1__get__(o);
+}
+
+static int __pyx_setprop_4lxml_5etree_7_Entity_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_7_Entity_4name_3__set__(o, v);
   }
-  if (p->_last) {
-    e = (*v)(((PyObject*)p->_last), a); if (e) return e;
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
   }
-  return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree_TreeBuilder(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_TreeBuilder *p = (struct __pyx_obj_4lxml_5etree_TreeBuilder *)o;
-  if (likely(__pyx_ptype_4lxml_5etree__SaxParserTarget)) { if (__pyx_ptype_4lxml_5etree__SaxParserTarget->tp_clear) __pyx_ptype_4lxml_5etree__SaxParserTarget->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_4lxml_5etree_TreeBuilder);
-  Py_CLEAR(p->_parser);
-  Py_CLEAR(p->_factory);
-  Py_CLEAR(p->_data);
-  Py_CLEAR(p->_element_stack);
-  Py_CLEAR(p->_element_stack_pop);
-  Py_CLEAR(p->_last);
-  return 0;
+static PyObject *__pyx_getprop_4lxml_5etree_7_Entity_text(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_7_Entity_4text_1__get__(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_TreeBuilder[] = {
-  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_4lxml_5etree_11TreeBuilder_3close, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11TreeBuilder_2close)},
-  {__Pyx_NAMESTR("data"), (PyCFunction)__pyx_pw_4lxml_5etree_11TreeBuilder_5data, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11TreeBuilder_4data)},
-  {__Pyx_NAMESTR("start"), (PyCFunction)__pyx_pw_4lxml_5etree_11TreeBuilder_7start, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11TreeBuilder_6start)},
-  {__Pyx_NAMESTR("end"), (PyCFunction)__pyx_pw_4lxml_5etree_11TreeBuilder_9end, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11TreeBuilder_8end)},
-  {__Pyx_NAMESTR("pi"), (PyCFunction)__pyx_pw_4lxml_5etree_11TreeBuilder_11pi, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11TreeBuilder_10pi)},
-  {__Pyx_NAMESTR("comment"), (PyCFunction)__pyx_pw_4lxml_5etree_11TreeBuilder_13comment, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11TreeBuilder_12comment)},
+static PyMethodDef __pyx_methods_4lxml_5etree__Entity[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_TreeBuilder = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__Entity[] = {
+  {(char *)"tag", __pyx_getprop_4lxml_5etree_7_Entity_tag, 0, 0, 0},
+  {(char *)"name", __pyx_getprop_4lxml_5etree_7_Entity_name, __pyx_setprop_4lxml_5etree_7_Entity_name, 0, 0},
+  {(char *)"text", __pyx_getprop_4lxml_5etree_7_Entity_text, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__Entity = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.TreeBuilder"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_TreeBuilder), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._Entity"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__Entity), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_TreeBuilder, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -174757,7 +174993,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_TreeBuilder = {
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_7_Entity_1__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -174768,24 +175004,28 @@ static PyTypeObject __pyx_type_4lxml_5etree_TreeBuilder = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("TreeBuilder(self, element_factory=None, parser=None)\n    Parser target that builds a tree.\n\n    The final tree is returned by the ``close()`` method.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_TreeBuilder, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_TreeBuilder, /*tp_clear*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
+  0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_TreeBuilder, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__Entity, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__Entity, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_11TreeBuilder_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_TreeBuilder, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__Entity, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -174801,87 +175041,113 @@ static PyTypeObject __pyx_type_4lxml_5etree_TreeBuilder = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase __pyx_vtable_4lxml_5etree__XPathEvaluatorBase;
+static struct __pyx_vtabstruct_4lxml_5etree__ElementTree __pyx_vtable_4lxml_5etree__ElementTree;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__XPathEvaluatorBase(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *p;
+static struct LxmlElementTree *__pyx_freelist_4lxml_5etree__ElementTree[8];
+static int __pyx_freecount_4lxml_5etree__ElementTree = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree__ElementTree(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct LxmlElementTree *p;
   PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
+  if (likely((__pyx_freecount_4lxml_5etree__ElementTree > 0) & (t->tp_basicsize == sizeof(struct LxmlElementTree)) & ((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree__ElementTree[--__pyx_freecount_4lxml_5etree__ElementTree];
+    memset(o, 0, sizeof(struct LxmlElementTree));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
   } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__XPathEvaluatorBase;
-  p->_context = ((struct __pyx_obj_4lxml_5etree__XPathContext *)Py_None); Py_INCREF(Py_None);
-  p->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_19_XPathEvaluatorBase_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
+    if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+      o = (*t->tp_alloc)(t, 0);
+    } else {
+      o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+    }
+    if (unlikely(!o)) return 0;
   }
+  p = ((struct LxmlElementTree *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ElementTree;
+  p->_doc = ((struct LxmlDocument *)Py_None); Py_INCREF(Py_None);
+  p->_context_node = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__XPathEvaluatorBase(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *p = (struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__ElementTree(PyObject *o) {
+  struct LxmlElementTree *p = (struct LxmlElementTree *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_19_XPathEvaluatorBase_5__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
+  Py_CLEAR(p->_doc);
+  Py_CLEAR(p->_context_node);
+  if ((__pyx_freecount_4lxml_5etree__ElementTree < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct LxmlElementTree))) {
+    __pyx_freelist_4lxml_5etree__ElementTree[__pyx_freecount_4lxml_5etree__ElementTree++] = ((struct LxmlElementTree *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
   }
-  Py_CLEAR(p->_context);
-  Py_CLEAR(p->_error_log);
-  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__XPathEvaluatorBase(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__ElementTree(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *p = (struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *)o;
-  if (p->_context) {
-    e = (*v)(((PyObject*)p->_context), a); if (e) return e;
+  struct LxmlElementTree *p = (struct LxmlElementTree *)o;
+  if (p->_doc) {
+    e = (*v)(((PyObject*)p->_doc), a); if (e) return e;
   }
-  if (p->_error_log) {
-    e = (*v)(((PyObject*)p->_error_log), a); if (e) return e;
+  if (p->_context_node) {
+    e = (*v)(((PyObject*)p->_context_node), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__XPathEvaluatorBase(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *p = (struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *)o;
-  Py_CLEAR(p->_context);
-  Py_CLEAR(p->_error_log);
+static int __pyx_tp_clear_4lxml_5etree__ElementTree(PyObject *o) {
+  struct LxmlElementTree *p = (struct LxmlElementTree *)o;
+  Py_CLEAR(p->_doc);
+  Py_CLEAR(p->_context_node);
   return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_19_XPathEvaluatorBase_error_log(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_19_XPathEvaluatorBase_9error_log_1__get__(o);
+static PyObject *__pyx_getprop_4lxml_5etree_12_ElementTree_docinfo(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_12_ElementTree_7docinfo_1__get__(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__XPathEvaluatorBase[] = {
-  {__Pyx_NAMESTR("evaluate"), (PyCFunction)__pyx_pw_4lxml_5etree_19_XPathEvaluatorBase_7evaluate, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_19_XPathEvaluatorBase_6evaluate)},
+static PyObject *__pyx_getprop_4lxml_5etree_12_ElementTree_parser(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_12_ElementTree_6parser_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__ElementTree[] = {
+  {__Pyx_NAMESTR("parse"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_1parse, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_parse)},
+  {__Pyx_NAMESTR("_setroot"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_3_setroot, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_2_setroot)},
+  {__Pyx_NAMESTR("getroot"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_5getroot, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_4getroot)},
+  {__Pyx_NAMESTR("__copy__"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_7__copy__, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("__deepcopy__"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_9__deepcopy__, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_11write, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_10write)},
+  {__Pyx_NAMESTR("getpath"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_13getpath, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_12getpath)},
+  {__Pyx_NAMESTR("getiterator"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_15getiterator, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_14getiterator)},
+  {__Pyx_NAMESTR("iter"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_17iter, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_16iter)},
+  {__Pyx_NAMESTR("find"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_19find, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_18find)},
+  {__Pyx_NAMESTR("findtext"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_21findtext, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_20findtext)},
+  {__Pyx_NAMESTR("findall"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_23findall, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_22findall)},
+  {__Pyx_NAMESTR("iterfind"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_25iterfind, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_24iterfind)},
+  {__Pyx_NAMESTR("xpath"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_27xpath, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_26xpath)},
+  {__Pyx_NAMESTR("xslt"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_29xslt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_28xslt)},
+  {__Pyx_NAMESTR("relaxng"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_31relaxng, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_30relaxng)},
+  {__Pyx_NAMESTR("xmlschema"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_33xmlschema, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_32xmlschema)},
+  {__Pyx_NAMESTR("xinclude"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_35xinclude, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_34xinclude)},
+  {__Pyx_NAMESTR("write_c14n"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_37write_c14n, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_36write_c14n)},
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__XPathEvaluatorBase[] = {
-  {(char *)"error_log", __pyx_getprop_4lxml_5etree_19_XPathEvaluatorBase_error_log, 0, 0, 0},
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ElementTree[] = {
+  {(char *)"docinfo", __pyx_getprop_4lxml_5etree_12_ElementTree_docinfo, 0, __Pyx_DOCSTR(__pyx_k_Information_about_the_document_p), 0},
+  {(char *)"parser", __pyx_getprop_4lxml_5etree_12_ElementTree_parser, 0, __Pyx_DOCSTR(__pyx_k_The_parser_that_was_used_to_pars), 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__XPathEvaluatorBase = {
+DL_EXPORT(PyTypeObject) LxmlElementTreeType = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._XPathEvaluatorBase"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ElementTree"), /*tp_name*/
+  sizeof(struct LxmlElementTree), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__XPathEvaluatorBase, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ElementTree, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -174902,23 +175168,23 @@ static PyTypeObject __pyx_type_4lxml_5etree__XPathEvaluatorBase = {
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__XPathEvaluatorBase, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__XPathEvaluatorBase, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__ElementTree, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ElementTree, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__XPathEvaluatorBase, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__ElementTree, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__XPathEvaluatorBase, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__ElementTree, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_19_XPathEvaluatorBase_3__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__XPathEvaluatorBase, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ElementTree, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -174934,20 +175200,36 @@ static PyTypeObject __pyx_type_4lxml_5etree__XPathEvaluatorBase = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_XPathElementEvaluator __pyx_vtable_4lxml_5etree_XPathElementEvaluator;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_XPathElementEvaluator(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__XPathEvaluatorBase(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase*)__pyx_vtabptr_4lxml_5etree_XPathElementEvaluator;
+static struct __pyx_obj_4lxml_5etree__Attrib *__pyx_freelist_4lxml_5etree__Attrib[16];
+static int __pyx_freecount_4lxml_5etree__Attrib = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree__Attrib(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__Attrib *p;
+  PyObject *o;
+  if (likely((__pyx_freecount_4lxml_5etree__Attrib > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__Attrib)) & ((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree__Attrib[--__pyx_freecount_4lxml_5etree__Attrib];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__Attrib));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
+  } else {
+    if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+      o = (*t->tp_alloc)(t, 0);
+    } else {
+      o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+    }
+    if (unlikely(!o)) return 0;
+  }
+  p = ((struct __pyx_obj_4lxml_5etree__Attrib *)o);
   p->_element = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_7_Attrib_1__cinit__(o, a, k) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_XPathElementEvaluator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *p = (struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__Attrib(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__Attrib *p = (struct __pyx_obj_4lxml_5etree__Attrib *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
@@ -174955,39 +175237,144 @@ static void __pyx_tp_dealloc_4lxml_5etree_XPathElementEvaluator(PyObject *o) {
   #endif
   PyObject_GC_UnTrack(o);
   Py_CLEAR(p->_element);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__XPathEvaluatorBase(o);
+  if ((__pyx_freecount_4lxml_5etree__Attrib < 16) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__Attrib))) {
+    __pyx_freelist_4lxml_5etree__Attrib[__pyx_freecount_4lxml_5etree__Attrib++] = ((struct __pyx_obj_4lxml_5etree__Attrib *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
+  }
 }
 
-static int __pyx_tp_traverse_4lxml_5etree_XPathElementEvaluator(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__Attrib(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *p = (struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__XPathEvaluatorBase(o, v, a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__Attrib *p = (struct __pyx_obj_4lxml_5etree__Attrib *)o;
   if (p->_element) {
     e = (*v)(((PyObject*)p->_element), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree_XPathElementEvaluator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *p = (struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *)o;
-  __pyx_tp_clear_4lxml_5etree__XPathEvaluatorBase(o);
+static int __pyx_tp_clear_4lxml_5etree__Attrib(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__Attrib *p = (struct __pyx_obj_4lxml_5etree__Attrib *)o;
   Py_CLEAR(p->_element);
   return 0;
 }
+static PyObject *__pyx_sq_item_4lxml_5etree__Attrib(PyObject *o, Py_ssize_t i) {
+  PyObject *r;
+  PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
+  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
+  Py_DECREF(x);
+  return r;
+}
 
-static PyMethodDef __pyx_methods_4lxml_5etree_XPathElementEvaluator[] = {
-  {__Pyx_NAMESTR("register_namespace"), (PyCFunction)__pyx_pw_4lxml_5etree_21XPathElementEvaluator_3register_namespace, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_21XPathElementEvaluator_2register_namespace)},
-  {__Pyx_NAMESTR("register_namespaces"), (PyCFunction)__pyx_pw_4lxml_5etree_21XPathElementEvaluator_5register_namespaces, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_21XPathElementEvaluator_4register_namespaces)},
+static int __pyx_mp_ass_subscript_4lxml_5etree__Attrib(PyObject *o, PyObject *i, PyObject *v) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_7_Attrib_3__setitem__(o, i, v);
+  }
+  else {
+    return __pyx_pw_4lxml_5etree_7_Attrib_5__delitem__(o, i);
+  }
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__Attrib[] = {
+  {__Pyx_NAMESTR("update"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_7update, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("pop"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_9pop, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("clear"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_11clear, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("__copy__"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_15__copy__, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("__deepcopy__"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_17__deepcopy__, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_25get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("keys"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_27keys, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("iterkeys"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_31iterkeys, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("values"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_33values, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("itervalues"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_35itervalues, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("items"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_37items, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("iteritems"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_39iteritems, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("has_key"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_41has_key, METH_O, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_XPathElementEvaluator = {
+static PyNumberMethods __pyx_tp_as_number__Attrib = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  __pyx_pw_4lxml_5etree_7_Attrib_21__bool__, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_long*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if PY_VERSION_HEX >= 0x02050000
+  0, /*nb_index*/
+  #endif
+};
+
+static PySequenceMethods __pyx_tp_as_sequence__Attrib = {
+  __pyx_pw_4lxml_5etree_7_Attrib_23__len__, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  __pyx_sq_item_4lxml_5etree__Attrib, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  __pyx_pw_4lxml_5etree_7_Attrib_43__contains__, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping__Attrib = {
+  __pyx_pw_4lxml_5etree_7_Attrib_23__len__, /*mp_length*/
+  __pyx_pw_4lxml_5etree_7_Attrib_19__getitem__, /*mp_subscript*/
+  __pyx_mp_ass_subscript_4lxml_5etree__Attrib, /*mp_ass_subscript*/
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__Attrib = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.XPathElementEvaluator"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_XPathElementEvaluator), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._Attrib"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__Attrib), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_XPathElementEvaluator, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__Attrib, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -174996,25 +175383,25 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPathElementEvaluator = {
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
+  __pyx_pw_4lxml_5etree_7_Attrib_13__repr__, /*tp_repr*/
+  &__pyx_tp_as_number__Attrib, /*tp_as_number*/
+  &__pyx_tp_as_sequence__Attrib, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping__Attrib, /*tp_as_mapping*/
   0, /*tp_hash*/
-  __pyx_pw_4lxml_5etree_21XPathElementEvaluator_7__call__, /*tp_call*/
+  0, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("XPathElementEvaluator(self, element, namespaces=None, extensions=None, regexp=True, smart_strings=True)\n    Create an XPath evaluator for an element.\n\n    Absolute XPath expressions (starting with '/') will be evaluated against\n    the ElementTree as returned by getroottree().\n\n    Additional namespace declarations can be passed with the\n    'namespace' keyword argument.  EXSLT regular expression support\n    can be disabled with the 'regexp' boolean keyword (defaults to\n    True).  Smart strings will be returned for string results unless\n    you pass ``smart_strings=False``.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_XPathElementEvaluator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_XPathElementEvaluator, /*tp_clear*/
-  0, /*tp_richcompare*/
+  __Pyx_DOCSTR("A dict-like proxy for the ``Element.attrib`` property.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__Attrib, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__Attrib, /*tp_clear*/
+  __pyx_pw_4lxml_5etree_7_Attrib_45__richcmp__, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
+  __pyx_pw_4lxml_5etree_7_Attrib_29__iter__, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_XPathElementEvaluator, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__Attrib, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -175022,9 +175409,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPathElementEvaluator = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_21XPathElementEvaluator_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_XPathElementEvaluator, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__Attrib, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -175040,27 +175427,50 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPathElementEvaluator = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_XPathDocumentEvaluator __pyx_vtable_4lxml_5etree_XPathDocumentEvaluator;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_XPathDocumentEvaluator(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_XPathDocumentEvaluator *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree_XPathElementEvaluator(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__AttribIterator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__AttribIterator *p;
+  PyObject *o;
+  o = (*t->tp_alloc)(t, 0);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_XPathDocumentEvaluator *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase*)__pyx_vtabptr_4lxml_5etree_XPathDocumentEvaluator;
+  p = ((struct __pyx_obj_4lxml_5etree__AttribIterator *)o);
+  p->_node = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_XPathDocumentEvaluator[] = {
+static void __pyx_tp_dealloc_4lxml_5etree__AttribIterator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__AttribIterator *p = (struct __pyx_obj_4lxml_5etree__AttribIterator *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_node);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_4lxml_5etree__AttribIterator(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__AttribIterator *p = (struct __pyx_obj_4lxml_5etree__AttribIterator *)o;
+  if (p->_node) {
+    e = (*v)(((PyObject*)p->_node), a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree__AttribIterator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__AttribIterator *p = (struct __pyx_obj_4lxml_5etree__AttribIterator *)o;
+  Py_CLEAR(p->_node);
+  return 0;
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__AttribIterator[] = {
+  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_15_AttribIterator_3__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_XPathDocumentEvaluator = {
+static PyTypeObject __pyx_type_4lxml_5etree__AttribIterator = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.XPathDocumentEvaluator"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_XPathDocumentEvaluator), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._AttribIterator"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__AttribIterator), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_XPathElementEvaluator, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__AttribIterator, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -175074,20 +175484,20 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPathDocumentEvaluator = {
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  __pyx_pw_4lxml_5etree_22XPathDocumentEvaluator_3__call__, /*tp_call*/
+  0, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("XPathDocumentEvaluator(self, etree, namespaces=None, extensions=None, regexp=True, smart_strings=True)\n    Create an XPath evaluator for an ElementTree.\n\n    Additional namespace declarations can be passed with the\n    'namespace' keyword argument.  EXSLT regular expression support\n    can be disabled with the 'regexp' boolean keyword (defaults to\n    True).  Smart strings will be returned for string results unless\n    you pass ``smart_strings=False``.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_XPathElementEvaluator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_XPathElementEvaluator, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("Attribute iterator - for internal use only!\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__AttribIterator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__AttribIterator, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_XPathDocumentEvaluator, /*tp_methods*/
+  __pyx_pw_4lxml_5etree_15_AttribIterator_1__iter__, /*tp_iter*/
+  __pyx_pw_4lxml_5etree_15_AttribIterator_3__next__, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree__AttribIterator, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -175095,9 +175505,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPathDocumentEvaluator = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_22XPathDocumentEvaluator_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_XPathDocumentEvaluator, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__AttribIterator, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -175113,61 +175523,56 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPathDocumentEvaluator = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher __pyx_vtable_4lxml_5etree__ElementTagMatcher;
 
-static struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *__pyx_freelist_4lxml_5etree___pyx_scope_struct_1_iterattributes[8];
-static int __pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct_1_iterattributes(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_4lxml_5etree__ElementTagMatcher(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct LxmlElementTagMatcher *p;
   PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes)))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct_1_iterattributes[--__pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
-  } else {
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
     o = (*t->tp_alloc)(t, 0);
-    if (unlikely(!o)) return 0;
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
+  if (unlikely(!o)) return 0;
+  p = ((struct LxmlElementTagMatcher *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ElementTagMatcher;
+  p->_pystrings = Py_None; Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct_1_iterattributes(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->__pyx_v_node);
-  Py_CLEAR(p->__pyx_v_self);
-  if ((__pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes))) {
-    __pyx_freelist_4lxml_5etree___pyx_scope_struct_1_iterattributes[__pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes++] = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
+static void __pyx_tp_dealloc_4lxml_5etree__ElementTagMatcher(PyObject *o) {
+  struct LxmlElementTagMatcher *p = (struct LxmlElementTagMatcher *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_pystrings);
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct_1_iterattributes(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__ElementTagMatcher(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *)o;
-  if (p->__pyx_v_node) {
-    e = (*v)(((PyObject*)p->__pyx_v_node), a); if (e) return e;
-  }
-  if (p->__pyx_v_self) {
-    e = (*v)(((PyObject*)p->__pyx_v_self), a); if (e) return e;
+  struct LxmlElementTagMatcher *p = (struct LxmlElementTagMatcher *)o;
+  if (p->_pystrings) {
+    e = (*v)(p->_pystrings, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree___pyx_scope_struct_1_iterattributes(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *)o;
-  Py_CLEAR(p->__pyx_v_node);
-  Py_CLEAR(p->__pyx_v_self);
+static int __pyx_tp_clear_4lxml_5etree__ElementTagMatcher(PyObject *o) {
+  struct LxmlElementTagMatcher *p = (struct LxmlElementTagMatcher *)o;
+  Py_CLEAR(p->_pystrings);
   return 0;
 }
 
-static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_1_iterattributes = {
+DL_EXPORT(PyTypeObject) LxmlElementTagMatcherType = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.__pyx_scope_struct_1_iterattributes"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ElementTagMatcher"), /*tp_name*/
+  sizeof(struct LxmlElementTagMatcher), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct_1_iterattributes, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ElementTagMatcher, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -175186,10 +175591,10 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_1_iterattributes
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct_1_iterattributes, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree___pyx_scope_struct_1_iterattributes, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("\n    Dead but public. :)\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ElementTagMatcher, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ElementTagMatcher, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
@@ -175204,7 +175609,7 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_1_iterattributes
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree___pyx_scope_struct_1_iterattributes, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ElementTagMatcher, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -175220,36 +175625,59 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_1_iterattributes
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__Comment __pyx_vtable_4lxml_5etree__Comment;
+static struct __pyx_vtabstruct_4lxml_5etree__ElementIterator __pyx_vtable_4lxml_5etree__ElementIterator;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__Comment(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__Comment *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree___ContentOnlyElement(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__ElementIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct LxmlElementIterator *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ElementTagMatcher(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__Comment *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree__Comment;
+  p = ((struct LxmlElementIterator *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher*)__pyx_vtabptr_4lxml_5etree__ElementIterator;
+  p->_node = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_8_Comment_tag(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_8_Comment_3tag_1__get__(o);
+static void __pyx_tp_dealloc_4lxml_5etree__ElementIterator(PyObject *o) {
+  struct LxmlElementIterator *p = (struct LxmlElementIterator *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_node);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__ElementTagMatcher(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__Comment[] = {
-  {0, 0, 0, 0}
-};
+static int __pyx_tp_traverse_4lxml_5etree__ElementIterator(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct LxmlElementIterator *p = (struct LxmlElementIterator *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__ElementTagMatcher(o, v, a); if (e) return e;
+  if (p->_node) {
+    e = (*v)(((PyObject*)p->_node), a); if (e) return e;
+  }
+  return 0;
+}
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__Comment[] = {
-  {(char *)"tag", __pyx_getprop_4lxml_5etree_8_Comment_tag, 0, 0, 0},
-  {0, 0, 0, 0, 0}
+static int __pyx_tp_clear_4lxml_5etree__ElementIterator(PyObject *o) {
+  struct LxmlElementIterator *p = (struct LxmlElementIterator *)o;
+  __pyx_tp_clear_4lxml_5etree__ElementTagMatcher(o);
+  Py_CLEAR(p->_node);
+  return 0;
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__ElementIterator[] = {
+  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_16_ElementIterator_3__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__Comment = {
+DL_EXPORT(PyTypeObject) LxmlElementIteratorType = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._Comment"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__Comment), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ElementIterator"), /*tp_name*/
+  sizeof(struct LxmlElementIterator), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ElementIterator, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -175258,7 +175686,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__Comment = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_8_Comment_1__repr__, /*tp_repr*/
+  0, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -175269,20 +175697,16 @@ static PyTypeObject __pyx_type_4lxml_5etree__Comment = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
-  0, /*tp_clear*/
+  __Pyx_DOCSTR("\n    Dead but public. :)\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ElementIterator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ElementIterator, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
-  #else
-  0, /*tp_iter*/
-  #endif
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__Comment, /*tp_methods*/
+  __pyx_pw_4lxml_5etree_16_ElementIterator_1__iter__, /*tp_iter*/
+  __pyx_pw_4lxml_5etree_16_ElementIterator_3__next__, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree__ElementIterator, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__Comment, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -175290,7 +175714,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__Comment = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__Comment, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ElementIterator, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -175420,61 +175844,143 @@ static PyTypeObject __pyx_type_4lxml_5etree__MultiTagMatcher = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_XPath __pyx_vtable_4lxml_5etree_XPath;
+static struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator __pyx_vtable_4lxml_5etree__ElementMatchIterator;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_XPath(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_XPath *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__XPathEvaluatorBase(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_XPath *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase*)__pyx_vtabptr_4lxml_5etree_XPath;
-  p->_path = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_5XPath_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
+static PyObject *__pyx_tp_new_4lxml_5etree__ElementMatchIterator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ElementMatchIterator *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ElementMatchIterator;
+  p->_node = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
+  p->_matcher = ((struct __pyx_obj_4lxml_5etree__MultiTagMatcher *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_XPath(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_XPath *p = (struct __pyx_obj_4lxml_5etree_XPath *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__ElementMatchIterator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ElementMatchIterator *p = (struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_5XPath_7__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
+  Py_CLEAR(p->_node);
+  Py_CLEAR(p->_matcher);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_4lxml_5etree__ElementMatchIterator(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__ElementMatchIterator *p = (struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)o;
+  if (p->_node) {
+    e = (*v)(((PyObject*)p->_node), a); if (e) return e;
   }
-  Py_CLEAR(p->_path);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__XPathEvaluatorBase(o);
+  if (p->_matcher) {
+    e = (*v)(((PyObject*)p->_matcher), a); if (e) return e;
+  }
+  return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_5XPath_path(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_5XPath_4path_1__get__(o);
+static int __pyx_tp_clear_4lxml_5etree__ElementMatchIterator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ElementMatchIterator *p = (struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)o;
+  Py_CLEAR(p->_node);
+  Py_CLEAR(p->_matcher);
+  return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_XPath[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree__ElementMatchIterator[] = {
+  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_21_ElementMatchIterator_3__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree_XPath[] = {
-  {(char *)"path", __pyx_getprop_4lxml_5etree_5XPath_path, 0, __Pyx_DOCSTR(__pyx_k_The_literal_XPath_expression), 0},
-  {0, 0, 0, 0, 0}
+static PyTypeObject __pyx_type_4lxml_5etree__ElementMatchIterator = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("lxml.etree._ElementMatchIterator"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ElementMatchIterator), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_4lxml_5etree__ElementMatchIterator, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ElementMatchIterator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ElementMatchIterator, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_1__iter__, /*tp_iter*/
+  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_3__next__, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree__ElementMatchIterator, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_4lxml_5etree__ElementMatchIterator, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree_ElementChildIterator __pyx_vtable_4lxml_5etree_ElementChildIterator;
 
-static PyTypeObject __pyx_type_4lxml_5etree_XPath = {
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementChildIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_ElementChildIterator *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ElementMatchIterator(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree_ElementChildIterator *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator*)__pyx_vtabptr_4lxml_5etree_ElementChildIterator;
+  if (unlikely(__pyx_pw_4lxml_5etree_20ElementChildIterator_1__cinit__(o, a, k) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_ElementChildIterator[] = {
+  {0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree_ElementChildIterator = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.XPath"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_XPath), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.ElementChildIterator"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_ElementChildIterator), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_XPath, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ElementMatchIterator, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -175483,35 +175989,43 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPath = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_5XPath_9__repr__, /*tp_repr*/
+  0, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  __pyx_pw_4lxml_5etree_5XPath_5__call__, /*tp_call*/
+  0, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("XPath(self, path, namespaces=None, extensions=None, regexp=True, smart_strings=True)\n    A compiled XPath expression that can be called on Elements and ElementTrees.\n\n    Besides the XPath expression, you can pass prefix-namespace\n    mappings and extension functions to the constructor through the\n    keyword arguments ``namespaces`` and ``extensions``.  EXSLT\n    regular expression support can be disabled with the 'regexp'\n    boolean keyword (defaults to True).  Smart strings will be\n    returned for string results unless you pass\n    ``smart_strings=False``.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__XPathEvaluatorBase, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__XPathEvaluatorBase, /*tp_clear*/
+  __Pyx_DOCSTR("ElementChildIterator(self, node, tag=None, reversed=False)\n    Iterates over the children of an element.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ElementMatchIterator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ElementMatchIterator, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_1__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_3__next__, /*tp_iternext*/
+  #else
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_XPath, /*tp_methods*/
+  #endif
+  __pyx_methods_4lxml_5etree_ElementChildIterator, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree_XPath, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_5XPath_3__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_XPath, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_ElementChildIterator, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -175527,27 +176041,30 @@ static PyTypeObject __pyx_type_4lxml_5etree_XPath = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_ETXPath __pyx_vtable_4lxml_5etree_ETXPath;
+static struct __pyx_vtabstruct_4lxml_5etree_SiblingsIterator __pyx_vtable_4lxml_5etree_SiblingsIterator;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_ETXPath(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_ETXPath *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree_XPath(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_SiblingsIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_SiblingsIterator *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ElementMatchIterator(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_ETXPath *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase*)__pyx_vtabptr_4lxml_5etree_ETXPath;
+  p = ((struct __pyx_obj_4lxml_5etree_SiblingsIterator *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator*)__pyx_vtabptr_4lxml_5etree_SiblingsIterator;
+  if (unlikely(__pyx_pw_4lxml_5etree_16SiblingsIterator_1__cinit__(o, a, k) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_ETXPath[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_SiblingsIterator[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_ETXPath = {
+static PyTypeObject __pyx_type_4lxml_5etree_SiblingsIterator = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.ETXPath"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_ETXPath), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.SiblingsIterator"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_SiblingsIterator), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_XPath, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ElementMatchIterator, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -175556,33 +176073,117 @@ static PyTypeObject __pyx_type_4lxml_5etree_ETXPath = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_5XPath_9__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("SiblingsIterator(self, node, tag=None, preceding=False)\n    Iterates over the siblings of an element.\n\n    You can pass the boolean keyword ``preceding`` to specify the direction.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ElementMatchIterator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ElementMatchIterator, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_5XPath_5__call__, /*tp_call*/
+  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_1__iter__, /*tp_iter*/
   #else
-  0, /*tp_call*/
+  0, /*tp_iter*/
+  #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_3__next__, /*tp_iternext*/
+  #else
+  0, /*tp_iternext*/
+  #endif
+  __pyx_methods_4lxml_5etree_SiblingsIterator, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_4lxml_5etree_SiblingsIterator, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+static struct __pyx_vtabstruct_4lxml_5etree_AncestorsIterator __pyx_vtable_4lxml_5etree_AncestorsIterator;
+
+static PyObject *__pyx_tp_new_4lxml_5etree_AncestorsIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_AncestorsIterator *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ElementMatchIterator(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree_AncestorsIterator *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator*)__pyx_vtabptr_4lxml_5etree_AncestorsIterator;
+  if (unlikely(__pyx_pw_4lxml_5etree_17AncestorsIterator_1__cinit__(o, a, k) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
+  return o;
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_AncestorsIterator[] = {
+  {0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree_AncestorsIterator = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("lxml.etree.AncestorsIterator"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_AncestorsIterator), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_4lxml_5etree__ElementMatchIterator, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
   #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("ETXPath(self, path, extensions=None, regexp=True, smart_strings=True)\n    Special XPath class that supports the ElementTree {uri} notation for namespaces.\n\n    Note that this class does not accept the ``namespace`` keyword\n    argument. All namespaces must be passed as part of the path\n    string.  Smart strings will be returned for string results unless\n    you pass ``smart_strings=False``.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__XPathEvaluatorBase, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__XPathEvaluatorBase, /*tp_clear*/
+  __Pyx_DOCSTR("AncestorsIterator(self, node, tag=None)\n    Iterates over the ancestors of an element (from parent to parent).\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ElementMatchIterator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ElementMatchIterator, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_1__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_3__next__, /*tp_iternext*/
+  #else
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_ETXPath, /*tp_methods*/
+  #endif
+  __pyx_methods_4lxml_5etree_AncestorsIterator, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -175590,9 +176191,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_ETXPath = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_7ETXPath_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_ETXPath, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_AncestorsIterator, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -175608,74 +176209,76 @@ static PyTypeObject __pyx_type_4lxml_5etree_ETXPath = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup __pyx_vtable_4lxml_5etree_FallbackElementClassLookup;
+static struct __pyx_vtabstruct_4lxml_5etree_ElementDepthFirstIterator __pyx_vtable_4lxml_5etree_ElementDepthFirstIterator;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct LxmlFallbackElementClassLookup *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree_ElementClassLookup(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementDepthFirstIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
   if (unlikely(!o)) return 0;
-  p = ((struct LxmlFallbackElementClassLookup *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
-  p->fallback = ((struct LxmlElementClassLookup *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_26FallbackElementClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_ElementDepthFirstIterator;
+  p->_next_node = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
+  p->_top_node = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
+  p->_matcher = ((struct __pyx_obj_4lxml_5etree__MultiTagMatcher *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_25ElementDepthFirstIterator_1__cinit__(o, a, k) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup(PyObject *o) {
-  struct LxmlFallbackElementClassLookup *p = (struct LxmlFallbackElementClassLookup *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_ElementDepthFirstIterator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *p = (struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->fallback);
-  #if CYTHON_COMPILING_IN_CPYTHON
-  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
-  #endif
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree_ElementClassLookup(o);
+  Py_CLEAR(p->_next_node);
+  Py_CLEAR(p->_top_node);
+  Py_CLEAR(p->_matcher);
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree_ElementDepthFirstIterator(PyObject *o, visitproc v, void *a) {
   int e;
-  struct LxmlFallbackElementClassLookup *p = (struct LxmlFallbackElementClassLookup *)o;
-  e = ((likely(__pyx_ptype_4lxml_5etree_ElementClassLookup)) ? ((__pyx_ptype_4lxml_5etree_ElementClassLookup->tp_traverse) ? __pyx_ptype_4lxml_5etree_ElementClassLookup->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup)); if (e) return e;
-  if (p->fallback) {
-    e = (*v)(((PyObject*)p->fallback), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *p = (struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *)o;
+  if (p->_next_node) {
+    e = (*v)(((PyObject*)p->_next_node), a); if (e) return e;
+  }
+  if (p->_top_node) {
+    e = (*v)(((PyObject*)p->_top_node), a); if (e) return e;
+  }
+  if (p->_matcher) {
+    e = (*v)(((PyObject*)p->_matcher), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup(PyObject *o) {
-  struct LxmlFallbackElementClassLookup *p = (struct LxmlFallbackElementClassLookup *)o;
-  if (likely(__pyx_ptype_4lxml_5etree_ElementClassLookup)) { if (__pyx_ptype_4lxml_5etree_ElementClassLookup->tp_clear) __pyx_ptype_4lxml_5etree_ElementClassLookup->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup);
-  Py_CLEAR(p->fallback);
+static int __pyx_tp_clear_4lxml_5etree_ElementDepthFirstIterator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *p = (struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *)o;
+  Py_CLEAR(p->_next_node);
+  Py_CLEAR(p->_top_node);
+  Py_CLEAR(p->_matcher);
   return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_26FallbackElementClassLookup_fallback(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_26FallbackElementClassLookup_8fallback_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree_FallbackElementClassLookup[] = {
-  {__Pyx_NAMESTR("set_fallback"), (PyCFunction)__pyx_pw_4lxml_5etree_26FallbackElementClassLookup_5set_fallback, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_26FallbackElementClassLookup_4set_fallback)},
+static PyMethodDef __pyx_methods_4lxml_5etree_ElementDepthFirstIterator[] = {
+  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_25ElementDepthFirstIterator_5__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree_FallbackElementClassLookup[] = {
-  {(char *)"fallback", __pyx_getprop_4lxml_5etree_26FallbackElementClassLookup_fallback, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-DL_EXPORT(PyTypeObject) LxmlFallbackElementClassLookupType = {
+static PyTypeObject __pyx_type_4lxml_5etree_ElementDepthFirstIterator = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.FallbackElementClassLookup"), /*tp_name*/
-  sizeof(struct LxmlFallbackElementClassLookup), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.ElementDepthFirstIterator"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_ElementDepthFirstIterator, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -175695,24 +176298,24 @@ DL_EXPORT(PyTypeObject) LxmlFallbackElementClassLookupType = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("FallbackElementClassLookup(self, fallback=None)\n\n    Superclass of Element class lookups with additional fallback.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup, /*tp_clear*/
+  __Pyx_DOCSTR("ElementDepthFirstIterator(self, node, tag=None, inclusive=True)\n    Iterates over an element and its sub-elements in document order (depth\n    first pre-order).\n\n    Note that this also includes comments, entities and processing\n    instructions.  To filter them out, check if the ``tag`` property\n    of the returned element is a string (i.e. not None and not a\n    factory function), or pass the ``Element`` factory for the ``tag``\n    argument to receive only Elements.\n\n    If the optional ``tag`` argument is not None, the iterator returns only\n    the elements that match the respective name and namespace.\n\n    The optional boolean argument 'inclusive' defaults to True and can be set\n    to False to exclude the start element itself.\n\n    Note that the behaviour of this iterator is completely undefined if the\n    tree it traverses is modified during iteration.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_ElementDepthFirstIterator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_ElementDepthFirstIterator, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_FallbackElementClassLookup, /*tp_methods*/
+  __pyx_pw_4lxml_5etree_25ElementDepthFirstIterator_3__iter__, /*tp_iter*/
+  __pyx_pw_4lxml_5etree_25ElementDepthFirstIterator_5__next__, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree_ElementDepthFirstIterator, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree_FallbackElementClassLookup, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_26FallbackElementClassLookup_3__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_FallbackElementClassLookup, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_ElementDepthFirstIterator, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -175728,31 +176331,68 @@ DL_EXPORT(PyTypeObject) LxmlFallbackElementClassLookupType = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_CustomElementClassLookup __pyx_vtable_4lxml_5etree_CustomElementClassLookup;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_CustomElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_CustomElementClassLookup *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementTextIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_ElementTextIterator *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_CustomElementClassLookup *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup*)__pyx_vtabptr_4lxml_5etree_CustomElementClassLookup;
-  if (unlikely(__pyx_pw_4lxml_5etree_24CustomElementClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree_ElementTextIterator *)o);
+  p->_nextEvent = Py_None; Py_INCREF(Py_None);
+  p->_start_element = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_19ElementTextIterator_1__cinit__(o, a, k) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_CustomElementClassLookup[] = {
-  {__Pyx_NAMESTR("lookup"), (PyCFunction)__pyx_pw_4lxml_5etree_24CustomElementClassLookup_3lookup, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_24CustomElementClassLookup_2lookup)},
+static void __pyx_tp_dealloc_4lxml_5etree_ElementTextIterator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_ElementTextIterator *p = (struct __pyx_obj_4lxml_5etree_ElementTextIterator *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_nextEvent);
+  Py_CLEAR(p->_start_element);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_4lxml_5etree_ElementTextIterator(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree_ElementTextIterator *p = (struct __pyx_obj_4lxml_5etree_ElementTextIterator *)o;
+  if (p->_nextEvent) {
+    e = (*v)(p->_nextEvent, a); if (e) return e;
+  }
+  if (p->_start_element) {
+    e = (*v)(((PyObject*)p->_start_element), a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree_ElementTextIterator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_ElementTextIterator *p = (struct __pyx_obj_4lxml_5etree_ElementTextIterator *)o;
+  Py_CLEAR(p->_nextEvent);
+  Py_CLEAR(p->_start_element);
+  return 0;
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_ElementTextIterator[] = {
+  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_19ElementTextIterator_5__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_CustomElementClassLookup = {
+static PyTypeObject __pyx_type_4lxml_5etree_ElementTextIterator = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.CustomElementClassLookup"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_CustomElementClassLookup), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.ElementTextIterator"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_ElementTextIterator), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_ElementTextIterator, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -175772,14 +176412,14 @@ static PyTypeObject __pyx_type_4lxml_5etree_CustomElementClassLookup = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("CustomElementClassLookup(self, fallback=None)\n    Element class lookup based on a subclass method.\n\n    You can inherit from this class and override the method::\n\n        lookup(self, type, doc, namespace, name)\n\n    to lookup the element class for a node. Arguments of the method:\n    * type:      one of 'element', 'comment', 'PI', 'entity'\n    * doc:       document that the node is in\n    * namespace: namespace URI of the node (or None for comments/PIs/entities)\n    * name:      name of the element/entity, None for comments, target for PIs\n\n    If you return None from this method, the fallback will be called.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup, /*tp_clear*/
+  __Pyx_DOCSTR("ElementTextIterator(self, element, tag=None, with_tail=True)\n    Iterates over the text content of a subtree.\n\n    You can pass the ``tag`` keyword argument to restrict text content to a\n    specific tag name.\n\n    You can set the ``with_tail`` keyword argument to ``False`` to skip over\n    tail text (e.g. if you know that it's only whitespace from pretty-printing).\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_ElementTextIterator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_ElementTextIterator, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_CustomElementClassLookup, /*tp_methods*/
+  __pyx_pw_4lxml_5etree_19ElementTextIterator_3__iter__, /*tp_iter*/
+  __pyx_pw_4lxml_5etree_19ElementTextIterator_5__next__, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree_ElementTextIterator, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -175787,13 +176427,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_CustomElementClassLookup = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_26FallbackElementClassLookup_3__init__, /*tp_init*/
-  #else
   0, /*tp_init*/
-  #endif
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_CustomElementClassLookup, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_ElementTextIterator, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -175809,74 +176445,58 @@ static PyTypeObject __pyx_type_4lxml_5etree_CustomElementClassLookup = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__IncrementalFileWriter __pyx_vtable_4lxml_5etree__IncrementalFileWriter;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__IncrementalFileWriter(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *p;
+static struct __pyx_obj_4lxml_5etree_CDATA *__pyx_freelist_4lxml_5etree_CDATA[8];
+static int __pyx_freecount_4lxml_5etree_CDATA = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree_CDATA(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_CDATA *p;
   PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__IncrementalFileWriter;
-  p->_encoding = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_target = ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)Py_None); Py_INCREF(Py_None);
-  p->_element_stack = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_1__cinit__(o, a, k) < 0)) {
+  if (likely((__pyx_freecount_4lxml_5etree_CDATA > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree_CDATA)) & ((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree_CDATA[--__pyx_freecount_4lxml_5etree_CDATA];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree_CDATA));
+    (void) PyObject_INIT(o, t);
+  } else {
+    if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+      o = (*t->tp_alloc)(t, 0);
+    } else {
+      o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+    }
+    if (unlikely(!o)) return 0;
+  }
+  p = ((struct __pyx_obj_4lxml_5etree_CDATA *)o);
+  p->_utf8_data = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_5CDATA_1__cinit__(o, a, k) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__IncrementalFileWriter(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *p = (struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)o;
-  PyObject_GC_UnTrack(o);
-  {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_22_IncrementalFileWriter_3__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
-  }
-  Py_CLEAR(p->_encoding);
-  Py_CLEAR(p->_target);
-  Py_CLEAR(p->_element_stack);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__IncrementalFileWriter(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *p = (struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)o;
-  if (p->_target) {
-    e = (*v)(((PyObject*)p->_target), a); if (e) return e;
+static void __pyx_tp_dealloc_4lxml_5etree_CDATA(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_CDATA *p = (struct __pyx_obj_4lxml_5etree_CDATA *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
-  if (p->_element_stack) {
-    e = (*v)(p->_element_stack, a); if (e) return e;
+  #endif
+  Py_CLEAR(p->_utf8_data);
+  if ((__pyx_freecount_4lxml_5etree_CDATA < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree_CDATA))) {
+    __pyx_freelist_4lxml_5etree_CDATA[__pyx_freecount_4lxml_5etree_CDATA++] = ((struct __pyx_obj_4lxml_5etree_CDATA *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
   }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__IncrementalFileWriter(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *p = (struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)o;
-  Py_CLEAR(p->_target);
-  Py_CLEAR(p->_element_stack);
-  return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__IncrementalFileWriter[] = {
-  {__Pyx_NAMESTR("write_declaration"), (PyCFunction)__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_5write_declaration, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_IncrementalFileWriter_4write_declaration)},
-  {__Pyx_NAMESTR("write_doctype"), (PyCFunction)__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_7write_doctype, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_IncrementalFileWriter_6write_doctype)},
-  {__Pyx_NAMESTR("element"), (PyCFunction)__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_9element, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_IncrementalFileWriter_8element)},
-  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_11write, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_IncrementalFileWriter_10write)},
+static PyMethodDef __pyx_methods_4lxml_5etree_CDATA[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__IncrementalFileWriter = {
+static PyTypeObject __pyx_type_4lxml_5etree_CDATA = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._IncrementalFileWriter"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.CDATA"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_CDATA), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__IncrementalFileWriter, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_CDATA, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -175895,15 +176515,15 @@ static PyTypeObject __pyx_type_4lxml_5etree__IncrementalFileWriter = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__IncrementalFileWriter, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__IncrementalFileWriter, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+  __Pyx_DOCSTR("CDATA(data)\n\n    CDATA factory.  This factory creates an opaque data object that\n    can be used to set Element text.  The usual way to use it is::\n\n        >>> el = Element('content')\n        >>> el.text = CDATA('a string')\n\n        >>> print(el.text)\n        a string\n        >>> print(tostring(el, encoding=\"unicode\"))\n        <content><![CDATA[a string]]></content>\n    "), /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__IncrementalFileWriter, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_CDATA, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -175913,7 +176533,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__IncrementalFileWriter = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__IncrementalFileWriter, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_CDATA, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -176159,43 +176779,30 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyProxy = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyElementProxy __pyx_vtable_4lxml_5etree__ReadOnlyElementProxy;
+static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyPIProxy __pyx_vtable_4lxml_5etree__ReadOnlyPIProxy;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ReadOnlyElementProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy *p;
+static PyObject *__pyx_tp_new_4lxml_5etree__ReadOnlyPIProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ReadOnlyPIProxy *p;
   PyObject *o = __pyx_tp_new_4lxml_5etree__ReadOnlyProxy(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__ReadOnlyElementProxy;
+  p = ((struct __pyx_obj_4lxml_5etree__ReadOnlyPIProxy *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__ReadOnlyPIProxy;
   return o;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_21_ReadOnlyElementProxy_attrib(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_21_ReadOnlyElementProxy_6attrib_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_21_ReadOnlyElementProxy_prefix(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_21_ReadOnlyElementProxy_6prefix_1__get__(o);
+static PyObject *__pyx_getprop_4lxml_5etree_16_ReadOnlyPIProxy_target(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_16_ReadOnlyPIProxy_6target_1__get__(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__ReadOnlyElementProxy[] = {
-  {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_4lxml_5etree_21_ReadOnlyElementProxy_1get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_21_ReadOnlyElementProxy_get)},
-  {__Pyx_NAMESTR("keys"), (PyCFunction)__pyx_pw_4lxml_5etree_21_ReadOnlyElementProxy_3keys, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_21_ReadOnlyElementProxy_2keys)},
-  {__Pyx_NAMESTR("values"), (PyCFunction)__pyx_pw_4lxml_5etree_21_ReadOnlyElementProxy_5values, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_21_ReadOnlyElementProxy_4values)},
-  {__Pyx_NAMESTR("items"), (PyCFunction)__pyx_pw_4lxml_5etree_21_ReadOnlyElementProxy_7items, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_21_ReadOnlyElementProxy_6items)},
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ReadOnlyElementProxy[] = {
-  {(char *)"attrib", __pyx_getprop_4lxml_5etree_21_ReadOnlyElementProxy_attrib, 0, 0, 0},
-  {(char *)"prefix", __pyx_getprop_4lxml_5etree_21_ReadOnlyElementProxy_prefix, 0, __Pyx_DOCSTR(__pyx_k_Namespace_prefix_or_None), 0},
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ReadOnlyPIProxy[] = {
+  {(char *)"target", __pyx_getprop_4lxml_5etree_16_ReadOnlyPIProxy_target, 0, 0, 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyElementProxy = {
+static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyPIProxy = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ReadOnlyElementProxy"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ReadOnlyPIProxy"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ReadOnlyPIProxy), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy, /*tp_dealloc*/
   0, /*tp_print*/
@@ -176220,8 +176827,8 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyElementProxy = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("The main read-only Element proxy class (for internal use only!)."), /*tp_doc*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("A read-only proxy for processing instructions (for internal use only!)"), /*tp_doc*/
   __pyx_tp_traverse_4lxml_5etree__ReadOnlyProxy, /*tp_traverse*/
   __pyx_tp_clear_4lxml_5etree__ReadOnlyProxy, /*tp_clear*/
   0, /*tp_richcompare*/
@@ -176232,9 +176839,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyElementProxy = {
   0, /*tp_iter*/
   #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ReadOnlyElementProxy, /*tp_methods*/
+  0, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__ReadOnlyElementProxy, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__ReadOnlyPIProxy, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -176242,7 +176849,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyElementProxy = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ReadOnlyElementProxy, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ReadOnlyPIProxy, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -176258,27 +176865,47 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyElementProxy = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_CommentBase __pyx_vtable_4lxml_5etree_CommentBase;
+static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyEntityProxy __pyx_vtable_4lxml_5etree__ReadOnlyEntityProxy;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_CommentBase(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_CommentBase *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__Comment(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__ReadOnlyEntityProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ReadOnlyEntityProxy *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ReadOnlyProxy(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_CommentBase *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree_CommentBase;
+  p = ((struct __pyx_obj_4lxml_5etree__ReadOnlyEntityProxy *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__ReadOnlyEntityProxy;
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_CommentBase[] = {
-  {0, 0, 0, 0}
+static PyObject *__pyx_getprop_4lxml_5etree_20_ReadOnlyEntityProxy_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_20_ReadOnlyEntityProxy_4name_1__get__(o);
+}
+
+static int __pyx_setprop_4lxml_5etree_20_ReadOnlyEntityProxy_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_20_ReadOnlyEntityProxy_4name_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_20_ReadOnlyEntityProxy_text(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_20_ReadOnlyEntityProxy_4text_1__get__(o);
+}
+
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ReadOnlyEntityProxy[] = {
+  {(char *)"name", __pyx_getprop_4lxml_5etree_20_ReadOnlyEntityProxy_name, __pyx_setprop_4lxml_5etree_20_ReadOnlyEntityProxy_name, 0, 0},
+  {(char *)"text", __pyx_getprop_4lxml_5etree_20_ReadOnlyEntityProxy_text, 0, 0, 0},
+  {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_CommentBase = {
+static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyEntityProxy = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.CommentBase"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_CommentBase), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ReadOnlyEntityProxy"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ReadOnlyEntityProxy), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -176288,7 +176915,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_CommentBase = {
   0, /*reserved*/
   #endif
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_8_Comment_1__repr__, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_3__repr__, /*tp_repr*/
   #else
   0, /*tp_repr*/
   #endif
@@ -176301,29 +176928,29 @@ static PyTypeObject __pyx_type_4lxml_5etree_CommentBase = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("All custom Comment classes must inherit from this one.\n\n    To create an XML Comment instance, use the ``Comment()`` factory.\n\n    Subclasses *must not* override __init__ or __new__ as it is\n    absolutely undefined when these objects will be created or\n    destroyed.  All persistent state of Comments must be stored in the\n    underlying XML.  If you really need to initialize the object after\n    creation, you can implement an ``_init(self)`` method that will be\n    called after object creation.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
-  0, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("A read-only proxy for entity references (for internal use only!)"), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ReadOnlyProxy, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ReadOnlyProxy, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
+  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_15__iter__, /*tp_iter*/
   #else
   0, /*tp_iter*/
   #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_CommentBase, /*tp_methods*/
+  0, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__ReadOnlyEntityProxy, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_11CommentBase_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_CommentBase, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ReadOnlyEntityProxy, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -176339,49 +176966,45 @@ static PyTypeObject __pyx_type_4lxml_5etree_CommentBase = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyElementProxy __pyx_vtable_4lxml_5etree__ReadOnlyElementProxy;
 
-static struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam *__pyx_freelist_4lxml_5etree__XSLTQuotedStringParam[8];
-static int __pyx_freecount_4lxml_5etree__XSLTQuotedStringParam = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree__XSLTQuotedStringParam(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam *p;
-  PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree__XSLTQuotedStringParam > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam)))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree__XSLTQuotedStringParam[--__pyx_freecount_4lxml_5etree__XSLTQuotedStringParam];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam));
-    (void) PyObject_INIT(o, t);
-  } else {
-    o = (*t->tp_alloc)(t, 0);
-    if (unlikely(!o)) return 0;
-  }
-  p = ((struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam *)o);
-  p->strval = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_22_XSLTQuotedStringParam_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree__ReadOnlyElementProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ReadOnlyProxy(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__ReadOnlyElementProxy;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__XSLTQuotedStringParam(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam *p = (struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam *)o;
-  Py_CLEAR(p->strval);
-  if ((__pyx_freecount_4lxml_5etree__XSLTQuotedStringParam < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam))) {
-    __pyx_freelist_4lxml_5etree__XSLTQuotedStringParam[__pyx_freecount_4lxml_5etree__XSLTQuotedStringParam++] = ((struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
-  }
+static PyObject *__pyx_getprop_4lxml_5etree_21_ReadOnlyElementProxy_attrib(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_21_ReadOnlyElementProxy_6attrib_1__get__(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__XSLTQuotedStringParam[] = {
+static PyObject *__pyx_getprop_4lxml_5etree_21_ReadOnlyElementProxy_prefix(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_21_ReadOnlyElementProxy_6prefix_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__ReadOnlyElementProxy[] = {
+  {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_4lxml_5etree_21_ReadOnlyElementProxy_1get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_21_ReadOnlyElementProxy_get)},
+  {__Pyx_NAMESTR("keys"), (PyCFunction)__pyx_pw_4lxml_5etree_21_ReadOnlyElementProxy_3keys, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_21_ReadOnlyElementProxy_2keys)},
+  {__Pyx_NAMESTR("values"), (PyCFunction)__pyx_pw_4lxml_5etree_21_ReadOnlyElementProxy_5values, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_21_ReadOnlyElementProxy_4values)},
+  {__Pyx_NAMESTR("items"), (PyCFunction)__pyx_pw_4lxml_5etree_21_ReadOnlyElementProxy_7items, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_21_ReadOnlyElementProxy_6items)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__XSLTQuotedStringParam = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ReadOnlyElementProxy[] = {
+  {(char *)"attrib", __pyx_getprop_4lxml_5etree_21_ReadOnlyElementProxy_attrib, 0, 0, 0},
+  {(char *)"prefix", __pyx_getprop_4lxml_5etree_21_ReadOnlyElementProxy_prefix, 0, __Pyx_DOCSTR(__pyx_k_Namespace_prefix_or_None), 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyElementProxy = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._XSLTQuotedStringParam"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ReadOnlyElementProxy"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__XSLTQuotedStringParam, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -176390,7 +177013,11 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTQuotedStringParam = {
   #else
   0, /*reserved*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_3__repr__, /*tp_repr*/
+  #else
   0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -176400,17 +177027,21 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTQuotedStringParam = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
-  __Pyx_DOCSTR("A wrapper class for literal XSLT string parameters that require\n    quote escaping.\n    "), /*tp_doc*/
-  0, /*tp_traverse*/
-  0, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("The main read-only Element proxy class (for internal use only!)."), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ReadOnlyProxy, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ReadOnlyProxy, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_15__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__XSLTQuotedStringParam, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__ReadOnlyElementProxy, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__ReadOnlyElementProxy, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -176418,7 +177049,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTQuotedStringParam = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__XSLTQuotedStringParam, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ReadOnlyElementProxy, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -176434,10 +177065,8 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTQuotedStringParam = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__BaseContext __pyx_vtable_4lxml_5etree__BaseContext;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__BaseContext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__BaseContext *p;
+static PyObject *__pyx_tp_new_4lxml_5etree__OpaqueNodeWrapper(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
   PyObject *o;
   if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
     o = (*t->tp_alloc)(t, 0);
@@ -176445,126 +177074,28 @@ static PyObject *__pyx_tp_new_4lxml_5etree__BaseContext(PyTypeObject *t, CYTHON_
     o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__BaseContext *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__BaseContext;
-  p->_doc = ((struct LxmlDocument *)Py_None); Py_INCREF(Py_None);
-  p->_extensions = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_namespaces = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_global_namespaces = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_utf_refs = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_function_cache = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_eval_context_dict = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_temp_refs = ((struct __pyx_obj_4lxml_5etree__TempStore *)Py_None); Py_INCREF(Py_None);
-  p->_temp_documents = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_exc = ((struct __pyx_obj_4lxml_5etree__ExceptionContext *)Py_None); Py_INCREF(Py_None);
-  p->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_12_BaseContext_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__BaseContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__BaseContext *p = (struct __pyx_obj_4lxml_5etree__BaseContext *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__OpaqueNodeWrapper(PyObject *o) {
   #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_doc);
-  Py_CLEAR(p->_extensions);
-  Py_CLEAR(p->_namespaces);
-  Py_CLEAR(p->_global_namespaces);
-  Py_CLEAR(p->_utf_refs);
-  Py_CLEAR(p->_function_cache);
-  Py_CLEAR(p->_eval_context_dict);
-  Py_CLEAR(p->_temp_refs);
-  Py_CLEAR(p->_temp_documents);
-  Py_CLEAR(p->_exc);
-  Py_CLEAR(p->_error_log);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__BaseContext(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__BaseContext *p = (struct __pyx_obj_4lxml_5etree__BaseContext *)o;
-  if (p->_doc) {
-    e = (*v)(((PyObject*)p->_doc), a); if (e) return e;
-  }
-  if (p->_extensions) {
-    e = (*v)(p->_extensions, a); if (e) return e;
-  }
-  if (p->_namespaces) {
-    e = (*v)(p->_namespaces, a); if (e) return e;
-  }
-  if (p->_global_namespaces) {
-    e = (*v)(p->_global_namespaces, a); if (e) return e;
-  }
-  if (p->_utf_refs) {
-    e = (*v)(p->_utf_refs, a); if (e) return e;
-  }
-  if (p->_function_cache) {
-    e = (*v)(p->_function_cache, a); if (e) return e;
-  }
-  if (p->_eval_context_dict) {
-    e = (*v)(p->_eval_context_dict, a); if (e) return e;
-  }
-  if (p->_temp_refs) {
-    e = (*v)(((PyObject*)p->_temp_refs), a); if (e) return e;
-  }
-  if (p->_temp_documents) {
-    e = (*v)(p->_temp_documents, a); if (e) return e;
-  }
-  if (p->_exc) {
-    e = (*v)(((PyObject*)p->_exc), a); if (e) return e;
-  }
-  if (p->_error_log) {
-    e = (*v)(((PyObject*)p->_error_log), a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__BaseContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__BaseContext *p = (struct __pyx_obj_4lxml_5etree__BaseContext *)o;
-  Py_CLEAR(p->_doc);
-  Py_CLEAR(p->_extensions);
-  Py_CLEAR(p->_namespaces);
-  Py_CLEAR(p->_global_namespaces);
-  Py_CLEAR(p->_utf_refs);
-  Py_CLEAR(p->_function_cache);
-  Py_CLEAR(p->_eval_context_dict);
-  Py_CLEAR(p->_temp_refs);
-  Py_CLEAR(p->_temp_documents);
-  Py_CLEAR(p->_exc);
-  Py_CLEAR(p->_error_log);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_12_BaseContext_context_node(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_12_BaseContext_12context_node_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_12_BaseContext_eval_context(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_12_BaseContext_12eval_context_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__BaseContext[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree__OpaqueNodeWrapper[] = {
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__BaseContext[] = {
-  {(char *)"context_node", __pyx_getprop_4lxml_5etree_12_BaseContext_context_node, 0, 0, 0},
-  {(char *)"eval_context", __pyx_getprop_4lxml_5etree_12_BaseContext_eval_context, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__BaseContext = {
+static PyTypeObject __pyx_type_4lxml_5etree__OpaqueNodeWrapper = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._BaseContext"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__BaseContext), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._OpaqueNodeWrapper"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__OpaqueNodeWrapper), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__BaseContext, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__OpaqueNodeWrapper, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -176583,25 +177114,25 @@ static PyTypeObject __pyx_type_4lxml_5etree__BaseContext = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__BaseContext, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__BaseContext, /*tp_clear*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__BaseContext, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__OpaqueNodeWrapper, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__BaseContext, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_12_BaseContext_3__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_18_OpaqueNodeWrapper_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__BaseContext, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__OpaqueNodeWrapper, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -176617,62 +177148,29 @@ static PyTypeObject __pyx_type_4lxml_5etree__BaseContext = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__XSLTContext __pyx_vtable_4lxml_5etree__XSLTContext;
+static struct __pyx_vtabstruct_4lxml_5etree__OpaqueDocumentWrapper __pyx_vtable_4lxml_5etree__OpaqueDocumentWrapper;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__XSLTContext(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__XSLTContext *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__BaseContext(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__OpaqueDocumentWrapper(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__OpaqueNodeWrapper(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__XSLTContext *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseContext*)__pyx_vtabptr_4lxml_5etree__XSLTContext;
-  p->_extension_element_proxy = ((struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy *)Py_None); Py_INCREF(Py_None);
-  p->_extension_elements = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_12_XSLTContext_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  p = ((struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__OpaqueDocumentWrapper;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__XSLTContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__XSLTContext *p = (struct __pyx_obj_4lxml_5etree__XSLTContext *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_extension_element_proxy);
-  Py_CLEAR(p->_extension_elements);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__BaseContext(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__XSLTContext(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__XSLTContext *p = (struct __pyx_obj_4lxml_5etree__XSLTContext *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__BaseContext(o, v, a); if (e) return e;
-  if (p->_extension_element_proxy) {
-    e = (*v)(((PyObject*)p->_extension_element_proxy), a); if (e) return e;
-  }
-  if (p->_extension_elements) {
-    e = (*v)(p->_extension_elements, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__XSLTContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__XSLTContext *p = (struct __pyx_obj_4lxml_5etree__XSLTContext *)o;
-  __pyx_tp_clear_4lxml_5etree__BaseContext(o);
-  Py_CLEAR(p->_extension_element_proxy);
-  Py_CLEAR(p->_extension_elements);
-  return 0;
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__XSLTContext[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree__OpaqueDocumentWrapper[] = {
+  {__Pyx_NAMESTR("append"), (PyCFunction)__pyx_pw_4lxml_5etree_22_OpaqueDocumentWrapper_1append, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_OpaqueDocumentWrapper_append)},
+  {__Pyx_NAMESTR("extend"), (PyCFunction)__pyx_pw_4lxml_5etree_22_OpaqueDocumentWrapper_3extend, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_OpaqueDocumentWrapper_2extend)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__XSLTContext = {
+static PyTypeObject __pyx_type_4lxml_5etree__OpaqueDocumentWrapper = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._XSLTContext"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__XSLTContext), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._OpaqueDocumentWrapper"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__XSLTContext, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__OpaqueNodeWrapper, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -176691,15 +177189,15 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTContext = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__XSLTContext, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__XSLTContext, /*tp_clear*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__XSLTContext, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__OpaqueDocumentWrapper, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -176707,9 +177205,13 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTContext = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_12_XSLTContext_3__init__, /*tp_init*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_18_OpaqueNodeWrapper_1__init__, /*tp_init*/
+  #else
+  0, /*tp_init*/
+  #endif
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__XSLTContext, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__OpaqueDocumentWrapper, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -176725,89 +177227,42 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTContext = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyProxy __pyx_vtable_4lxml_5etree__ModifyContentOnlyProxy;
 
-static struct __pyx_obj_4lxml_5etree__DTDElementDecl *__pyx_freelist_4lxml_5etree__DTDElementDecl[8];
-static int __pyx_freecount_4lxml_5etree__DTDElementDecl = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree__DTDElementDecl(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__DTDElementDecl *p;
-  PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree__DTDElementDecl > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDElementDecl)))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDElementDecl[--__pyx_freecount_4lxml_5etree__DTDElementDecl];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__DTDElementDecl));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
-  } else {
-    o = (*t->tp_alloc)(t, 0);
-    if (unlikely(!o)) return 0;
-  }
-  p = ((struct __pyx_obj_4lxml_5etree__DTDElementDecl *)o);
-  p->_dtd = ((struct __pyx_obj_4lxml_5etree_DTD *)Py_None); Py_INCREF(Py_None);
+static PyObject *__pyx_tp_new_4lxml_5etree__ModifyContentOnlyProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ReadOnlyProxy(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyProxy;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__DTDElementDecl(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__DTDElementDecl *p = (struct __pyx_obj_4lxml_5etree__DTDElementDecl *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_dtd);
-  if ((__pyx_freecount_4lxml_5etree__DTDElementDecl < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDElementDecl))) {
-    __pyx_freelist_4lxml_5etree__DTDElementDecl[__pyx_freecount_4lxml_5etree__DTDElementDecl++] = ((struct __pyx_obj_4lxml_5etree__DTDElementDecl *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
-  }
+static PyObject *__pyx_getprop_4lxml_5etree_23_ModifyContentOnlyProxy_text(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_23_ModifyContentOnlyProxy_4text_1__get__(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__DTDElementDecl(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__DTDElementDecl *p = (struct __pyx_obj_4lxml_5etree__DTDElementDecl *)o;
-  if (p->_dtd) {
-    e = (*v)(((PyObject*)p->_dtd), a); if (e) return e;
+static int __pyx_setprop_4lxml_5etree_23_ModifyContentOnlyProxy_text(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_23_ModifyContentOnlyProxy_4text_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
   }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__DTDElementDecl(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__DTDElementDecl *p = (struct __pyx_obj_4lxml_5etree__DTDElementDecl *)o;
-  Py_CLEAR(p->_dtd);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_15_DTDElementDecl_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_15_DTDElementDecl_4name_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_15_DTDElementDecl_prefix(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_15_DTDElementDecl_6prefix_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_15_DTDElementDecl_type(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_15_DTDElementDecl_4type_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_15_DTDElementDecl_content(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_15_DTDElementDecl_7content_1__get__(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__DTDElementDecl[] = {
-  {__Pyx_NAMESTR("iterattributes"), (PyCFunction)__pyx_pw_4lxml_5etree_15_DTDElementDecl_3iterattributes, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("attributes"), (PyCFunction)__pyx_pw_4lxml_5etree_15_DTDElementDecl_6attributes, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__DTDElementDecl[] = {
-  {(char *)"name", __pyx_getprop_4lxml_5etree_15_DTDElementDecl_name, 0, 0, 0},
-  {(char *)"prefix", __pyx_getprop_4lxml_5etree_15_DTDElementDecl_prefix, 0, 0, 0},
-  {(char *)"type", __pyx_getprop_4lxml_5etree_15_DTDElementDecl_type, 0, 0, 0},
-  {(char *)"content", __pyx_getprop_4lxml_5etree_15_DTDElementDecl_content, 0, 0, 0},
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ModifyContentOnlyProxy[] = {
+  {(char *)"text", __pyx_getprop_4lxml_5etree_23_ModifyContentOnlyProxy_text, __pyx_setprop_4lxml_5etree_23_ModifyContentOnlyProxy_text, 0, 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__DTDElementDecl = {
+static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyProxy = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._DTDElementDecl"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__DTDElementDecl), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ModifyContentOnlyProxy"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__DTDElementDecl, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -176816,7 +177271,11 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDElementDecl = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_15_DTDElementDecl_1__repr__, /*tp_repr*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_3__repr__, /*tp_repr*/
+  #else
+  0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -176826,17 +177285,21 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDElementDecl = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__DTDElementDecl, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__DTDElementDecl, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("A read-only proxy that allows changing the text content.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ReadOnlyProxy, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ReadOnlyProxy, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_15__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__DTDElementDecl, /*tp_methods*/
+  0, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__DTDElementDecl, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__ModifyContentOnlyProxy, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -176844,7 +177307,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDElementDecl = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__DTDElementDecl, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ModifyContentOnlyProxy, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -176860,44 +177323,42 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDElementDecl = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_XSLTExtension __pyx_vtable_4lxml_5etree_XSLTExtension;
+static struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyPIProxy __pyx_vtable_4lxml_5etree__ModifyContentOnlyPIProxy;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_XSLTExtension(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_XSLTExtension *p;
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree__ModifyContentOnlyPIProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ModifyContentOnlyPIProxy *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ModifyContentOnlyProxy(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_XSLTExtension *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_XSLTExtension;
+  p = ((struct __pyx_obj_4lxml_5etree__ModifyContentOnlyPIProxy *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyPIProxy;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_XSLTExtension(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
+static PyObject *__pyx_getprop_4lxml_5etree_25_ModifyContentOnlyPIProxy_target(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_25_ModifyContentOnlyPIProxy_6target_1__get__(o);
+}
+
+static int __pyx_setprop_4lxml_5etree_25_ModifyContentOnlyPIProxy_target(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_25_ModifyContentOnlyPIProxy_6target_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
   }
-  #endif
-  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_XSLTExtension[] = {
-  {__Pyx_NAMESTR("execute"), (PyCFunction)__pyx_pw_4lxml_5etree_13XSLTExtension_1execute, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13XSLTExtension_execute)},
-  {__Pyx_NAMESTR("apply_templates"), (PyCFunction)__pyx_pw_4lxml_5etree_13XSLTExtension_3apply_templates, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13XSLTExtension_2apply_templates)},
-  {__Pyx_NAMESTR("process_children"), (PyCFunction)__pyx_pw_4lxml_5etree_13XSLTExtension_5process_children, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13XSLTExtension_4process_children)},
-  {0, 0, 0, 0}
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ModifyContentOnlyPIProxy[] = {
+  {(char *)"target", __pyx_getprop_4lxml_5etree_25_ModifyContentOnlyPIProxy_target, __pyx_setprop_4lxml_5etree_25_ModifyContentOnlyPIProxy_target, 0, 0},
+  {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_XSLTExtension = {
+static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.XSLTExtension"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_XSLTExtension), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ModifyContentOnlyPIProxy"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ModifyContentOnlyPIProxy), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_XSLTExtension, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -176906,7 +177367,11 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLTExtension = {
   #else
   0, /*reserved*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_3__repr__, /*tp_repr*/
+  #else
   0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -176916,17 +177381,21 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLTExtension = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
-  __Pyx_DOCSTR("Base class of an XSLT extension element.\n    "), /*tp_doc*/
-  0, /*tp_traverse*/
-  0, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("A read-only proxy that allows changing the text/target content of a\n    processing instruction.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ReadOnlyProxy, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ReadOnlyProxy, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_15__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_XSLTExtension, /*tp_methods*/
+  0, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__ModifyContentOnlyPIProxy, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -176934,7 +177403,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLTExtension = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_XSLTExtension, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ModifyContentOnlyPIProxy, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -176950,56 +177419,42 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLTExtension = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext __pyx_vtable_4lxml_5etree__ExceptionContext;
+static struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyEntityProxy __pyx_vtable_4lxml_5etree__ModifyContentOnlyEntityProxy;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ExceptionContext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ExceptionContext *p;
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree__ModifyContentOnlyEntityProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ModifyContentOnlyEntityProxy *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ModifyContentOnlyProxy(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ExceptionContext *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ExceptionContext;
-  p->_exc_info = Py_None; Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree__ModifyContentOnlyEntityProxy *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyEntityProxy;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ExceptionContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ExceptionContext *p = (struct __pyx_obj_4lxml_5etree__ExceptionContext *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_exc_info);
-  (*Py_TYPE(o)->tp_free)(o);
+static PyObject *__pyx_getprop_4lxml_5etree_29_ModifyContentOnlyEntityProxy_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_29_ModifyContentOnlyEntityProxy_4name_1__get__(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__ExceptionContext(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__ExceptionContext *p = (struct __pyx_obj_4lxml_5etree__ExceptionContext *)o;
-  if (p->_exc_info) {
-    e = (*v)(p->_exc_info, a); if (e) return e;
+static int __pyx_setprop_4lxml_5etree_29_ModifyContentOnlyEntityProxy_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_29_ModifyContentOnlyEntityProxy_4name_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
   }
-  return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__ExceptionContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ExceptionContext *p = (struct __pyx_obj_4lxml_5etree__ExceptionContext *)o;
-  Py_CLEAR(p->_exc_info);
-  return 0;
-}
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ModifyContentOnlyEntityProxy[] = {
+  {(char *)"name", __pyx_getprop_4lxml_5etree_29_ModifyContentOnlyEntityProxy_name, __pyx_setprop_4lxml_5etree_29_ModifyContentOnlyEntityProxy_name, 0, 0},
+  {0, 0, 0, 0, 0}
+};
 
-static PyTypeObject __pyx_type_4lxml_5etree__ExceptionContext = {
+static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ExceptionContext"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ExceptionContext), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ModifyContentOnlyEntityProxy"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ModifyContentOnlyEntityProxy), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ExceptionContext, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -177008,7 +177463,11 @@ static PyTypeObject __pyx_type_4lxml_5etree__ExceptionContext = {
   #else
   0, /*reserved*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_3__repr__, /*tp_repr*/
+  #else
   0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -177018,17 +177477,21 @@ static PyTypeObject __pyx_type_4lxml_5etree__ExceptionContext = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ExceptionContext, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ExceptionContext, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("A read-only proxy for entity references (for internal use only!)"), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ReadOnlyProxy, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ReadOnlyProxy, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_15__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
   0, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__ModifyContentOnlyEntityProxy, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -177036,7 +177499,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ExceptionContext = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ExceptionContext, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ModifyContentOnlyEntityProxy, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -177052,60 +177515,125 @@ static PyTypeObject __pyx_type_4lxml_5etree__ExceptionContext = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ResolverContext __pyx_vtable_4lxml_5etree__ResolverContext;
+static struct __pyx_vtabstruct_4lxml_5etree__AppendOnlyElementProxy __pyx_vtable_4lxml_5etree__AppendOnlyElementProxy;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ResolverContext(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ResolverContext *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ExceptionContext(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__AppendOnlyElementProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ReadOnlyElementProxy(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ResolverContext *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext*)__pyx_vtabptr_4lxml_5etree__ResolverContext;
-  p->_resolvers = ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)Py_None); Py_INCREF(Py_None);
-  p->_storage = ((struct __pyx_obj_4lxml_5etree__TempStore *)Py_None); Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__AppendOnlyElementProxy;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ResolverContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ResolverContext *p = (struct __pyx_obj_4lxml_5etree__ResolverContext *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_resolvers);
-  Py_CLEAR(p->_storage);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__ExceptionContext(o);
+static PyObject *__pyx_getprop_4lxml_5etree_23_AppendOnlyElementProxy_text(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_23_AppendOnlyElementProxy_4text_1__get__(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__ResolverContext(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__ResolverContext *p = (struct __pyx_obj_4lxml_5etree__ResolverContext *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__ExceptionContext(o, v, a); if (e) return e;
-  if (p->_resolvers) {
-    e = (*v)(((PyObject*)p->_resolvers), a); if (e) return e;
+static int __pyx_setprop_4lxml_5etree_23_AppendOnlyElementProxy_text(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_23_AppendOnlyElementProxy_4text_3__set__(o, v);
   }
-  if (p->_storage) {
-    e = (*v)(((PyObject*)p->_storage), a); if (e) return e;
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
   }
-  return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__ResolverContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ResolverContext *p = (struct __pyx_obj_4lxml_5etree__ResolverContext *)o;
-  __pyx_tp_clear_4lxml_5etree__ExceptionContext(o);
-  Py_CLEAR(p->_resolvers);
-  Py_CLEAR(p->_storage);
-  return 0;
+static PyMethodDef __pyx_methods_4lxml_5etree__AppendOnlyElementProxy[] = {
+  {__Pyx_NAMESTR("append"), (PyCFunction)__pyx_pw_4lxml_5etree_23_AppendOnlyElementProxy_1append, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_23_AppendOnlyElementProxy_append)},
+  {__Pyx_NAMESTR("extend"), (PyCFunction)__pyx_pw_4lxml_5etree_23_AppendOnlyElementProxy_3extend, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_23_AppendOnlyElementProxy_2extend)},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__AppendOnlyElementProxy[] = {
+  {(char *)"text", __pyx_getprop_4lxml_5etree_23_AppendOnlyElementProxy_text, __pyx_setprop_4lxml_5etree_23_AppendOnlyElementProxy_text, __Pyx_DOCSTR(__pyx_k_Text_before_the_first_subelement_2), 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__AppendOnlyElementProxy = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("lxml.etree._AppendOnlyElementProxy"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_3__repr__, /*tp_repr*/
+  #else
+  0, /*tp_repr*/
+  #endif
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("A read-only element that allows adding children and changing the\n    text content (i.e. everything that adds to the subtree).\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ReadOnlyProxy, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ReadOnlyProxy, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_15__iter__, /*tp_iter*/
+  #else
+  0, /*tp_iter*/
+  #endif
+  0, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree__AppendOnlyElementProxy, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_4lxml_5etree__AppendOnlyElementProxy, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_4lxml_5etree__AppendOnlyElementProxy, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementBase(PyTypeObject *t, PyObject *a, PyObject *k) {
+  PyObject *o = __pyx_tp_new_4lxml_5etree__Element(t, a, k);
+  if (unlikely(!o)) return 0;
+  return o;
 }
 
-static PyTypeObject __pyx_type_4lxml_5etree__ResolverContext = {
+static PyMethodDef __pyx_methods_4lxml_5etree_ElementBase[] = {
+  {0, 0, 0, 0}
+};
+
+DL_EXPORT(PyTypeObject) LxmlElementBaseType = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ResolverContext"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ResolverContext), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.ElementBase"), /*tp_name*/
+  sizeof(struct LxmlElementBase), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ResolverContext, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -177114,7 +177642,11 @@ static PyTypeObject __pyx_type_4lxml_5etree__ResolverContext = {
   #else
   0, /*reserved*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_8_Element_31__repr__, /*tp_repr*/
+  #else
   0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -177125,14 +177657,18 @@ static PyTypeObject __pyx_type_4lxml_5etree__ResolverContext = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ResolverContext, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ResolverContext, /*tp_clear*/
+  __Pyx_DOCSTR("ElementBase(*children, attrib=None, nsmap=None, **_extra)\n\n    The public Element class.  All custom Element classes must inherit\n    from this one.  To create an Element, use the `Element()` factory.\n\n    BIG FAT WARNING: Subclasses *must not* override __init__ or\n    __new__ as it is absolutely undefined when these objects will be\n    created or destroyed.  All persistent state of Elements must be\n    stored in the underlying XML.  If you really need to initialize\n    the object after creation, you can implement an ``_init(self)``\n    method that will be called directly after object creation.\n\n    Subclasses of this class can be instantiated to create a new\n    Element.  By default, the tag name will be the class name and the\n    namespace will be empty.  You can modify this with the following\n    class attributes:\n\n    * TAG - the tag name, possibly containing a namespace in Clark\n      notation\n\n    * NAMESPACE - the default namespace URI, unless provided as part\n      of the TAG attribute.\n\n    * HTML - flag if the class is an HTML tag, as opposed to an XML\n      tag.  This only applies to un-namespaced tags and defaults to\n      false (i.e. XML).\n\n    * PARSER - the parser that provides the configuration for the\n      newly created document.  Providing an HTML parser here will\n      default to creating an HTML element.\n\n    In user code, the latter three are commonly inherited in class\n    hierarchies that implement a common namespace.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
+  0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  0, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_ElementBase, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -177140,9 +177676,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__ResolverContext = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_11ElementBase_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ResolverContext, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_ElementBase, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -177158,81 +177694,27 @@ static PyTypeObject __pyx_type_4lxml_5etree__ResolverContext = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ParserContext __pyx_vtable_4lxml_5etree__ParserContext;
+static struct __pyx_vtabstruct_4lxml_5etree_CommentBase __pyx_vtable_4lxml_5etree_CommentBase;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ParserContext(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ParserContext *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ResolverContext(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_CommentBase(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_CommentBase *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__Comment(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ParserContext *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext*)__pyx_vtabptr_4lxml_5etree__ParserContext;
-  p->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
-  p->_validator = ((struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *)Py_None); Py_INCREF(Py_None);
-  p->_doc = ((struct LxmlDocument *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_14_ParserContext_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  p = ((struct __pyx_obj_4lxml_5etree_CommentBase *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree_CommentBase;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ParserContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ParserContext *p = (struct __pyx_obj_4lxml_5etree__ParserContext *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_14_ParserContext_3__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
-  }
-  Py_CLEAR(p->_error_log);
-  Py_CLEAR(p->_validator);
-  Py_CLEAR(p->_doc);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__ResolverContext(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__ParserContext(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__ParserContext *p = (struct __pyx_obj_4lxml_5etree__ParserContext *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__ResolverContext(o, v, a); if (e) return e;
-  if (p->_error_log) {
-    e = (*v)(((PyObject*)p->_error_log), a); if (e) return e;
-  }
-  if (p->_validator) {
-    e = (*v)(((PyObject*)p->_validator), a); if (e) return e;
-  }
-  if (p->_doc) {
-    e = (*v)(((PyObject*)p->_doc), a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__ParserContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ParserContext *p = (struct __pyx_obj_4lxml_5etree__ParserContext *)o;
-  __pyx_tp_clear_4lxml_5etree__ResolverContext(o);
-  Py_CLEAR(p->_error_log);
-  Py_CLEAR(p->_validator);
-  Py_CLEAR(p->_doc);
-  return 0;
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__ParserContext[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_CommentBase[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ParserContext = {
+static PyTypeObject __pyx_type_4lxml_5etree_CommentBase = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ParserContext"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ParserContext), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.CommentBase"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_CommentBase), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ParserContext, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -177241,7 +177723,11 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParserContext = {
   #else
   0, /*reserved*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_8_Comment_1__repr__, /*tp_repr*/
+  #else
   0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -177252,14 +177738,18 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParserContext = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ParserContext, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ParserContext, /*tp_clear*/
+  __Pyx_DOCSTR("All custom Comment classes must inherit from this one.\n\n    To create an XML Comment instance, use the ``Comment()`` factory.\n\n    Subclasses *must not* override __init__ or __new__ as it is\n    absolutely undefined when these objects will be created or\n    destroyed.  All persistent state of Comments must be stored in the\n    underlying XML.  If you really need to initialize the object after\n    creation, you can implement an ``_init(self)`` method that will be\n    called after object creation.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
+  0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ParserContext, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_CommentBase, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -177267,9 +177757,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParserContext = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_11CommentBase_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ParserContext, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_CommentBase, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -177285,97 +177775,27 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParserContext = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__SaxParserContext __pyx_vtable_4lxml_5etree__SaxParserContext;
+static struct __pyx_vtabstruct_4lxml_5etree_PIBase __pyx_vtable_4lxml_5etree_PIBase;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__SaxParserContext(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__SaxParserContext *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ParserContext(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_PIBase(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_PIBase *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ProcessingInstruction(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__SaxParserContext *)o);
-  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext*)__pyx_vtabptr_4lxml_5etree__SaxParserContext;
-  p->_target = ((struct __pyx_obj_4lxml_5etree__SaxParserTarget *)Py_None); Py_INCREF(Py_None);
-  p->_parser = ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None); Py_INCREF(Py_None);
-  p->_ns_stack = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_node_stack = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->events_iterator = ((struct __pyx_obj_4lxml_5etree__ParseEventsIterator *)Py_None); Py_INCREF(Py_None);
-  p->_root = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
-  p->_matcher = ((struct __pyx_obj_4lxml_5etree__MultiTagMatcher *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_17_SaxParserContext_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  p = ((struct __pyx_obj_4lxml_5etree_PIBase *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree_PIBase;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__SaxParserContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__SaxParserContext *p = (struct __pyx_obj_4lxml_5etree__SaxParserContext *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_target);
-  Py_CLEAR(p->_parser);
-  Py_CLEAR(p->_ns_stack);
-  Py_CLEAR(p->_node_stack);
-  Py_CLEAR(p->events_iterator);
-  Py_CLEAR(p->_root);
-  Py_CLEAR(p->_matcher);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__ParserContext(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__SaxParserContext(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__SaxParserContext *p = (struct __pyx_obj_4lxml_5etree__SaxParserContext *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__ParserContext(o, v, a); if (e) return e;
-  if (p->_target) {
-    e = (*v)(((PyObject*)p->_target), a); if (e) return e;
-  }
-  if (p->_parser) {
-    e = (*v)(((PyObject*)p->_parser), a); if (e) return e;
-  }
-  if (p->_ns_stack) {
-    e = (*v)(p->_ns_stack, a); if (e) return e;
-  }
-  if (p->_node_stack) {
-    e = (*v)(p->_node_stack, a); if (e) return e;
-  }
-  if (p->events_iterator) {
-    e = (*v)(((PyObject*)p->events_iterator), a); if (e) return e;
-  }
-  if (p->_root) {
-    e = (*v)(((PyObject*)p->_root), a); if (e) return e;
-  }
-  if (p->_matcher) {
-    e = (*v)(((PyObject*)p->_matcher), a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__SaxParserContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__SaxParserContext *p = (struct __pyx_obj_4lxml_5etree__SaxParserContext *)o;
-  __pyx_tp_clear_4lxml_5etree__ParserContext(o);
-  Py_CLEAR(p->_target);
-  Py_CLEAR(p->_parser);
-  Py_CLEAR(p->_ns_stack);
-  Py_CLEAR(p->_node_stack);
-  Py_CLEAR(p->events_iterator);
-  Py_CLEAR(p->_root);
-  Py_CLEAR(p->_matcher);
-  return 0;
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__SaxParserContext[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_PIBase[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__SaxParserContext = {
+static PyTypeObject __pyx_type_4lxml_5etree_PIBase = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._SaxParserContext"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__SaxParserContext), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.PIBase"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_PIBase), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__SaxParserContext, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -177384,7 +177804,11 @@ static PyTypeObject __pyx_type_4lxml_5etree__SaxParserContext = {
   #else
   0, /*reserved*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_22_ProcessingInstruction_1__repr__, /*tp_repr*/
+  #else
   0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -177395,14 +177819,18 @@ static PyTypeObject __pyx_type_4lxml_5etree__SaxParserContext = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("This class maps SAX2 events to parser target events.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__SaxParserContext, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__SaxParserContext, /*tp_clear*/
+  __Pyx_DOCSTR("All custom Processing Instruction classes must inherit from this one.\n\n    To create an XML ProcessingInstruction instance, use the ``PI()``\n    factory.\n\n    Subclasses *must not* override __init__ or __new__ as it is\n    absolutely undefined when these objects will be created or\n    destroyed.  All persistent state of PIs must be stored in the\n    underlying XML.  If you really need to initialize the object after\n    creation, you can implement an ``_init(self)`` method that will be\n    called after object creation.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
+  0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__SaxParserContext, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_PIBase, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -177410,9 +177838,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__SaxParserContext = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_6PIBase_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__SaxParserContext, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_PIBase, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -177428,49 +177856,27 @@ static PyTypeObject __pyx_type_4lxml_5etree__SaxParserContext = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__TargetParserContext __pyx_vtable_4lxml_5etree__TargetParserContext;
+static struct __pyx_vtabstruct_4lxml_5etree_EntityBase __pyx_vtable_4lxml_5etree_EntityBase;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__TargetParserContext(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__TargetParserContext *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__SaxParserContext(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_EntityBase(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_EntityBase *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__Entity(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__TargetParserContext *)o);
-  p->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext*)__pyx_vtabptr_4lxml_5etree__TargetParserContext;
-  p->_python_target = Py_None; Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree_EntityBase *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree_EntityBase;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__TargetParserContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__TargetParserContext *p = (struct __pyx_obj_4lxml_5etree__TargetParserContext *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_python_target);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__SaxParserContext(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__TargetParserContext(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__TargetParserContext *p = (struct __pyx_obj_4lxml_5etree__TargetParserContext *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__SaxParserContext(o, v, a); if (e) return e;
-  if (p->_python_target) {
-    e = (*v)(p->_python_target, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__TargetParserContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__TargetParserContext *p = (struct __pyx_obj_4lxml_5etree__TargetParserContext *)o;
-  __pyx_tp_clear_4lxml_5etree__SaxParserContext(o);
-  Py_CLEAR(p->_python_target);
-  return 0;
-}
+static PyMethodDef __pyx_methods_4lxml_5etree_EntityBase[] = {
+  {0, 0, 0, 0}
+};
 
-static PyTypeObject __pyx_type_4lxml_5etree__TargetParserContext = {
+static PyTypeObject __pyx_type_4lxml_5etree_EntityBase = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._TargetParserContext"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__TargetParserContext), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.EntityBase"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_EntityBase), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__TargetParserContext, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -177479,7 +177885,11 @@ static PyTypeObject __pyx_type_4lxml_5etree__TargetParserContext = {
   #else
   0, /*reserved*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_7_Entity_1__repr__, /*tp_repr*/
+  #else
   0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -177489,15 +177899,19 @@ static PyTypeObject __pyx_type_4lxml_5etree__TargetParserContext = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("This class maps SAX2 events to the ET parser target interface.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__TargetParserContext, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__TargetParserContext, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("All custom Entity classes must inherit from this one.\n\n    To create an XML Entity instance, use the ``Entity()`` factory.\n\n    Subclasses *must not* override __init__ or __new__ as it is\n    absolutely undefined when these objects will be created or\n    destroyed.  All persistent state of Entities must be stored in the\n    underlying XML.  If you really need to initialize the object after\n    creation, you can implement an ``_init(self)`` method that will be\n    called after object creation.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
+  0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  0, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_EntityBase, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -177505,9 +177919,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__TargetParserContext = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_10EntityBase_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__TargetParserContext, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_EntityBase, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -177524,7 +177938,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__TargetParserContext = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_4lxml_5etree_Resolver(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementClassLookup(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
   PyObject *o;
   if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
     o = (*t->tp_alloc)(t, 0);
@@ -177532,10 +177946,13 @@ static PyObject *__pyx_tp_new_4lxml_5etree_Resolver(PyTypeObject *t, CYTHON_UNUS
     o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
   if (unlikely(!o)) return 0;
+  if (unlikely(__pyx_pw_4lxml_5etree_18ElementClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_Resolver(PyObject *o) {
+static void __pyx_tp_dealloc_4lxml_5etree_ElementClassLookup(PyObject *o) {
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
@@ -177544,21 +177961,16 @@ static void __pyx_tp_dealloc_4lxml_5etree_Resolver(PyObject *o) {
   (*Py_TYPE(o)->tp_free)(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_Resolver[] = {
-  {__Pyx_NAMESTR("resolve"), (PyCFunction)__pyx_pw_4lxml_5etree_8Resolver_1resolve, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_8Resolver_resolve)},
-  {__Pyx_NAMESTR("resolve_empty"), (PyCFunction)__pyx_pw_4lxml_5etree_8Resolver_3resolve_empty, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_8Resolver_2resolve_empty)},
-  {__Pyx_NAMESTR("resolve_string"), (PyCFunction)__pyx_pw_4lxml_5etree_8Resolver_5resolve_string, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_8Resolver_4resolve_string)},
-  {__Pyx_NAMESTR("resolve_filename"), (PyCFunction)__pyx_pw_4lxml_5etree_8Resolver_7resolve_filename, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_8Resolver_6resolve_filename)},
-  {__Pyx_NAMESTR("resolve_file"), (PyCFunction)__pyx_pw_4lxml_5etree_8Resolver_9resolve_file, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_8Resolver_8resolve_file)},
+static PyMethodDef __pyx_methods_4lxml_5etree_ElementClassLookup[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_Resolver = {
+DL_EXPORT(PyTypeObject) LxmlElementClassLookupType = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.Resolver"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_Resolver), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.ElementClassLookup"), /*tp_name*/
+  sizeof(struct LxmlElementClassLookup), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_Resolver, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_ElementClassLookup, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -177578,14 +177990,14 @@ static PyTypeObject __pyx_type_4lxml_5etree_Resolver = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
-  __Pyx_DOCSTR("This is the base class of all resolvers."), /*tp_doc*/
+  __Pyx_DOCSTR("ElementClassLookup(self)\n    Superclass of Element class lookups.\n    "), /*tp_doc*/
   0, /*tp_traverse*/
   0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_Resolver, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_ElementClassLookup, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -177595,7 +178007,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_Resolver = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_Resolver, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_ElementClassLookup, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -177611,53 +178023,74 @@ static PyTypeObject __pyx_type_4lxml_5etree_Resolver = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__XPathContext __pyx_vtable_4lxml_5etree__XPathContext;
+static struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup __pyx_vtable_4lxml_5etree_FallbackElementClassLookup;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__XPathContext(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__XPathContext *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__BaseContext(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct LxmlFallbackElementClassLookup *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree_ElementClassLookup(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__XPathContext *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseContext*)__pyx_vtabptr_4lxml_5etree__XPathContext;
-  p->_variables = Py_None; Py_INCREF(Py_None);
+  p = ((struct LxmlFallbackElementClassLookup *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
+  p->fallback = ((struct LxmlElementClassLookup *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_26FallbackElementClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__XPathContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__XPathContext *p = (struct __pyx_obj_4lxml_5etree__XPathContext *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup(PyObject *o) {
+  struct LxmlFallbackElementClassLookup *p = (struct LxmlFallbackElementClassLookup *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_variables);
+  Py_CLEAR(p->fallback);
+  #if CYTHON_COMPILING_IN_CPYTHON
+  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
+  #endif
   PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__BaseContext(o);
+  __pyx_tp_dealloc_4lxml_5etree_ElementClassLookup(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__XPathContext(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__XPathContext *p = (struct __pyx_obj_4lxml_5etree__XPathContext *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__BaseContext(o, v, a); if (e) return e;
-  if (p->_variables) {
-    e = (*v)(p->_variables, a); if (e) return e;
+  struct LxmlFallbackElementClassLookup *p = (struct LxmlFallbackElementClassLookup *)o;
+  e = ((likely(__pyx_ptype_4lxml_5etree_ElementClassLookup)) ? ((__pyx_ptype_4lxml_5etree_ElementClassLookup->tp_traverse) ? __pyx_ptype_4lxml_5etree_ElementClassLookup->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup)); if (e) return e;
+  if (p->fallback) {
+    e = (*v)(((PyObject*)p->fallback), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__XPathContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__XPathContext *p = (struct __pyx_obj_4lxml_5etree__XPathContext *)o;
-  __pyx_tp_clear_4lxml_5etree__BaseContext(o);
-  Py_CLEAR(p->_variables);
+static int __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup(PyObject *o) {
+  struct LxmlFallbackElementClassLookup *p = (struct LxmlFallbackElementClassLookup *)o;
+  if (likely(__pyx_ptype_4lxml_5etree_ElementClassLookup)) { if (__pyx_ptype_4lxml_5etree_ElementClassLookup->tp_clear) __pyx_ptype_4lxml_5etree_ElementClassLookup->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup);
+  Py_CLEAR(p->fallback);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__XPathContext[] = {
+static PyObject *__pyx_getprop_4lxml_5etree_26FallbackElementClassLookup_fallback(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_26FallbackElementClassLookup_8fallback_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_FallbackElementClassLookup[] = {
+  {__Pyx_NAMESTR("set_fallback"), (PyCFunction)__pyx_pw_4lxml_5etree_26FallbackElementClassLookup_5set_fallback, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_26FallbackElementClassLookup_4set_fallback)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__XPathContext = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree_FallbackElementClassLookup[] = {
+  {(char *)"fallback", __pyx_getprop_4lxml_5etree_26FallbackElementClassLookup_fallback, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+DL_EXPORT(PyTypeObject) LxmlFallbackElementClassLookupType = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._XPathContext"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__XPathContext), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.FallbackElementClassLookup"), /*tp_name*/
+  sizeof(struct LxmlFallbackElementClassLookup), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__XPathContext, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -177676,25 +178109,25 @@ static PyTypeObject __pyx_type_4lxml_5etree__XPathContext = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__XPathContext, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__XPathContext, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("FallbackElementClassLookup(self, fallback=None)\n\n    Superclass of Element class lookups with additional fallback.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__XPathContext, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_FallbackElementClassLookup, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree_FallbackElementClassLookup, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_13_XPathContext_1__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_26FallbackElementClassLookup_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__XPathContext, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_FallbackElementClassLookup, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -177711,52 +178144,103 @@ static PyTypeObject __pyx_type_4lxml_5etree__XPathContext = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ParseEventsIterator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ParseEventsIterator *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementDefaultClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree_ElementClassLookup(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ParseEventsIterator *)o);
-  p->_events = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_20_ParseEventsIterator_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *)o);
+  p->element_class = Py_None; Py_INCREF(Py_None);
+  p->comment_class = Py_None; Py_INCREF(Py_None);
+  p->pi_class = Py_None; Py_INCREF(Py_None);
+  p->entity_class = Py_None; Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_25ElementDefaultClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ParseEventsIterator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ParseEventsIterator *p = (struct __pyx_obj_4lxml_5etree__ParseEventsIterator *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_ElementDefaultClassLookup(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_events);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_CLEAR(p->element_class);
+  Py_CLEAR(p->comment_class);
+  Py_CLEAR(p->pi_class);
+  Py_CLEAR(p->entity_class);
+  #if CYTHON_COMPILING_IN_CPYTHON
+  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
+  #endif
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree_ElementClassLookup(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__ParseEventsIterator(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree_ElementDefaultClassLookup(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__ParseEventsIterator *p = (struct __pyx_obj_4lxml_5etree__ParseEventsIterator *)o;
-  if (p->_events) {
-    e = (*v)(p->_events, a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *)o;
+  e = ((likely(__pyx_ptype_4lxml_5etree_ElementClassLookup)) ? ((__pyx_ptype_4lxml_5etree_ElementClassLookup->tp_traverse) ? __pyx_ptype_4lxml_5etree_ElementClassLookup->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_4lxml_5etree_ElementDefaultClassLookup)); if (e) return e;
+  if (p->element_class) {
+    e = (*v)(p->element_class, a); if (e) return e;
+  }
+  if (p->comment_class) {
+    e = (*v)(p->comment_class, a); if (e) return e;
+  }
+  if (p->pi_class) {
+    e = (*v)(p->pi_class, a); if (e) return e;
+  }
+  if (p->entity_class) {
+    e = (*v)(p->entity_class, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__ParseEventsIterator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ParseEventsIterator *p = (struct __pyx_obj_4lxml_5etree__ParseEventsIterator *)o;
-  Py_CLEAR(p->_events);
+static int __pyx_tp_clear_4lxml_5etree_ElementDefaultClassLookup(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *)o;
+  if (likely(__pyx_ptype_4lxml_5etree_ElementClassLookup)) { if (__pyx_ptype_4lxml_5etree_ElementClassLookup->tp_clear) __pyx_ptype_4lxml_5etree_ElementClassLookup->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_4lxml_5etree_ElementDefaultClassLookup);
+  Py_CLEAR(p->element_class);
+  Py_CLEAR(p->comment_class);
+  Py_CLEAR(p->pi_class);
+  Py_CLEAR(p->entity_class);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__ParseEventsIterator[] = {
-  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_20_ParseEventsIterator_5__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
+static PyObject *__pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_element_class(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_25ElementDefaultClassLookup_13element_class_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_comment_class(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_25ElementDefaultClassLookup_13comment_class_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_pi_class(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_25ElementDefaultClassLookup_8pi_class_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_entity_class(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_25ElementDefaultClassLookup_12entity_class_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_ElementDefaultClassLookup[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ParseEventsIterator = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree_ElementDefaultClassLookup[] = {
+  {(char *)"element_class", __pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_element_class, 0, 0, 0},
+  {(char *)"comment_class", __pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_comment_class, 0, 0, 0},
+  {(char *)"pi_class", __pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_pi_class, 0, 0, 0},
+  {(char *)"entity_class", __pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_entity_class, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree_ElementDefaultClassLookup = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ParseEventsIterator"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ParseEventsIterator), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.ElementDefaultClassLookup"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ParseEventsIterator, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_ElementDefaultClassLookup, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -177775,25 +178259,25 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParseEventsIterator = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("A reusable parse events iterator"), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ParseEventsIterator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ParseEventsIterator, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("ElementDefaultClassLookup(self, element=None, comment=None, pi=None, entity=None)\n    Element class lookup scheme that always returns the default Element\n    class.\n\n    The keyword arguments ``element``, ``comment``, ``pi`` and ``entity``\n    accept the respective Element classes.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_ElementDefaultClassLookup, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_ElementDefaultClassLookup, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_4lxml_5etree_20_ParseEventsIterator_3__iter__, /*tp_iter*/
-  __pyx_pw_4lxml_5etree_20_ParseEventsIterator_5__next__, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ParseEventsIterator, /*tp_methods*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree_ElementDefaultClassLookup, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree_ElementDefaultClassLookup, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_25ElementDefaultClassLookup_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ParseEventsIterator, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_ElementDefaultClassLookup, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -177809,56 +178293,67 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParseEventsIterator = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__Entity __pyx_vtable_4lxml_5etree__Entity;
+static struct __pyx_vtabstruct_4lxml_5etree_AttributeBasedElementClassLookup __pyx_vtable_4lxml_5etree_AttributeBasedElementClassLookup;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__Entity(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__Entity *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree___ContentOnlyElement(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_AttributeBasedElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__Entity *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree__Entity;
+  p = ((struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup*)__pyx_vtabptr_4lxml_5etree_AttributeBasedElementClassLookup;
+  p->_class_mapping = Py_None; Py_INCREF(Py_None);
+  p->_pytag = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_32AttributeBasedElementClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_7_Entity_tag(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_7_Entity_3tag_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_7_Entity_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_7_Entity_4name_1__get__(o);
+static void __pyx_tp_dealloc_4lxml_5etree_AttributeBasedElementClassLookup(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *p = (struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_class_mapping);
+  Py_CLEAR(p->_pytag);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup(o);
 }
 
-static int __pyx_setprop_4lxml_5etree_7_Entity_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_4lxml_5etree_7_Entity_4name_3__set__(o, v);
+static int __pyx_tp_traverse_4lxml_5etree_AttributeBasedElementClassLookup(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *p = (struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *)o;
+  e = __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup(o, v, a); if (e) return e;
+  if (p->_class_mapping) {
+    e = (*v)(p->_class_mapping, a); if (e) return e;
   }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
+  if (p->_pytag) {
+    e = (*v)(p->_pytag, a); if (e) return e;
   }
+  return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_7_Entity_text(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_7_Entity_4text_1__get__(o);
+static int __pyx_tp_clear_4lxml_5etree_AttributeBasedElementClassLookup(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *p = (struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *)o;
+  __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup(o);
+  Py_CLEAR(p->_class_mapping);
+  Py_CLEAR(p->_pytag);
+  return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__Entity[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_AttributeBasedElementClassLookup[] = {
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__Entity[] = {
-  {(char *)"tag", __pyx_getprop_4lxml_5etree_7_Entity_tag, 0, 0, 0},
-  {(char *)"name", __pyx_getprop_4lxml_5etree_7_Entity_name, __pyx_setprop_4lxml_5etree_7_Entity_name, 0, 0},
-  {(char *)"text", __pyx_getprop_4lxml_5etree_7_Entity_text, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__Entity = {
+static PyTypeObject __pyx_type_4lxml_5etree_AttributeBasedElementClassLookup = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._Entity"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__Entity), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.AttributeBasedElementClassLookup"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_AttributeBasedElementClassLookup, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -177867,7 +178362,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__Entity = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_7_Entity_1__repr__, /*tp_repr*/
+  0, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -177878,28 +178373,24 @@ static PyTypeObject __pyx_type_4lxml_5etree__Entity = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
-  0, /*tp_clear*/
+  __Pyx_DOCSTR("AttributeBasedElementClassLookup(self, attribute_name, class_mapping, fallback=None)\n    Checks an attribute of an Element and looks up the value in a\n    class dictionary.\n\n    Arguments:\n      - attribute name - '{ns}name' style string\n      - class mapping  - Python dict mapping attribute values to Element classes\n      - fallback       - optional fallback lookup mechanism\n\n    A None key in the class mapping will be checked if the attribute is\n    missing.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_AttributeBasedElementClassLookup, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_AttributeBasedElementClassLookup, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__Entity, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_AttributeBasedElementClassLookup, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__Entity, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_32AttributeBasedElementClassLookup_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__Entity, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_AttributeBasedElementClassLookup, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -177915,27 +178406,30 @@ static PyTypeObject __pyx_type_4lxml_5etree__Entity = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_EntityBase __pyx_vtable_4lxml_5etree_EntityBase;
+static struct __pyx_vtabstruct_4lxml_5etree_ParserBasedElementClassLookup __pyx_vtable_4lxml_5etree_ParserBasedElementClassLookup;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_EntityBase(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_EntityBase *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__Entity(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_ParserBasedElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_ParserBasedElementClassLookup *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_EntityBase *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree_EntityBase;
+  p = ((struct __pyx_obj_4lxml_5etree_ParserBasedElementClassLookup *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup*)__pyx_vtabptr_4lxml_5etree_ParserBasedElementClassLookup;
+  if (unlikely(__pyx_pw_4lxml_5etree_29ParserBasedElementClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_EntityBase[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_ParserBasedElementClassLookup[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_EntityBase = {
+static PyTypeObject __pyx_type_4lxml_5etree_ParserBasedElementClassLookup = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.EntityBase"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_EntityBase), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.ParserBasedElementClassLookup"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_ParserBasedElementClassLookup), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -177944,11 +178438,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_EntityBase = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_7_Entity_1__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -177959,18 +178449,14 @@ static PyTypeObject __pyx_type_4lxml_5etree_EntityBase = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("All custom Entity classes must inherit from this one.\n\n    To create an XML Entity instance, use the ``Entity()`` factory.\n\n    Subclasses *must not* override __init__ or __new__ as it is\n    absolutely undefined when these objects will be created or\n    destroyed.  All persistent state of Entities must be stored in the\n    underlying XML.  If you really need to initialize the object after\n    creation, you can implement an ``_init(self)`` method that will be\n    called after object creation.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
-  0, /*tp_clear*/
+  __Pyx_DOCSTR("ParserBasedElementClassLookup(self, fallback=None)\n    Element class lookup based on the XML parser.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_EntityBase, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_ParserBasedElementClassLookup, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -177978,9 +178464,13 @@ static PyTypeObject __pyx_type_4lxml_5etree_EntityBase = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_10EntityBase_1__init__, /*tp_init*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_26FallbackElementClassLookup_3__init__, /*tp_init*/
+  #else
+  0, /*tp_init*/
+  #endif
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_EntityBase, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_ParserBasedElementClassLookup, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -177996,75 +178486,31 @@ static PyTypeObject __pyx_type_4lxml_5etree_EntityBase = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__Document __pyx_vtable_4lxml_5etree__Document;
-
-static struct LxmlDocument *__pyx_freelist_4lxml_5etree__Document[8];
-static int __pyx_freecount_4lxml_5etree__Document = 0;
+static struct __pyx_vtabstruct_4lxml_5etree_CustomElementClassLookup __pyx_vtable_4lxml_5etree_CustomElementClassLookup;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__Document(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct LxmlDocument *p;
-  PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree__Document > 0) & (t->tp_basicsize == sizeof(struct LxmlDocument)))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree__Document[--__pyx_freecount_4lxml_5etree__Document];
-    memset(o, 0, sizeof(struct LxmlDocument));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
-  } else {
-    o = (*t->tp_alloc)(t, 0);
-    if (unlikely(!o)) return 0;
+static PyObject *__pyx_tp_new_4lxml_5etree_CustomElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_CustomElementClassLookup *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree_CustomElementClassLookup *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup*)__pyx_vtabptr_4lxml_5etree_CustomElementClassLookup;
+  if (unlikely(__pyx_pw_4lxml_5etree_24CustomElementClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
   }
-  p = ((struct LxmlDocument *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__Document;
-  p->_prefix_tail = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_parser = ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__Document(PyObject *o) {
-  struct LxmlDocument *p = (struct LxmlDocument *)o;
-  PyObject_GC_UnTrack(o);
-  {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_9_Document_1__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
-  }
-  Py_CLEAR(p->_prefix_tail);
-  Py_CLEAR(p->_parser);
-  if ((__pyx_freecount_4lxml_5etree__Document < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct LxmlDocument))) {
-    __pyx_freelist_4lxml_5etree__Document[__pyx_freecount_4lxml_5etree__Document++] = ((struct LxmlDocument *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
-  }
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__Document(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct LxmlDocument *p = (struct LxmlDocument *)o;
-  if (p->_parser) {
-    e = (*v)(((PyObject*)p->_parser), a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__Document(PyObject *o) {
-  struct LxmlDocument *p = (struct LxmlDocument *)o;
-  Py_CLEAR(p->_parser);
-  return 0;
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__Document[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_CustomElementClassLookup[] = {
+  {__Pyx_NAMESTR("lookup"), (PyCFunction)__pyx_pw_4lxml_5etree_24CustomElementClassLookup_3lookup, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_24CustomElementClassLookup_2lookup)},
   {0, 0, 0, 0}
 };
 
-DL_EXPORT(PyTypeObject) LxmlDocumentType = {
+static PyTypeObject __pyx_type_4lxml_5etree_CustomElementClassLookup = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._Document"), /*tp_name*/
-  sizeof(struct LxmlDocument), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.CustomElementClassLookup"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_CustomElementClassLookup), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__Document, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -178083,15 +178529,15 @@ DL_EXPORT(PyTypeObject) LxmlDocumentType = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("Internal base class to reference a libxml document.\n\n    When instances of this class are garbage collected, the libxml\n    document is cleaned up.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Document, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__Document, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("CustomElementClassLookup(self, fallback=None)\n    Element class lookup based on a subclass method.\n\n    You can inherit from this class and override the method::\n\n        lookup(self, type, doc, namespace, name)\n\n    to lookup the element class for a node. Arguments of the method:\n    * type:      one of 'element', 'comment', 'PI', 'entity'\n    * doc:       document that the node is in\n    * namespace: namespace URI of the node (or None for comments/PIs/entities)\n    * name:      name of the element/entity, None for comments, target for PIs\n\n    If you return None from this method, the fallback will be called.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__Document, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_CustomElementClassLookup, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -178099,9 +178545,13 @@ DL_EXPORT(PyTypeObject) LxmlDocumentType = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_26FallbackElementClassLookup_3__init__, /*tp_init*/
+  #else
   0, /*tp_init*/
+  #endif
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__Document, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_CustomElementClassLookup, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -178117,60 +178567,31 @@ DL_EXPORT(PyTypeObject) LxmlDocumentType = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree_PythonElementClassLookup __pyx_vtable_4lxml_5etree_PythonElementClassLookup;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__InputDocument(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__InputDocument *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
+static PyObject *__pyx_tp_new_4lxml_5etree_PythonElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_PythonElementClassLookup *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__InputDocument *)o);
-  p->_data_bytes = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_filename = Py_None; Py_INCREF(Py_None);
-  p->_file = Py_None; Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_14_InputDocument_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree_PythonElementClassLookup *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup*)__pyx_vtabptr_4lxml_5etree_PythonElementClassLookup;
+  if (unlikely(__pyx_pw_4lxml_5etree_24PythonElementClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__InputDocument(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__InputDocument *p = (struct __pyx_obj_4lxml_5etree__InputDocument *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_data_bytes);
-  Py_CLEAR(p->_filename);
-  Py_CLEAR(p->_file);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__InputDocument(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__InputDocument *p = (struct __pyx_obj_4lxml_5etree__InputDocument *)o;
-  if (p->_filename) {
-    e = (*v)(p->_filename, a); if (e) return e;
-  }
-  if (p->_file) {
-    e = (*v)(p->_file, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__InputDocument(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__InputDocument *p = (struct __pyx_obj_4lxml_5etree__InputDocument *)o;
-  Py_CLEAR(p->_filename);
-  Py_CLEAR(p->_file);
-  return 0;
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__InputDocument[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_PythonElementClassLookup[] = {
+  {__Pyx_NAMESTR("lookup"), (PyCFunction)__pyx_pw_4lxml_5etree_24PythonElementClassLookup_3lookup, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_24PythonElementClassLookup_2lookup)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__InputDocument = {
+static PyTypeObject __pyx_type_4lxml_5etree_PythonElementClassLookup = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._InputDocument"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__InputDocument), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.PythonElementClassLookup"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_PythonElementClassLookup), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__InputDocument, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -178189,15 +178610,15 @@ static PyTypeObject __pyx_type_4lxml_5etree__InputDocument = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__InputDocument, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__InputDocument, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("PythonElementClassLookup(self, fallback=None)\n    Element class lookup based on a subclass method.\n\n    This class lookup scheme allows access to the entire XML tree in\n    read-only mode.  To use it, re-implement the ``lookup(self, doc,\n    root)`` method in a subclass::\n\n        from lxml import etree, pyclasslookup\n\n        class MyElementClass(etree.ElementBase):\n            honkey = True\n\n        class MyLookup(pyclasslookup.PythonElementClassLookup):\n            def lookup(self, doc, root):\n                if root.tag == \"sometag\":\n                    return MyElementClass\n                else:\n                    for child in root:\n                        if child.tag == \"someothertag\":\n                            return MyElementClass\n                # delegate to default\n                return None\n\n    If you return None from this method, the fallback will be called.\n\n    The first argument is the opaque document instance that contains\n    the Element.  The second argument is a lightweight Element proxy\n    implementation that is only valid during the lookup.  Do not try\n    to keep a reference to it.  Once the lookup is done, the proxy\n    will be invalid.\n\n    Also, you cannot wrap such a read-only Element in an ElementTree,\n    and you must take care not to keep a reference to them outside of\n    the `lookup()` method.\n\n    Note that the API of the Element objects is not complete.  It is\n    purely read-only and does not support all features of the normal\n    `lxml.etree` API (such as XPath, extended slicing or some\n    iteration methods).\n\n    See http://codespeak.net/lxml/element_classes.html\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__InputDocument, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_PythonElementClassLookup, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -178205,9 +178626,13 @@ static PyTypeObject __pyx_type_4lxml_5etree__InputDocument = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_26FallbackElementClassLookup_3__init__, /*tp_init*/
+  #else
   0, /*tp_init*/
+  #endif
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__InputDocument, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_PythonElementClassLookup, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -178223,201 +178648,112 @@ static PyTypeObject __pyx_type_4lxml_5etree__InputDocument = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ElementTree __pyx_vtable_4lxml_5etree__ElementTree;
-
-static struct LxmlElementTree *__pyx_freelist_4lxml_5etree__ElementTree[8];
-static int __pyx_freecount_4lxml_5etree__ElementTree = 0;
+static struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry __pyx_vtable_4lxml_5etree__NamespaceRegistry;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ElementTree(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct LxmlElementTree *p;
+static PyObject *__pyx_tp_new_4lxml_5etree__NamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__NamespaceRegistry *p;
   PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree__ElementTree > 0) & (t->tp_basicsize == sizeof(struct LxmlElementTree)) & ((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree__ElementTree[--__pyx_freecount_4lxml_5etree__ElementTree];
-    memset(o, 0, sizeof(struct LxmlElementTree));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
   } else {
-    if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-      o = (*t->tp_alloc)(t, 0);
-    } else {
-      o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-    }
-    if (unlikely(!o)) return 0;
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree__NamespaceRegistry *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__NamespaceRegistry;
+  p->_ns_uri = Py_None; Py_INCREF(Py_None);
+  p->_ns_uri_utf = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_entries = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_18_NamespaceRegistry_1__cinit__(o, a, k) < 0)) {
+    Py_DECREF(o); o = 0;
   }
-  p = ((struct LxmlElementTree *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ElementTree;
-  p->_doc = ((struct LxmlDocument *)Py_None); Py_INCREF(Py_None);
-  p->_context_node = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ElementTree(PyObject *o) {
-  struct LxmlElementTree *p = (struct LxmlElementTree *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__NamespaceRegistry(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__NamespaceRegistry *p = (struct __pyx_obj_4lxml_5etree__NamespaceRegistry *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_doc);
-  Py_CLEAR(p->_context_node);
-  if ((__pyx_freecount_4lxml_5etree__ElementTree < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct LxmlElementTree))) {
-    __pyx_freelist_4lxml_5etree__ElementTree[__pyx_freecount_4lxml_5etree__ElementTree++] = ((struct LxmlElementTree *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
-  }
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__ElementTree(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct LxmlElementTree *p = (struct LxmlElementTree *)o;
-  if (p->_doc) {
-    e = (*v)(((PyObject*)p->_doc), a); if (e) return e;
-  }
-  if (p->_context_node) {
-    e = (*v)(((PyObject*)p->_context_node), a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__ElementTree(PyObject *o) {
-  struct LxmlElementTree *p = (struct LxmlElementTree *)o;
-  Py_CLEAR(p->_doc);
-  Py_CLEAR(p->_context_node);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_12_ElementTree_docinfo(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_12_ElementTree_7docinfo_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_12_ElementTree_parser(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_12_ElementTree_6parser_1__get__(o);
+  Py_CLEAR(p->_ns_uri);
+  Py_CLEAR(p->_ns_uri_utf);
+  Py_CLEAR(p->_entries);
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__ElementTree[] = {
-  {__Pyx_NAMESTR("parse"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_1parse, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_parse)},
-  {__Pyx_NAMESTR("_setroot"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_3_setroot, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_2_setroot)},
-  {__Pyx_NAMESTR("getroot"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_5getroot, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_4getroot)},
-  {__Pyx_NAMESTR("__copy__"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_7__copy__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("__deepcopy__"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_9__deepcopy__, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_11write, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_10write)},
-  {__Pyx_NAMESTR("getpath"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_13getpath, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_12getpath)},
-  {__Pyx_NAMESTR("getiterator"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_15getiterator, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_14getiterator)},
-  {__Pyx_NAMESTR("iter"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_17iter, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_16iter)},
-  {__Pyx_NAMESTR("find"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_19find, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_18find)},
-  {__Pyx_NAMESTR("findtext"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_21findtext, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_20findtext)},
-  {__Pyx_NAMESTR("findall"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_23findall, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_22findall)},
-  {__Pyx_NAMESTR("iterfind"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_25iterfind, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_24iterfind)},
-  {__Pyx_NAMESTR("xpath"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_27xpath, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_26xpath)},
-  {__Pyx_NAMESTR("xslt"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_29xslt, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_28xslt)},
-  {__Pyx_NAMESTR("relaxng"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_31relaxng, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_30relaxng)},
-  {__Pyx_NAMESTR("xmlschema"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_33xmlschema, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_32xmlschema)},
-  {__Pyx_NAMESTR("xinclude"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_35xinclude, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_34xinclude)},
-  {__Pyx_NAMESTR("write_c14n"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ElementTree_37write_c14n, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_12_ElementTree_36write_c14n)},
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ElementTree[] = {
-  {(char *)"docinfo", __pyx_getprop_4lxml_5etree_12_ElementTree_docinfo, 0, __Pyx_DOCSTR(__pyx_k_Information_about_the_document_p), 0},
-  {(char *)"parser", __pyx_getprop_4lxml_5etree_12_ElementTree_parser, 0, __Pyx_DOCSTR(__pyx_k_The_parser_that_was_used_to_pars), 0},
-  {0, 0, 0, 0, 0}
-};
-
-DL_EXPORT(PyTypeObject) LxmlElementTreeType = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ElementTree"), /*tp_name*/
-  sizeof(struct LxmlElementTree), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ElementTree, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  0, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ElementTree, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ElementTree, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ElementTree, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__ElementTree, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ElementTree, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
-  #endif
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-static struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyProxy __pyx_vtable_4lxml_5etree__ModifyContentOnlyProxy;
-
-static PyObject *__pyx_tp_new_4lxml_5etree__ModifyContentOnlyProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ReadOnlyProxy(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyProxy;
-  return o;
+static int __pyx_tp_traverse_4lxml_5etree__NamespaceRegistry(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__NamespaceRegistry *p = (struct __pyx_obj_4lxml_5etree__NamespaceRegistry *)o;
+  if (p->_ns_uri) {
+    e = (*v)(p->_ns_uri, a); if (e) return e;
+  }
+  if (p->_entries) {
+    e = (*v)(p->_entries, a); if (e) return e;
+  }
+  return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_23_ModifyContentOnlyProxy_text(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_23_ModifyContentOnlyProxy_4text_1__get__(o);
+static int __pyx_tp_clear_4lxml_5etree__NamespaceRegistry(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__NamespaceRegistry *p = (struct __pyx_obj_4lxml_5etree__NamespaceRegistry *)o;
+  Py_CLEAR(p->_ns_uri);
+  Py_CLEAR(p->_entries);
+  return 0;
+}
+static PyObject *__pyx_sq_item_4lxml_5etree__NamespaceRegistry(PyObject *o, Py_ssize_t i) {
+  PyObject *r;
+  PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
+  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
+  Py_DECREF(x);
+  return r;
 }
 
-static int __pyx_setprop_4lxml_5etree_23_ModifyContentOnlyProxy_text(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+static int __pyx_mp_ass_subscript_4lxml_5etree__NamespaceRegistry(PyObject *o, PyObject *i, PyObject *v) {
   if (v) {
-    return __pyx_pw_4lxml_5etree_23_ModifyContentOnlyProxy_4text_3__set__(o, v);
+    PyErr_Format(PyExc_NotImplementedError,
+      "Subscript assignment not supported by %.200s", Py_TYPE(o)->tp_name);
+    return -1;
   }
   else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
+    return __pyx_pw_4lxml_5etree_18_NamespaceRegistry_7__delitem__(o, i);
   }
 }
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ModifyContentOnlyProxy[] = {
-  {(char *)"text", __pyx_getprop_4lxml_5etree_23_ModifyContentOnlyProxy_text, __pyx_setprop_4lxml_5etree_23_ModifyContentOnlyProxy_text, 0, 0},
-  {0, 0, 0, 0, 0}
+static PyMethodDef __pyx_methods_4lxml_5etree__NamespaceRegistry[] = {
+  {__Pyx_NAMESTR("update"), (PyCFunction)__pyx_pw_4lxml_5etree_18_NamespaceRegistry_3update, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_18_NamespaceRegistry_2update)},
+  {__Pyx_NAMESTR("items"), (PyCFunction)__pyx_pw_4lxml_5etree_18_NamespaceRegistry_11items, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("iteritems"), (PyCFunction)__pyx_pw_4lxml_5etree_18_NamespaceRegistry_13iteritems, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("clear"), (PyCFunction)__pyx_pw_4lxml_5etree_18_NamespaceRegistry_15clear, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyProxy = {
+static PySequenceMethods __pyx_tp_as_sequence__NamespaceRegistry = {
+  0, /*sq_length*/
+  0, /*sq_concat*/
+  0, /*sq_repeat*/
+  __pyx_sq_item_4lxml_5etree__NamespaceRegistry, /*sq_item*/
+  0, /*sq_slice*/
+  0, /*sq_ass_item*/
+  0, /*sq_ass_slice*/
+  0, /*sq_contains*/
+  0, /*sq_inplace_concat*/
+  0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping__NamespaceRegistry = {
+  0, /*mp_length*/
+  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_5__getitem__, /*mp_subscript*/
+  __pyx_mp_ass_subscript_4lxml_5etree__NamespaceRegistry, /*mp_ass_subscript*/
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__NamespaceRegistry = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ModifyContentOnlyProxy"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ModifyContentOnlyProxy), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._NamespaceRegistry"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__NamespaceRegistry), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__NamespaceRegistry, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -178426,14 +178762,10 @@ static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyProxy = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_3__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
+  &__pyx_tp_as_sequence__NamespaceRegistry, /*tp_as_sequence*/
+  &__pyx_tp_as_mapping__NamespaceRegistry, /*tp_as_mapping*/
   0, /*tp_hash*/
   0, /*tp_call*/
   0, /*tp_str*/
@@ -178441,20 +178773,16 @@ static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyProxy = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("A read-only proxy that allows changing the text content.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ReadOnlyProxy, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ReadOnlyProxy, /*tp_clear*/
+  __Pyx_DOCSTR("Dictionary-like namespace registry"), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__NamespaceRegistry, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__NamespaceRegistry, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_15__iter__, /*tp_iter*/
-  #else
-  0, /*tp_iter*/
-  #endif
+  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_9__iter__, /*tp_iter*/
   0, /*tp_iternext*/
-  0, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__NamespaceRegistry, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__ModifyContentOnlyProxy, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -178462,7 +178790,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyProxy = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ModifyContentOnlyProxy, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__NamespaceRegistry, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -178478,30 +178806,50 @@ static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyProxy = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_ParserBasedElementClassLookup __pyx_vtable_4lxml_5etree_ParserBasedElementClassLookup;
+static struct __pyx_vtabstruct_4lxml_5etree__ClassNamespaceRegistry __pyx_vtable_4lxml_5etree__ClassNamespaceRegistry;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_ParserBasedElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_ParserBasedElementClassLookup *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__ClassNamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ClassNamespaceRegistry *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__NamespaceRegistry(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_ParserBasedElementClassLookup *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup*)__pyx_vtabptr_4lxml_5etree_ParserBasedElementClassLookup;
-  if (unlikely(__pyx_pw_4lxml_5etree_29ParserBasedElementClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  p = ((struct __pyx_obj_4lxml_5etree__ClassNamespaceRegistry *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry*)__pyx_vtabptr_4lxml_5etree__ClassNamespaceRegistry;
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_ParserBasedElementClassLookup[] = {
+static int __pyx_mp_ass_subscript_4lxml_5etree__ClassNamespaceRegistry(PyObject *o, PyObject *i, PyObject *v) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_23_ClassNamespaceRegistry_1__setitem__(o, i, v);
+  }
+  else {
+    if (__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_as_mapping && __pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_as_mapping->mp_ass_subscript)
+      return __pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_as_mapping->mp_ass_subscript(o, i, v);
+    PyErr_Format(PyExc_NotImplementedError,
+      "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);
+    return -1;
+  }
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__ClassNamespaceRegistry[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_ParserBasedElementClassLookup = {
+static PyMappingMethods __pyx_tp_as_mapping__ClassNamespaceRegistry = {
+  0, /*mp_length*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_5__getitem__, /*mp_subscript*/
+  #else
+  0, /*mp_subscript*/
+  #endif
+  __pyx_mp_ass_subscript_4lxml_5etree__ClassNamespaceRegistry, /*mp_ass_subscript*/
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__ClassNamespaceRegistry = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.ParserBasedElementClassLookup"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_ParserBasedElementClassLookup), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ClassNamespaceRegistry"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ClassNamespaceRegistry), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__NamespaceRegistry, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -178510,25 +178858,29 @@ static PyTypeObject __pyx_type_4lxml_5etree_ParserBasedElementClassLookup = {
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_23_ClassNamespaceRegistry_3__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
+  &__pyx_tp_as_mapping__ClassNamespaceRegistry, /*tp_as_mapping*/
   0, /*tp_hash*/
   0, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("ParserBasedElementClassLookup(self, fallback=None)\n    Element class lookup based on the XML parser.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("Dictionary-like registry for namespace implementation classes"), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__NamespaceRegistry, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__NamespaceRegistry, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_9__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_ParserBasedElementClassLookup, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__ClassNamespaceRegistry, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -178536,13 +178888,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_ParserBasedElementClassLookup = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_26FallbackElementClassLookup_3__init__, /*tp_init*/
-  #else
   0, /*tp_init*/
-  #endif
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_ParserBasedElementClassLookup, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ClassNamespaceRegistry, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -178558,77 +178906,62 @@ static PyTypeObject __pyx_type_4lxml_5etree_ParserBasedElementClassLookup = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__Validator __pyx_vtable_4lxml_5etree__Validator;
+static struct __pyx_vtabstruct_4lxml_5etree_ElementNamespaceClassLookup __pyx_vtable_4lxml_5etree_ElementNamespaceClassLookup;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__Validator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__Validator *p;
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree_ElementNamespaceClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__Validator *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__Validator;
-  p->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_10_Validator_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup*)__pyx_vtabptr_4lxml_5etree_ElementNamespaceClassLookup;
+  p->_namespace_registries = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_27ElementNamespaceClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__Validator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__Validator *p = (struct __pyx_obj_4lxml_5etree__Validator *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_ElementNamespaceClassLookup(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_error_log);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_CLEAR(p->_namespace_registries);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__Validator(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree_ElementNamespaceClassLookup(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__Validator *p = (struct __pyx_obj_4lxml_5etree__Validator *)o;
-  if (p->_error_log) {
-    e = (*v)(((PyObject*)p->_error_log), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *)o;
+  e = __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup(o, v, a); if (e) return e;
+  if (p->_namespace_registries) {
+    e = (*v)(p->_namespace_registries, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__Validator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__Validator *p = (struct __pyx_obj_4lxml_5etree__Validator *)o;
-  Py_CLEAR(p->_error_log);
+static int __pyx_tp_clear_4lxml_5etree_ElementNamespaceClassLookup(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *)o;
+  __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup(o);
+  Py_CLEAR(p->_namespace_registries);
   return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_10_Validator_error_log(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_10_Validator_9error_log_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__Validator[] = {
-  {__Pyx_NAMESTR("validate"), (PyCFunction)__pyx_pw_4lxml_5etree_10_Validator_3validate, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_10_Validator_2validate)},
-  {__Pyx_NAMESTR("assertValid"), (PyCFunction)__pyx_pw_4lxml_5etree_10_Validator_5assertValid, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_10_Validator_4assertValid)},
-  {__Pyx_NAMESTR("assert_"), (PyCFunction)__pyx_pw_4lxml_5etree_10_Validator_7assert_, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_10_Validator_6assert_)},
-  {__Pyx_NAMESTR("_append_log_message"), (PyCFunction)__pyx_pw_4lxml_5etree_10_Validator_9_append_log_message, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("_clear_error_log"), (PyCFunction)__pyx_pw_4lxml_5etree_10_Validator_11_clear_error_log, METH_NOARGS, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree_ElementNamespaceClassLookup[] = {
+  {__Pyx_NAMESTR("get_namespace"), (PyCFunction)__pyx_pw_4lxml_5etree_27ElementNamespaceClassLookup_5get_namespace, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_27ElementNamespaceClassLookup_4get_namespace)},
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__Validator[] = {
-  {(char *)"error_log", __pyx_getprop_4lxml_5etree_10_Validator_error_log, 0, __Pyx_DOCSTR(__pyx_k_The_log_of_validation_errors_and), 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__Validator = {
+static PyTypeObject __pyx_type_4lxml_5etree_ElementNamespaceClassLookup = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._Validator"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__Validator), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.ElementNamespaceClassLookup"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__Validator, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_ElementNamespaceClassLookup, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -178648,24 +178981,24 @@ static PyTypeObject __pyx_type_4lxml_5etree__Validator = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("Base class for XML validators."), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Validator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__Validator, /*tp_clear*/
+  __Pyx_DOCSTR("ElementNamespaceClassLookup(self, fallback=None)\n\n    Element class lookup scheme that searches the Element class in the\n    Namespace registry.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_ElementNamespaceClassLookup, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_ElementNamespaceClassLookup, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__Validator, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_ElementNamespaceClassLookup, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__Validator, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_27ElementNamespaceClassLookup_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__Validator, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_ElementNamespaceClassLookup, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -178681,49 +179014,50 @@ static PyTypeObject __pyx_type_4lxml_5etree__Validator = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_RelaxNG __pyx_vtable_4lxml_5etree_RelaxNG;
+static struct __pyx_vtabstruct_4lxml_5etree__FunctionNamespaceRegistry __pyx_vtable_4lxml_5etree__FunctionNamespaceRegistry;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_RelaxNG(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_RelaxNG *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__Validator(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__FunctionNamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__FunctionNamespaceRegistry *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__NamespaceRegistry(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_RelaxNG *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__Validator*)__pyx_vtabptr_4lxml_5etree_RelaxNG;
-  if (unlikely(__pyx_pw_4lxml_5etree_7RelaxNG_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  p = ((struct __pyx_obj_4lxml_5etree__FunctionNamespaceRegistry *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry*)__pyx_vtabptr_4lxml_5etree__FunctionNamespaceRegistry;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_RelaxNG(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
+static int __pyx_mp_ass_subscript_4lxml_5etree__FunctionNamespaceRegistry(PyObject *o, PyObject *i, PyObject *v) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_26_FunctionNamespaceRegistry_1__setitem__(o, i, v);
   }
-  #endif
-  PyObject_GC_UnTrack(o);
-  {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_7RelaxNG_5__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
+  else {
+    if (__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_as_mapping && __pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_as_mapping->mp_ass_subscript)
+      return __pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_as_mapping->mp_ass_subscript(o, i, v);
+    PyErr_Format(PyExc_NotImplementedError,
+      "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);
+    return -1;
   }
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__Validator(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_RelaxNG[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree__FunctionNamespaceRegistry[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_RelaxNG = {
+static PyMappingMethods __pyx_tp_as_mapping__FunctionNamespaceRegistry = {
+  0, /*mp_length*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_5__getitem__, /*mp_subscript*/
+  #else
+  0, /*mp_subscript*/
+  #endif
+  __pyx_mp_ass_subscript_4lxml_5etree__FunctionNamespaceRegistry, /*mp_ass_subscript*/
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__FunctionNamespaceRegistry = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.RelaxNG"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_RelaxNG), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._FunctionNamespaceRegistry"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__FunctionNamespaceRegistry), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_RelaxNG, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__NamespaceRegistry, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -178732,25 +179066,29 @@ static PyTypeObject __pyx_type_4lxml_5etree_RelaxNG = {
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_26_FunctionNamespaceRegistry_3__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
+  &__pyx_tp_as_mapping__FunctionNamespaceRegistry, /*tp_as_mapping*/
   0, /*tp_hash*/
-  __pyx_pw_4lxml_5etree_7RelaxNG_7__call__, /*tp_call*/
+  0, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("RelaxNG(self, etree=None, file=None)\n    Turn a document into a Relax NG validator.\n\n    Either pass a schema as Element or ElementTree, or pass a file or\n    filename through the ``file`` keyword argument.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Validator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__Validator, /*tp_clear*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__NamespaceRegistry, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__NamespaceRegistry, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_9__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_RelaxNG, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__FunctionNamespaceRegistry, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -178758,9 +179096,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_RelaxNG = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_7RelaxNG_3__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_RelaxNG, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__FunctionNamespaceRegistry, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -178776,142 +179114,69 @@ static PyTypeObject __pyx_type_4lxml_5etree_RelaxNG = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__LogEntry __pyx_vtable_4lxml_5etree__LogEntry;
-
-static struct __pyx_obj_4lxml_5etree__LogEntry *__pyx_freelist_4lxml_5etree__LogEntry[16];
-static int __pyx_freecount_4lxml_5etree__LogEntry = 0;
+static struct __pyx_vtabstruct_4lxml_5etree__XPathFunctionNamespaceRegistry __pyx_vtable_4lxml_5etree__XPathFunctionNamespaceRegistry;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__LogEntry(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__LogEntry *p;
-  PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree__LogEntry > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__LogEntry)) & ((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree__LogEntry[--__pyx_freecount_4lxml_5etree__LogEntry];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__LogEntry));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
-  } else {
-    if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-      o = (*t->tp_alloc)(t, 0);
-    } else {
-      o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-    }
-    if (unlikely(!o)) return 0;
-  }
-  p = ((struct __pyx_obj_4lxml_5etree__LogEntry *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__LogEntry;
-  p->_message = Py_None; Py_INCREF(Py_None);
-  p->_filename = Py_None; Py_INCREF(Py_None);
+static PyObject *__pyx_tp_new_4lxml_5etree__XPathFunctionNamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__FunctionNamespaceRegistry(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry*)__pyx_vtabptr_4lxml_5etree__XPathFunctionNamespaceRegistry;
+  p->_prefix = Py_None; Py_INCREF(Py_None);
+  p->_prefix_utf = ((PyObject*)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__LogEntry(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__LogEntry *p = (struct __pyx_obj_4lxml_5etree__LogEntry *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
+static void __pyx_tp_dealloc_4lxml_5etree__XPathFunctionNamespaceRegistry(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *p = (struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *)o;
   PyObject_GC_UnTrack(o);
-  {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_9_LogEntry_1__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
-  }
-  Py_CLEAR(p->_message);
-  Py_CLEAR(p->_filename);
-  if ((__pyx_freecount_4lxml_5etree__LogEntry < 16) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__LogEntry))) {
-    __pyx_freelist_4lxml_5etree__LogEntry[__pyx_freecount_4lxml_5etree__LogEntry++] = ((struct __pyx_obj_4lxml_5etree__LogEntry *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
-  }
+  Py_CLEAR(p->_prefix);
+  Py_CLEAR(p->_prefix_utf);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__NamespaceRegistry(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__LogEntry(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__XPathFunctionNamespaceRegistry(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__LogEntry *p = (struct __pyx_obj_4lxml_5etree__LogEntry *)o;
-  if (p->_message) {
-    e = (*v)(p->_message, a); if (e) return e;
-  }
-  if (p->_filename) {
-    e = (*v)(p->_filename, a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *p = (struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__NamespaceRegistry(o, v, a); if (e) return e;
+  if (p->_prefix) {
+    e = (*v)(p->_prefix, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__LogEntry(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__LogEntry *p = (struct __pyx_obj_4lxml_5etree__LogEntry *)o;
-  Py_CLEAR(p->_message);
-  Py_CLEAR(p->_filename);
+static int __pyx_tp_clear_4lxml_5etree__XPathFunctionNamespaceRegistry(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *p = (struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry *)o;
+  __pyx_tp_clear_4lxml_5etree__NamespaceRegistry(o);
+  Py_CLEAR(p->_prefix);
   return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_domain_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_9_LogEntry_11domain_name_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_type_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_9_LogEntry_9type_name_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_level_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_9_LogEntry_10level_name_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_message(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_9_LogEntry_7message_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_filename(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_9_LogEntry_8filename_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_domain(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_9_LogEntry_6domain_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_type(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_9_LogEntry_4type_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_level(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_9_LogEntry_5level_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_line(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_9_LogEntry_4line_1__get__(o);
+static PyObject *__pyx_getprop_4lxml_5etree_31_XPathFunctionNamespaceRegistry_prefix(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_31_XPathFunctionNamespaceRegistry_6prefix_3__get__(o);
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_9_LogEntry_column(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_9_LogEntry_6column_1__get__(o);
+static int __pyx_setprop_4lxml_5etree_31_XPathFunctionNamespaceRegistry_prefix(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_4lxml_5etree_31_XPathFunctionNamespaceRegistry_6prefix_5__set__(o, v);
+  }
+  else {
+    return __pyx_pw_4lxml_5etree_31_XPathFunctionNamespaceRegistry_6prefix_1__del__(o);
+  }
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__LogEntry[] = {
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__LogEntry[] = {
-  {(char *)"domain_name", __pyx_getprop_4lxml_5etree_9_LogEntry_domain_name, 0, __Pyx_DOCSTR(__pyx_k_The_name_of_the_error_domain_See), 0},
-  {(char *)"type_name", __pyx_getprop_4lxml_5etree_9_LogEntry_type_name, 0, __Pyx_DOCSTR(__pyx_k_The_name_of_the_error_type_See_l), 0},
-  {(char *)"level_name", __pyx_getprop_4lxml_5etree_9_LogEntry_level_name, 0, __Pyx_DOCSTR(__pyx_k_The_name_of_the_error_level_See), 0},
-  {(char *)"message", __pyx_getprop_4lxml_5etree_9_LogEntry_message, 0, 0, 0},
-  {(char *)"filename", __pyx_getprop_4lxml_5etree_9_LogEntry_filename, 0, 0, 0},
-  {(char *)"domain", __pyx_getprop_4lxml_5etree_9_LogEntry_domain, 0, 0, 0},
-  {(char *)"type", __pyx_getprop_4lxml_5etree_9_LogEntry_type, 0, 0, 0},
-  {(char *)"level", __pyx_getprop_4lxml_5etree_9_LogEntry_level, 0, 0, 0},
-  {(char *)"line", __pyx_getprop_4lxml_5etree_9_LogEntry_line, 0, 0, 0},
-  {(char *)"column", __pyx_getprop_4lxml_5etree_9_LogEntry_column, 0, 0, 0},
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__XPathFunctionNamespaceRegistry[] = {
+  {(char *)"prefix", __pyx_getprop_4lxml_5etree_31_XPathFunctionNamespaceRegistry_prefix, __pyx_setprop_4lxml_5etree_31_XPathFunctionNamespaceRegistry_prefix, __Pyx_DOCSTR(__pyx_k_Namespace_prefix_for_extension_f), 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__LogEntry = {
+static PyTypeObject __pyx_type_4lxml_5etree__XPathFunctionNamespaceRegistry = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._LogEntry"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__LogEntry), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._XPathFunctionNamespaceRegistry"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__XPathFunctionNamespaceRegistry), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__LogEntry, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__XPathFunctionNamespaceRegistry, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -178920,7 +179185,11 @@ static PyTypeObject __pyx_type_4lxml_5etree__LogEntry = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_9_LogEntry_3__repr__, /*tp_repr*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_26_FunctionNamespaceRegistry_3__repr__, /*tp_repr*/
+  #else
+  0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -178930,17 +179199,21 @@ static PyTypeObject __pyx_type_4lxml_5etree__LogEntry = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("A log message entry from an error log.\n\n    Attributes:\n\n    - message: the message text\n    - domain: the domain ID (see lxml.etree.ErrorDomains)\n    - type: the message type ID (see lxml.etree.ErrorTypes)\n    - level: the log level ID (see lxml.etree.ErrorLevels)\n    - line: the line at which the message originated (if applicable)\n    - column: the character column at which the message originated (if applicable)\n    - filename: the name of the file in which the message originated (if applicable)\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__LogEntry, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__LogEntry, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__XPathFunctionNamespaceRegistry, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__XPathFunctionNamespaceRegistry, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_9__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__LogEntry, /*tp_methods*/
+  0, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__LogEntry, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__XPathFunctionNamespaceRegistry, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -178948,7 +179221,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__LogEntry = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__LogEntry, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__XPathFunctionNamespaceRegistry, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -178964,89 +179237,60 @@ static PyTypeObject __pyx_type_4lxml_5etree__LogEntry = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__PythonSaxParserTarget __pyx_vtable_4lxml_5etree__PythonSaxParserTarget;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__PythonSaxParserTarget(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__SaxParserTarget(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__InputDocument(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__InputDocument *p;
+  PyObject *o;
+  o = (*t->tp_alloc)(t, 0);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__SaxParserTarget*)__pyx_vtabptr_4lxml_5etree__PythonSaxParserTarget;
-  p->_target_start = Py_None; Py_INCREF(Py_None);
-  p->_target_end = Py_None; Py_INCREF(Py_None);
-  p->_target_data = Py_None; Py_INCREF(Py_None);
-  p->_target_doctype = Py_None; Py_INCREF(Py_None);
-  p->_target_pi = Py_None; Py_INCREF(Py_None);
-  p->_target_comment = Py_None; Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_22_PythonSaxParserTarget_1__cinit__(o, a, k) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree__InputDocument *)o);
+  p->_data_bytes = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_filename = Py_None; Py_INCREF(Py_None);
+  p->_file = Py_None; Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_14_InputDocument_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__PythonSaxParserTarget(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *p = (struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__InputDocument(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__InputDocument *p = (struct __pyx_obj_4lxml_5etree__InputDocument *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_target_start);
-  Py_CLEAR(p->_target_end);
-  Py_CLEAR(p->_target_data);
-  Py_CLEAR(p->_target_doctype);
-  Py_CLEAR(p->_target_pi);
-  Py_CLEAR(p->_target_comment);
-  #if CYTHON_COMPILING_IN_CPYTHON
-  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
-  #endif
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__SaxParserTarget(o);
+  Py_CLEAR(p->_data_bytes);
+  Py_CLEAR(p->_filename);
+  Py_CLEAR(p->_file);
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__PythonSaxParserTarget(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__InputDocument(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *p = (struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *)o;
-  e = ((likely(__pyx_ptype_4lxml_5etree__SaxParserTarget)) ? ((__pyx_ptype_4lxml_5etree__SaxParserTarget->tp_traverse) ? __pyx_ptype_4lxml_5etree__SaxParserTarget->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_4lxml_5etree__PythonSaxParserTarget)); if (e) return e;
-  if (p->_target_start) {
-    e = (*v)(p->_target_start, a); if (e) return e;
-  }
-  if (p->_target_end) {
-    e = (*v)(p->_target_end, a); if (e) return e;
-  }
-  if (p->_target_data) {
-    e = (*v)(p->_target_data, a); if (e) return e;
-  }
-  if (p->_target_doctype) {
-    e = (*v)(p->_target_doctype, a); if (e) return e;
-  }
-  if (p->_target_pi) {
-    e = (*v)(p->_target_pi, a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__InputDocument *p = (struct __pyx_obj_4lxml_5etree__InputDocument *)o;
+  if (p->_filename) {
+    e = (*v)(p->_filename, a); if (e) return e;
   }
-  if (p->_target_comment) {
-    e = (*v)(p->_target_comment, a); if (e) return e;
+  if (p->_file) {
+    e = (*v)(p->_file, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__PythonSaxParserTarget(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *p = (struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *)o;
-  if (likely(__pyx_ptype_4lxml_5etree__SaxParserTarget)) { if (__pyx_ptype_4lxml_5etree__SaxParserTarget->tp_clear) __pyx_ptype_4lxml_5etree__SaxParserTarget->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_4lxml_5etree__PythonSaxParserTarget);
-  Py_CLEAR(p->_target_start);
-  Py_CLEAR(p->_target_end);
-  Py_CLEAR(p->_target_data);
-  Py_CLEAR(p->_target_doctype);
-  Py_CLEAR(p->_target_pi);
-  Py_CLEAR(p->_target_comment);
+static int __pyx_tp_clear_4lxml_5etree__InputDocument(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__InputDocument *p = (struct __pyx_obj_4lxml_5etree__InputDocument *)o;
+  Py_CLEAR(p->_filename);
+  Py_CLEAR(p->_file);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__PythonSaxParserTarget[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree__InputDocument[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__PythonSaxParserTarget = {
+static PyTypeObject __pyx_type_4lxml_5etree__InputDocument = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._PythonSaxParserTarget"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._InputDocument"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__InputDocument), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__PythonSaxParserTarget, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__InputDocument, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -179067,13 +179311,13 @@ static PyTypeObject __pyx_type_4lxml_5etree__PythonSaxParserTarget = {
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__PythonSaxParserTarget, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__PythonSaxParserTarget, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__InputDocument, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__InputDocument, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__PythonSaxParserTarget, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__InputDocument, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -179083,7 +179327,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__PythonSaxParserTarget = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__PythonSaxParserTarget, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__InputDocument, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -179100,57 +179344,41 @@ static PyTypeObject __pyx_type_4lxml_5etree__PythonSaxParserTarget = {
   #endif
 };
 
-static struct __pyx_obj_4lxml_5etree_CDATA *__pyx_freelist_4lxml_5etree_CDATA[8];
-static int __pyx_freecount_4lxml_5etree_CDATA = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree_CDATA(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_CDATA *p;
+static PyObject *__pyx_tp_new_4lxml_5etree_Resolver(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
   PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree_CDATA > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree_CDATA)) & ((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree_CDATA[--__pyx_freecount_4lxml_5etree_CDATA];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree_CDATA));
-    (void) PyObject_INIT(o, t);
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
   } else {
-    if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-      o = (*t->tp_alloc)(t, 0);
-    } else {
-      o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-    }
-    if (unlikely(!o)) return 0;
-  }
-  p = ((struct __pyx_obj_4lxml_5etree_CDATA *)o);
-  p->_utf8_data = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_5CDATA_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
+  if (unlikely(!o)) return 0;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_CDATA(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_CDATA *p = (struct __pyx_obj_4lxml_5etree_CDATA *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_Resolver(PyObject *o) {
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
-  Py_CLEAR(p->_utf8_data);
-  if ((__pyx_freecount_4lxml_5etree_CDATA < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree_CDATA))) {
-    __pyx_freelist_4lxml_5etree_CDATA[__pyx_freecount_4lxml_5etree_CDATA++] = ((struct __pyx_obj_4lxml_5etree_CDATA *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
-  }
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_CDATA[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_Resolver[] = {
+  {__Pyx_NAMESTR("resolve"), (PyCFunction)__pyx_pw_4lxml_5etree_8Resolver_1resolve, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_8Resolver_resolve)},
+  {__Pyx_NAMESTR("resolve_empty"), (PyCFunction)__pyx_pw_4lxml_5etree_8Resolver_3resolve_empty, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_8Resolver_2resolve_empty)},
+  {__Pyx_NAMESTR("resolve_string"), (PyCFunction)__pyx_pw_4lxml_5etree_8Resolver_5resolve_string, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_8Resolver_4resolve_string)},
+  {__Pyx_NAMESTR("resolve_filename"), (PyCFunction)__pyx_pw_4lxml_5etree_8Resolver_7resolve_filename, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_8Resolver_6resolve_filename)},
+  {__Pyx_NAMESTR("resolve_file"), (PyCFunction)__pyx_pw_4lxml_5etree_8Resolver_9resolve_file, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_8Resolver_8resolve_file)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_CDATA = {
+static PyTypeObject __pyx_type_4lxml_5etree_Resolver = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.CDATA"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_CDATA), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.Resolver"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_Resolver), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_CDATA, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_Resolver, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -179170,14 +179398,14 @@ static PyTypeObject __pyx_type_4lxml_5etree_CDATA = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
-  __Pyx_DOCSTR("CDATA(data)\n\n    CDATA factory.  This factory creates an opaque data object that\n    can be used to set Element text.  The usual way to use it is::\n\n        >>> el = Element('content')\n        >>> el.text = CDATA('a string')\n\n        >>> print(el.text)\n        a string\n        >>> print(tostring(el, encoding=\"unicode\"))\n        <content><![CDATA[a string]]></content>\n    "), /*tp_doc*/
+  __Pyx_DOCSTR("This is the base class of all resolvers."), /*tp_doc*/
   0, /*tp_traverse*/
   0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_CDATA, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_Resolver, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -179187,7 +179415,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_CDATA = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_CDATA, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_Resolver, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -179203,68 +179431,64 @@ static PyTypeObject __pyx_type_4lxml_5etree_CDATA = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree__ResolverRegistry __pyx_vtable_4lxml_5etree__ResolverRegistry;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_xmlfile(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_xmlfile *p;
+static PyObject *__pyx_tp_new_4lxml_5etree__ResolverRegistry(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ResolverRegistry *p;
   PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+  o = (*t->tp_alloc)(t, 0);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_xmlfile *)o);
-  p->output_file = Py_None; Py_INCREF(Py_None);
-  p->encoding = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->writer = ((struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)Py_None); Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ResolverRegistry;
+  p->_resolvers = Py_None; Py_INCREF(Py_None);
+  p->_default_resolver = ((struct __pyx_obj_4lxml_5etree_Resolver *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_17_ResolverRegistry_1__cinit__(o, a, k) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_xmlfile(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_xmlfile *p = (struct __pyx_obj_4lxml_5etree_xmlfile *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
+static void __pyx_tp_dealloc_4lxml_5etree__ResolverRegistry(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ResolverRegistry *p = (struct __pyx_obj_4lxml_5etree__ResolverRegistry *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->output_file);
-  Py_CLEAR(p->encoding);
-  Py_CLEAR(p->writer);
+  Py_CLEAR(p->_resolvers);
+  Py_CLEAR(p->_default_resolver);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree_xmlfile(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__ResolverRegistry(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree_xmlfile *p = (struct __pyx_obj_4lxml_5etree_xmlfile *)o;
-  if (p->output_file) {
-    e = (*v)(p->output_file, a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__ResolverRegistry *p = (struct __pyx_obj_4lxml_5etree__ResolverRegistry *)o;
+  if (p->_resolvers) {
+    e = (*v)(p->_resolvers, a); if (e) return e;
   }
-  if (p->writer) {
-    e = (*v)(((PyObject*)p->writer), a); if (e) return e;
+  if (p->_default_resolver) {
+    e = (*v)(((PyObject*)p->_default_resolver), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree_xmlfile(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_xmlfile *p = (struct __pyx_obj_4lxml_5etree_xmlfile *)o;
-  Py_CLEAR(p->output_file);
-  Py_CLEAR(p->writer);
+static int __pyx_tp_clear_4lxml_5etree__ResolverRegistry(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ResolverRegistry *p = (struct __pyx_obj_4lxml_5etree__ResolverRegistry *)o;
+  Py_CLEAR(p->_resolvers);
+  Py_CLEAR(p->_default_resolver);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_xmlfile[] = {
-  {__Pyx_NAMESTR("__enter__"), (PyCFunction)__pyx_pw_4lxml_5etree_7xmlfile_3__enter__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("__exit__"), (PyCFunction)__pyx_pw_4lxml_5etree_7xmlfile_5__exit__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree__ResolverRegistry[] = {
+  {__Pyx_NAMESTR("add"), (PyCFunction)__pyx_pw_4lxml_5etree_17_ResolverRegistry_3add, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_17_ResolverRegistry_2add)},
+  {__Pyx_NAMESTR("remove"), (PyCFunction)__pyx_pw_4lxml_5etree_17_ResolverRegistry_5remove, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_17_ResolverRegistry_4remove)},
+  {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_4lxml_5etree_17_ResolverRegistry_7copy, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_17_ResolverRegistry_6copy)},
+  {__Pyx_NAMESTR("resolve"), (PyCFunction)__pyx_pw_4lxml_5etree_17_ResolverRegistry_9resolve, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_17_ResolverRegistry_8resolve)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_xmlfile = {
+static PyTypeObject __pyx_type_4lxml_5etree__ResolverRegistry = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.xmlfile"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_xmlfile), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ResolverRegistry"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ResolverRegistry), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_xmlfile, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ResolverRegistry, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -179273,7 +179497,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_xmlfile = {
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_17_ResolverRegistry_11__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -179283,15 +179507,15 @@ static PyTypeObject __pyx_type_4lxml_5etree_xmlfile = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("xmlfile(self, output_file, encoding=None, compression=None)\n\n    A simple mechanism for incremental XML serialisation.\n\n    Usage example::\n\n         with xmlfile(\"somefile.xml\", encoding='utf-8') as xf:\n             xf.write_declaration(standalone=True)\n             xf.write_doctype('<!DOCTYPE root SYSTEM \"some.dtd\">')\n\n             # generate an element (the root element)\n             with xf.element('root'):\n                  # write a complete Element into the open root element\n                  xf.write(etree.Element('test'))\n\n                  # generate and write more Elements, e.g. through iterparse\n                  for element in generate_some_elements():\n                      # serialise generated elements into the XML file\n                      xf.write(element)\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_xmlfile, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_xmlfile, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ResolverRegistry, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ResolverRegistry, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_xmlfile, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__ResolverRegistry, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -179299,9 +179523,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_xmlfile = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_7xmlfile_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_xmlfile, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ResolverRegistry, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -179317,92 +179541,60 @@ static PyTypeObject __pyx_type_4lxml_5etree_xmlfile = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree__ResolverContext __pyx_vtable_4lxml_5etree__ResolverContext;
 
-static struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *__pyx_freelist_4lxml_5etree__DTDElementContentDecl[8];
-static int __pyx_freecount_4lxml_5etree__DTDElementContentDecl = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree__DTDElementContentDecl(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *p;
-  PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree__DTDElementContentDecl > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDElementContentDecl)))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDElementContentDecl[--__pyx_freecount_4lxml_5etree__DTDElementContentDecl];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__DTDElementContentDecl));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
-  } else {
-    o = (*t->tp_alloc)(t, 0);
-    if (unlikely(!o)) return 0;
-  }
-  p = ((struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *)o);
-  p->_dtd = ((struct __pyx_obj_4lxml_5etree_DTD *)Py_None); Py_INCREF(Py_None);
+static PyObject *__pyx_tp_new_4lxml_5etree__ResolverContext(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ResolverContext *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ExceptionContext(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree__ResolverContext *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext*)__pyx_vtabptr_4lxml_5etree__ResolverContext;
+  p->_resolvers = ((struct __pyx_obj_4lxml_5etree__ResolverRegistry *)Py_None); Py_INCREF(Py_None);
+  p->_storage = ((struct __pyx_obj_4lxml_5etree__TempStore *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__DTDElementContentDecl(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *p = (struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_dtd);
-  if ((__pyx_freecount_4lxml_5etree__DTDElementContentDecl < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDElementContentDecl))) {
-    __pyx_freelist_4lxml_5etree__DTDElementContentDecl[__pyx_freecount_4lxml_5etree__DTDElementContentDecl++] = ((struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
+static void __pyx_tp_dealloc_4lxml_5etree__ResolverContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ResolverContext *p = (struct __pyx_obj_4lxml_5etree__ResolverContext *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_resolvers);
+  Py_CLEAR(p->_storage);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__ExceptionContext(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__DTDElementContentDecl(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__ResolverContext(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *p = (struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *)o;
-  if (p->_dtd) {
-    e = (*v)(((PyObject*)p->_dtd), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__ResolverContext *p = (struct __pyx_obj_4lxml_5etree__ResolverContext *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__ExceptionContext(o, v, a); if (e) return e;
+  if (p->_resolvers) {
+    e = (*v)(((PyObject*)p->_resolvers), a); if (e) return e;
+  }
+  if (p->_storage) {
+    e = (*v)(((PyObject*)p->_storage), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__DTDElementContentDecl(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *p = (struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *)o;
-  Py_CLEAR(p->_dtd);
+static int __pyx_tp_clear_4lxml_5etree__ResolverContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ResolverContext *p = (struct __pyx_obj_4lxml_5etree__ResolverContext *)o;
+  __pyx_tp_clear_4lxml_5etree__ExceptionContext(o);
+  Py_CLEAR(p->_resolvers);
+  Py_CLEAR(p->_storage);
   return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_22_DTDElementContentDecl_4name_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_type(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_22_DTDElementContentDecl_4type_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_occur(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_22_DTDElementContentDecl_5occur_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_left(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_22_DTDElementContentDecl_4left_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_right(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_22_DTDElementContentDecl_5right_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__DTDElementContentDecl[] = {
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__DTDElementContentDecl[] = {
-  {(char *)"name", __pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_name, 0, 0, 0},
-  {(char *)"type", __pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_type, 0, 0, 0},
-  {(char *)"occur", __pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_occur, 0, 0, 0},
-  {(char *)"left", __pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_left, 0, 0, 0},
-  {(char *)"right", __pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_right, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__DTDElementContentDecl = {
+static PyTypeObject __pyx_type_4lxml_5etree__ResolverContext = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._DTDElementContentDecl"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__DTDElementContentDecl), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ResolverContext"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ResolverContext), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__DTDElementContentDecl, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ResolverContext, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -179411,7 +179603,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDElementContentDecl = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_22_DTDElementContentDecl_1__repr__, /*tp_repr*/
+  0, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -179421,17 +179613,17 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDElementContentDecl = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__DTDElementContentDecl, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__DTDElementContentDecl, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__ResolverContext, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ResolverContext, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__DTDElementContentDecl, /*tp_methods*/
+  0, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__DTDElementContentDecl, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -179439,7 +179631,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDElementContentDecl = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__DTDElementContentDecl, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ResolverContext, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -179455,150 +179647,81 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDElementContentDecl = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ListErrorLog __pyx_vtable_4lxml_5etree__ListErrorLog;
+static struct __pyx_vtabstruct_4lxml_5etree__ParserContext __pyx_vtable_4lxml_5etree__ParserContext;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ListErrorLog(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ListErrorLog *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__BaseErrorLog(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__ParserContext(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ParserContext *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ResolverContext(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ListErrorLog *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog*)__pyx_vtabptr_4lxml_5etree__ListErrorLog;
-  p->_entries = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree__ParserContext *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext*)__pyx_vtabptr_4lxml_5etree__ParserContext;
+  p->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
+  p->_validator = ((struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *)Py_None); Py_INCREF(Py_None);
+  p->_doc = ((struct LxmlDocument *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_14_ParserContext_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ListErrorLog(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ListErrorLog *p = (struct __pyx_obj_4lxml_5etree__ListErrorLog *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__ParserContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ParserContext *p = (struct __pyx_obj_4lxml_5etree__ParserContext *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_entries);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_4lxml_5etree_14_ParserContext_3__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_CLEAR(p->_error_log);
+  Py_CLEAR(p->_validator);
+  Py_CLEAR(p->_doc);
   PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__BaseErrorLog(o);
+  __pyx_tp_dealloc_4lxml_5etree__ResolverContext(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__ListErrorLog(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__ParserContext(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__ListErrorLog *p = (struct __pyx_obj_4lxml_5etree__ListErrorLog *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__BaseErrorLog(o, v, a); if (e) return e;
-  if (p->_entries) {
-    e = (*v)(p->_entries, a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__ParserContext *p = (struct __pyx_obj_4lxml_5etree__ParserContext *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__ResolverContext(o, v, a); if (e) return e;
+  if (p->_error_log) {
+    e = (*v)(((PyObject*)p->_error_log), a); if (e) return e;
+  }
+  if (p->_validator) {
+    e = (*v)(((PyObject*)p->_validator), a); if (e) return e;
+  }
+  if (p->_doc) {
+    e = (*v)(((PyObject*)p->_doc), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__ListErrorLog(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ListErrorLog *p = (struct __pyx_obj_4lxml_5etree__ListErrorLog *)o;
-  __pyx_tp_clear_4lxml_5etree__BaseErrorLog(o);
-  Py_CLEAR(p->_entries);
-  return 0;
-}
-static PyObject *__pyx_sq_item_4lxml_5etree__ListErrorLog(PyObject *o, Py_ssize_t i) {
-  PyObject *r;
-  PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
-  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
-  Py_DECREF(x);
-  return r;
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__ListErrorLog[] = {
-  {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_3copy, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_2copy)},
-  {__Pyx_NAMESTR("filter_domains"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_17filter_domains, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_16filter_domains)},
-  {__Pyx_NAMESTR("filter_types"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_19filter_types, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_18filter_types)},
-  {__Pyx_NAMESTR("filter_levels"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_21filter_levels, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_20filter_levels)},
-  {__Pyx_NAMESTR("filter_from_level"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_23filter_from_level, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_22filter_from_level)},
-  {__Pyx_NAMESTR("filter_from_fatals"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_25filter_from_fatals, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_24filter_from_fatals)},
-  {__Pyx_NAMESTR("filter_from_errors"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_27filter_from_errors, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_26filter_from_errors)},
-  {__Pyx_NAMESTR("filter_from_warnings"), (PyCFunction)__pyx_pw_4lxml_5etree_13_ListErrorLog_29filter_from_warnings, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13_ListErrorLog_28filter_from_warnings)},
-  {0, 0, 0, 0}
-};
-
-static PyNumberMethods __pyx_tp_as_number__ListErrorLog = {
-  0, /*nb_add*/
-  0, /*nb_subtract*/
-  0, /*nb_multiply*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_divide*/
-  #endif
-  0, /*nb_remainder*/
-  0, /*nb_divmod*/
-  0, /*nb_power*/
-  0, /*nb_negative*/
-  0, /*nb_positive*/
-  0, /*nb_absolute*/
-  __pyx_pw_4lxml_5etree_13_ListErrorLog_15__nonzero__, /*nb_nonzero*/
-  0, /*nb_invert*/
-  0, /*nb_lshift*/
-  0, /*nb_rshift*/
-  0, /*nb_and*/
-  0, /*nb_xor*/
-  0, /*nb_or*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_coerce*/
-  #endif
-  0, /*nb_int*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_long*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*nb_float*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_oct*/
-  #endif
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_hex*/
-  #endif
-  0, /*nb_inplace_add*/
-  0, /*nb_inplace_subtract*/
-  0, /*nb_inplace_multiply*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_inplace_divide*/
-  #endif
-  0, /*nb_inplace_remainder*/
-  0, /*nb_inplace_power*/
-  0, /*nb_inplace_lshift*/
-  0, /*nb_inplace_rshift*/
-  0, /*nb_inplace_and*/
-  0, /*nb_inplace_xor*/
-  0, /*nb_inplace_or*/
-  0, /*nb_floor_divide*/
-  0, /*nb_true_divide*/
-  0, /*nb_inplace_floor_divide*/
-  0, /*nb_inplace_true_divide*/
-  #if PY_VERSION_HEX >= 0x02050000
-  0, /*nb_index*/
-  #endif
-};
-
-static PySequenceMethods __pyx_tp_as_sequence__ListErrorLog = {
-  __pyx_pw_4lxml_5etree_13_ListErrorLog_11__len__, /*sq_length*/
-  0, /*sq_concat*/
-  0, /*sq_repeat*/
-  __pyx_sq_item_4lxml_5etree__ListErrorLog, /*sq_item*/
-  0, /*sq_slice*/
-  0, /*sq_ass_item*/
-  0, /*sq_ass_slice*/
-  __pyx_pw_4lxml_5etree_13_ListErrorLog_13__contains__, /*sq_contains*/
-  0, /*sq_inplace_concat*/
-  0, /*sq_inplace_repeat*/
-};
+static int __pyx_tp_clear_4lxml_5etree__ParserContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ParserContext *p = (struct __pyx_obj_4lxml_5etree__ParserContext *)o;
+  __pyx_tp_clear_4lxml_5etree__ResolverContext(o);
+  Py_CLEAR(p->_error_log);
+  Py_CLEAR(p->_validator);
+  Py_CLEAR(p->_doc);
+  return 0;
+}
 
-static PyMappingMethods __pyx_tp_as_mapping__ListErrorLog = {
-  __pyx_pw_4lxml_5etree_13_ListErrorLog_11__len__, /*mp_length*/
-  __pyx_pw_4lxml_5etree_13_ListErrorLog_9__getitem__, /*mp_subscript*/
-  0, /*mp_ass_subscript*/
+static PyMethodDef __pyx_methods_4lxml_5etree__ParserContext[] = {
+  {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ListErrorLog = {
+static PyTypeObject __pyx_type_4lxml_5etree__ParserContext = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ListErrorLog"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ListErrorLog), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ParserContext"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ParserContext), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ListErrorLog, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ParserContext, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -179607,10 +179730,10 @@ static PyTypeObject __pyx_type_4lxml_5etree__ListErrorLog = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_13_ListErrorLog_7__repr__, /*tp_repr*/
-  &__pyx_tp_as_number__ListErrorLog, /*tp_as_number*/
-  &__pyx_tp_as_sequence__ListErrorLog, /*tp_as_sequence*/
-  &__pyx_tp_as_mapping__ListErrorLog, /*tp_as_mapping*/
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
   0, /*tp_hash*/
   0, /*tp_call*/
   0, /*tp_str*/
@@ -179618,14 +179741,14 @@ static PyTypeObject __pyx_type_4lxml_5etree__ListErrorLog = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("Immutable base version of a list based error log."), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ListErrorLog, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ListErrorLog, /*tp_clear*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ParserContext, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ParserContext, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_4lxml_5etree_13_ListErrorLog_5__iter__, /*tp_iter*/
+  0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ListErrorLog, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__ParserContext, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -179633,9 +179756,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__ListErrorLog = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_13_ListErrorLog_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ListErrorLog, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ParserContext, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -179651,65 +179774,97 @@ static PyTypeObject __pyx_type_4lxml_5etree__ListErrorLog = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ErrorLog __pyx_vtable_4lxml_5etree__ErrorLog;
+static struct __pyx_vtabstruct_4lxml_5etree__SaxParserContext __pyx_vtable_4lxml_5etree__SaxParserContext;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ErrorLog(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ErrorLog *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ListErrorLog(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__SaxParserContext(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__SaxParserContext *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ParserContext(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog*)__pyx_vtabptr_4lxml_5etree__ErrorLog;
-  p->_logContexts = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_9_ErrorLog_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree__SaxParserContext *)o);
+  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext*)__pyx_vtabptr_4lxml_5etree__SaxParserContext;
+  p->_target = ((struct __pyx_obj_4lxml_5etree__SaxParserTarget *)Py_None); Py_INCREF(Py_None);
+  p->_parser = ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None); Py_INCREF(Py_None);
+  p->_ns_stack = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_node_stack = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->events_iterator = ((struct __pyx_obj_4lxml_5etree__ParseEventsIterator *)Py_None); Py_INCREF(Py_None);
+  p->_root = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
+  p->_matcher = ((struct __pyx_obj_4lxml_5etree__MultiTagMatcher *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_17_SaxParserContext_1__cinit__(o, a, k) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ErrorLog(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ErrorLog *p = (struct __pyx_obj_4lxml_5etree__ErrorLog *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__SaxParserContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__SaxParserContext *p = (struct __pyx_obj_4lxml_5etree__SaxParserContext *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_logContexts);
+  Py_CLEAR(p->_target);
+  Py_CLEAR(p->_parser);
+  Py_CLEAR(p->_ns_stack);
+  Py_CLEAR(p->_node_stack);
+  Py_CLEAR(p->events_iterator);
+  Py_CLEAR(p->_root);
+  Py_CLEAR(p->_matcher);
   PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__ListErrorLog(o);
+  __pyx_tp_dealloc_4lxml_5etree__ParserContext(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__ErrorLog(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__SaxParserContext(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__ErrorLog *p = (struct __pyx_obj_4lxml_5etree__ErrorLog *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__ListErrorLog(o, v, a); if (e) return e;
-  if (p->_logContexts) {
-    e = (*v)(p->_logContexts, a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__SaxParserContext *p = (struct __pyx_obj_4lxml_5etree__SaxParserContext *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__ParserContext(o, v, a); if (e) return e;
+  if (p->_target) {
+    e = (*v)(((PyObject*)p->_target), a); if (e) return e;
+  }
+  if (p->_parser) {
+    e = (*v)(((PyObject*)p->_parser), a); if (e) return e;
+  }
+  if (p->_ns_stack) {
+    e = (*v)(p->_ns_stack, a); if (e) return e;
+  }
+  if (p->_node_stack) {
+    e = (*v)(p->_node_stack, a); if (e) return e;
+  }
+  if (p->events_iterator) {
+    e = (*v)(((PyObject*)p->events_iterator), a); if (e) return e;
+  }
+  if (p->_root) {
+    e = (*v)(((PyObject*)p->_root), a); if (e) return e;
+  }
+  if (p->_matcher) {
+    e = (*v)(((PyObject*)p->_matcher), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__ErrorLog(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ErrorLog *p = (struct __pyx_obj_4lxml_5etree__ErrorLog *)o;
-  __pyx_tp_clear_4lxml_5etree__ListErrorLog(o);
-  Py_CLEAR(p->_logContexts);
+static int __pyx_tp_clear_4lxml_5etree__SaxParserContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__SaxParserContext *p = (struct __pyx_obj_4lxml_5etree__SaxParserContext *)o;
+  __pyx_tp_clear_4lxml_5etree__ParserContext(o);
+  Py_CLEAR(p->_target);
+  Py_CLEAR(p->_parser);
+  Py_CLEAR(p->_ns_stack);
+  Py_CLEAR(p->_node_stack);
+  Py_CLEAR(p->events_iterator);
+  Py_CLEAR(p->_root);
+  Py_CLEAR(p->_matcher);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__ErrorLog[] = {
-  {__Pyx_NAMESTR("__exit__"), (PyCFunction)__pyx_pw_4lxml_5etree_9_ErrorLog_5__exit__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("clear"), (PyCFunction)__pyx_pw_4lxml_5etree_9_ErrorLog_7clear, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_4lxml_5etree_9_ErrorLog_9copy, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_9_ErrorLog_8copy)},
-  {__Pyx_NAMESTR("receive"), (PyCFunction)__pyx_pw_4lxml_5etree_9_ErrorLog_13receive, METH_O, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree__SaxParserContext[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ErrorLog = {
+static PyTypeObject __pyx_type_4lxml_5etree__SaxParserContext = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ErrorLog"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ErrorLog), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._SaxParserContext"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__SaxParserContext), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ErrorLog, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__SaxParserContext, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -179718,11 +179873,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ErrorLog = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_13_ListErrorLog_7__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -179733,14 +179884,14 @@ static PyTypeObject __pyx_type_4lxml_5etree__ErrorLog = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ErrorLog, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ErrorLog, /*tp_clear*/
+  __Pyx_DOCSTR("This class maps SAX2 events to parser target events.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__SaxParserContext, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__SaxParserContext, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_4lxml_5etree_9_ErrorLog_11__iter__, /*tp_iter*/
+  0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ErrorLog, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__SaxParserContext, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -179748,9 +179899,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__ErrorLog = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_9_ErrorLog_3__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ErrorLog, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__SaxParserContext, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -179766,32 +179917,49 @@ static PyTypeObject __pyx_type_4lxml_5etree__ErrorLog = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyPIProxy __pyx_vtable_4lxml_5etree__ReadOnlyPIProxy;
+static struct __pyx_vtabstruct_4lxml_5etree__TargetParserContext __pyx_vtable_4lxml_5etree__TargetParserContext;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ReadOnlyPIProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ReadOnlyPIProxy *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ReadOnlyProxy(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__TargetParserContext(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__TargetParserContext *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__SaxParserContext(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ReadOnlyPIProxy *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__ReadOnlyPIProxy;
+  p = ((struct __pyx_obj_4lxml_5etree__TargetParserContext *)o);
+  p->__pyx_base.__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext*)__pyx_vtabptr_4lxml_5etree__TargetParserContext;
+  p->_python_target = Py_None; Py_INCREF(Py_None);
   return o;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_16_ReadOnlyPIProxy_target(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_16_ReadOnlyPIProxy_6target_1__get__(o);
+static void __pyx_tp_dealloc_4lxml_5etree__TargetParserContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__TargetParserContext *p = (struct __pyx_obj_4lxml_5etree__TargetParserContext *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_python_target);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__SaxParserContext(o);
 }
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ReadOnlyPIProxy[] = {
-  {(char *)"target", __pyx_getprop_4lxml_5etree_16_ReadOnlyPIProxy_target, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
+static int __pyx_tp_traverse_4lxml_5etree__TargetParserContext(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__TargetParserContext *p = (struct __pyx_obj_4lxml_5etree__TargetParserContext *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__SaxParserContext(o, v, a); if (e) return e;
+  if (p->_python_target) {
+    e = (*v)(p->_python_target, a); if (e) return e;
+  }
+  return 0;
+}
 
-static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyPIProxy = {
+static int __pyx_tp_clear_4lxml_5etree__TargetParserContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__TargetParserContext *p = (struct __pyx_obj_4lxml_5etree__TargetParserContext *)o;
+  __pyx_tp_clear_4lxml_5etree__SaxParserContext(o);
+  Py_CLEAR(p->_python_target);
+  return 0;
+}
+
+static PyTypeObject __pyx_type_4lxml_5etree__TargetParserContext = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ReadOnlyPIProxy"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ReadOnlyPIProxy), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._TargetParserContext"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__TargetParserContext), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__TargetParserContext, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -179800,11 +179968,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyPIProxy = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_3__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -179815,20 +179979,16 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyPIProxy = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("A read-only proxy for processing instructions (for internal use only!)"), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ReadOnlyProxy, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ReadOnlyProxy, /*tp_clear*/
+  __Pyx_DOCSTR("This class maps SAX2 events to the ET parser target interface.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__TargetParserContext, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__TargetParserContext, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_15__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
   0, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__ReadOnlyPIProxy, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -179836,7 +179996,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyPIProxy = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ReadOnlyPIProxy, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__TargetParserContext, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -179852,103 +180012,62 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyPIProxy = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__XSLTResultTree __pyx_vtable_4lxml_5etree__XSLTResultTree;
+static struct __pyx_vtabstruct_4lxml_5etree__ParserSchemaValidationContext __pyx_vtable_4lxml_5etree__ParserSchemaValidationContext;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__XSLTResultTree(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__XSLTResultTree *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ElementTree(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__ParserSchemaValidationContext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *p;
+  PyObject *o;
+  o = (*t->tp_alloc)(t, 0);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__XSLTResultTree *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ElementTree*)__pyx_vtabptr_4lxml_5etree__XSLTResultTree;
-  p->_xslt = ((struct __pyx_obj_4lxml_5etree_XSLT *)Py_None); Py_INCREF(Py_None);
-  p->_profile = ((struct LxmlDocument *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_15_XSLTResultTree_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ParserSchemaValidationContext;
+  p->_schema = ((struct __pyx_obj_4lxml_5etree_XMLSchema *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_30_ParserSchemaValidationContext_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__XSLTResultTree(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__XSLTResultTree *p = (struct __pyx_obj_4lxml_5etree__XSLTResultTree *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__ParserSchemaValidationContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *p = (struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_xslt);
-  Py_CLEAR(p->_profile);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__ElementTree(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_4lxml_5etree_30_ParserSchemaValidationContext_3__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_CLEAR(p->_schema);
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__XSLTResultTree(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__ParserSchemaValidationContext(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__XSLTResultTree *p = (struct __pyx_obj_4lxml_5etree__XSLTResultTree *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__ElementTree(o, v, a); if (e) return e;
-  if (p->_xslt) {
-    e = (*v)(((PyObject*)p->_xslt), a); if (e) return e;
-  }
-  if (p->_profile) {
-    e = (*v)(((PyObject*)p->_profile), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *p = (struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *)o;
+  if (p->_schema) {
+    e = (*v)(((PyObject*)p->_schema), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__XSLTResultTree(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__XSLTResultTree *p = (struct __pyx_obj_4lxml_5etree__XSLTResultTree *)o;
-  __pyx_tp_clear_4lxml_5etree__ElementTree(o);
-  Py_CLEAR(p->_xslt);
-  Py_CLEAR(p->_profile);
+static int __pyx_tp_clear_4lxml_5etree__ParserSchemaValidationContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *p = (struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *)o;
+  Py_CLEAR(p->_schema);
   return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_15_XSLTResultTree_xslt_profile(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_15_XSLTResultTree_12xslt_profile_1__get__(o);
-}
-
-static int __pyx_setprop_4lxml_5etree_15_XSLTResultTree_xslt_profile(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    PyErr_SetString(PyExc_NotImplementedError, "__set__");
-    return -1;
-  }
-  else {
-    return __pyx_pw_4lxml_5etree_15_XSLTResultTree_12xslt_profile_3__del__(o);
-  }
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__XSLTResultTree[] = {
-  {__Pyx_NAMESTR("__unicode__"), (PyCFunction)__pyx_pw_4lxml_5etree_15_XSLTResultTree_5__unicode__, METH_NOARGS, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree__ParserSchemaValidationContext[] = {
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__XSLTResultTree[] = {
-  {(char *)"xslt_profile", __pyx_getprop_4lxml_5etree_15_XSLTResultTree_xslt_profile, __pyx_setprop_4lxml_5etree_15_XSLTResultTree_xslt_profile, __Pyx_DOCSTR(__pyx_k_Return_an_ElementTree_with_profi), 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyBufferProcs __pyx_tp_as_buffer__XSLTResultTree = {
-  #if PY_MAJOR_VERSION < 3
-  0, /*bf_getreadbuffer*/
-  #endif
-  #if PY_MAJOR_VERSION < 3
-  0, /*bf_getwritebuffer*/
-  #endif
-  #if PY_MAJOR_VERSION < 3
-  0, /*bf_getsegcount*/
-  #endif
-  #if PY_MAJOR_VERSION < 3
-  0, /*bf_getcharbuffer*/
-  #endif
-  #if PY_VERSION_HEX >= 0x02060000
-  __pyx_pw_4lxml_5etree_15_XSLTResultTree_7__getbuffer__, /*bf_getbuffer*/
-  #endif
-  #if PY_VERSION_HEX >= 0x02060000
-  __pyx_pw_4lxml_5etree_15_XSLTResultTree_9__releasebuffer__, /*bf_releasebuffer*/
-  #endif
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__XSLTResultTree = {
+static PyTypeObject __pyx_type_4lxml_5etree__ParserSchemaValidationContext = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._XSLTResultTree"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__XSLTResultTree), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ParserSchemaValidationContext"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__XSLTResultTree, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ParserSchemaValidationContext, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -179963,21 +180082,21 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTResultTree = {
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
   0, /*tp_call*/
-  __pyx_pw_4lxml_5etree_15_XSLTResultTree_3__str__, /*tp_str*/
+  0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
-  &__pyx_tp_as_buffer__XSLTResultTree, /*tp_as_buffer*/
+  0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__XSLTResultTree, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__XSLTResultTree, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__ParserSchemaValidationContext, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ParserSchemaValidationContext, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__XSLTResultTree, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__ParserSchemaValidationContext, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__XSLTResultTree, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -179985,7 +180104,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTResultTree = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__XSLTResultTree, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ParserSchemaValidationContext, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -180001,9 +180120,10 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTResultTree = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree__Validator __pyx_vtable_4lxml_5etree__Validator;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementTextIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_ElementTextIterator *p;
+static PyObject *__pyx_tp_new_4lxml_5etree__Validator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__Validator *p;
   PyObject *o;
   if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
     o = (*t->tp_alloc)(t, 0);
@@ -180011,58 +180131,66 @@ static PyObject *__pyx_tp_new_4lxml_5etree_ElementTextIterator(PyTypeObject *t,
     o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_ElementTextIterator *)o);
-  p->_nextEvent = Py_None; Py_INCREF(Py_None);
-  p->_start_element = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_19ElementTextIterator_1__cinit__(o, a, k) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree__Validator *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__Validator;
+  p->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_10_Validator_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_ElementTextIterator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_ElementTextIterator *p = (struct __pyx_obj_4lxml_5etree_ElementTextIterator *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__Validator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__Validator *p = (struct __pyx_obj_4lxml_5etree__Validator *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_nextEvent);
-  Py_CLEAR(p->_start_element);
+  Py_CLEAR(p->_error_log);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree_ElementTextIterator(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__Validator(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree_ElementTextIterator *p = (struct __pyx_obj_4lxml_5etree_ElementTextIterator *)o;
-  if (p->_nextEvent) {
-    e = (*v)(p->_nextEvent, a); if (e) return e;
-  }
-  if (p->_start_element) {
-    e = (*v)(((PyObject*)p->_start_element), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__Validator *p = (struct __pyx_obj_4lxml_5etree__Validator *)o;
+  if (p->_error_log) {
+    e = (*v)(((PyObject*)p->_error_log), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree_ElementTextIterator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_ElementTextIterator *p = (struct __pyx_obj_4lxml_5etree_ElementTextIterator *)o;
-  Py_CLEAR(p->_nextEvent);
-  Py_CLEAR(p->_start_element);
+static int __pyx_tp_clear_4lxml_5etree__Validator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__Validator *p = (struct __pyx_obj_4lxml_5etree__Validator *)o;
+  Py_CLEAR(p->_error_log);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_ElementTextIterator[] = {
-  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_19ElementTextIterator_5__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
+static PyObject *__pyx_getprop_4lxml_5etree_10_Validator_error_log(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_10_Validator_9error_log_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__Validator[] = {
+  {__Pyx_NAMESTR("validate"), (PyCFunction)__pyx_pw_4lxml_5etree_10_Validator_3validate, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_10_Validator_2validate)},
+  {__Pyx_NAMESTR("assertValid"), (PyCFunction)__pyx_pw_4lxml_5etree_10_Validator_5assertValid, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_10_Validator_4assertValid)},
+  {__Pyx_NAMESTR("assert_"), (PyCFunction)__pyx_pw_4lxml_5etree_10_Validator_7assert_, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_10_Validator_6assert_)},
+  {__Pyx_NAMESTR("_append_log_message"), (PyCFunction)__pyx_pw_4lxml_5etree_10_Validator_9_append_log_message, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("_clear_error_log"), (PyCFunction)__pyx_pw_4lxml_5etree_10_Validator_11_clear_error_log, METH_NOARGS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_ElementTextIterator = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__Validator[] = {
+  {(char *)"error_log", __pyx_getprop_4lxml_5etree_10_Validator_error_log, 0, __Pyx_DOCSTR(__pyx_k_The_log_of_validation_errors_and), 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__Validator = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.ElementTextIterator"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_ElementTextIterator), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._Validator"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__Validator), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_ElementTextIterator, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__Validator, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -180082,16 +180210,16 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementTextIterator = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("ElementTextIterator(self, element, tag=None, with_tail=True)\n    Iterates over the text content of a subtree.\n\n    You can pass the ``tag`` keyword argument to restrict text content to a\n    specific tag name.\n\n    You can set the ``with_tail`` keyword argument to ``False`` to skip over\n    tail text (e.g. if you know that it's only whitespace from pretty-printing).\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_ElementTextIterator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_ElementTextIterator, /*tp_clear*/
+  __Pyx_DOCSTR("Base class for XML validators."), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__Validator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__Validator, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_4lxml_5etree_19ElementTextIterator_3__iter__, /*tp_iter*/
-  __pyx_pw_4lxml_5etree_19ElementTextIterator_5__next__, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_ElementTextIterator, /*tp_methods*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree__Validator, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__Validator, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -180099,7 +180227,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementTextIterator = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_ElementTextIterator, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__Validator, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -180115,59 +180243,49 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementTextIterator = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ElementIterator __pyx_vtable_4lxml_5etree__ElementIterator;
+static struct __pyx_vtabstruct_4lxml_5etree_XMLSchema __pyx_vtable_4lxml_5etree_XMLSchema;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ElementIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct LxmlElementIterator *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ElementTagMatcher(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_XMLSchema(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_XMLSchema *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__Validator(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct LxmlElementIterator *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ElementTagMatcher*)__pyx_vtabptr_4lxml_5etree__ElementIterator;
-  p->_node = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree_XMLSchema *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__Validator*)__pyx_vtabptr_4lxml_5etree_XMLSchema;
+  if (unlikely(__pyx_pw_4lxml_5etree_9XMLSchema_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ElementIterator(PyObject *o) {
-  struct LxmlElementIterator *p = (struct LxmlElementIterator *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_XMLSchema(PyObject *o) {
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_node);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__ElementTagMatcher(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__ElementIterator(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct LxmlElementIterator *p = (struct LxmlElementIterator *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__ElementTagMatcher(o, v, a); if (e) return e;
-  if (p->_node) {
-    e = (*v)(((PyObject*)p->_node), a); if (e) return e;
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_4lxml_5etree_9XMLSchema_5__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
   }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__ElementIterator(PyObject *o) {
-  struct LxmlElementIterator *p = (struct LxmlElementIterator *)o;
-  __pyx_tp_clear_4lxml_5etree__ElementTagMatcher(o);
-  Py_CLEAR(p->_node);
-  return 0;
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__Validator(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__ElementIterator[] = {
-  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_16_ElementIterator_3__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree_XMLSchema[] = {
   {0, 0, 0, 0}
 };
 
-DL_EXPORT(PyTypeObject) LxmlElementIteratorType = {
+static PyTypeObject __pyx_type_4lxml_5etree_XMLSchema = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ElementIterator"), /*tp_name*/
-  sizeof(struct LxmlElementIterator), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.XMLSchema"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_XMLSchema), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ElementIterator, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_XMLSchema, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -180181,20 +180299,20 @@ DL_EXPORT(PyTypeObject) LxmlElementIteratorType = {
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  0, /*tp_call*/
+  __pyx_pw_4lxml_5etree_9XMLSchema_7__call__, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("\n    Dead but public. :)\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ElementIterator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ElementIterator, /*tp_clear*/
+  __Pyx_DOCSTR("XMLSchema(self, etree=None, file=None)\n    Turn a document into an XML Schema validator.\n\n    Either pass a schema as Element or ElementTree, or pass a file or\n    filename through the ``file`` keyword argument.\n\n    Passing the ``attribute_defaults`` boolean option will make the\n    schema insert default/fixed attributes into validated documents.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__Validator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__Validator, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_4lxml_5etree_16_ElementIterator_1__iter__, /*tp_iter*/
-  __pyx_pw_4lxml_5etree_16_ElementIterator_3__next__, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ElementIterator, /*tp_methods*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree_XMLSchema, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -180202,9 +180320,9 @@ DL_EXPORT(PyTypeObject) LxmlElementIteratorType = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_9XMLSchema_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ElementIterator, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_XMLSchema, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -180220,23 +180338,68 @@ DL_EXPORT(PyTypeObject) LxmlElementIteratorType = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree__ParserDictionaryContext __pyx_vtable_4lxml_5etree__ParserDictionaryContext;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementBase(PyTypeObject *t, PyObject *a, PyObject *k) {
-  PyObject *o = __pyx_tp_new_4lxml_5etree__Element(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__ParserDictionaryContext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *p;
+  PyObject *o;
+  o = (*t->tp_alloc)(t, 0);
   if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ParserDictionaryContext;
+  p->_default_parser = ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None); Py_INCREF(Py_None);
+  p->_implied_parser_contexts = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_24_ParserDictionaryContext_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_ElementBase[] = {
+static void __pyx_tp_dealloc_4lxml_5etree__ParserDictionaryContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *p = (struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)o;
+  PyObject_GC_UnTrack(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_4lxml_5etree_24_ParserDictionaryContext_3__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_CLEAR(p->_default_parser);
+  Py_CLEAR(p->_implied_parser_contexts);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_4lxml_5etree__ParserDictionaryContext(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *p = (struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)o;
+  if (p->_default_parser) {
+    e = (*v)(((PyObject*)p->_default_parser), a); if (e) return e;
+  }
+  if (p->_implied_parser_contexts) {
+    e = (*v)(p->_implied_parser_contexts, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree__ParserDictionaryContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *p = (struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)o;
+  Py_CLEAR(p->_default_parser);
+  Py_CLEAR(p->_implied_parser_contexts);
+  return 0;
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__ParserDictionaryContext[] = {
   {0, 0, 0, 0}
 };
 
-DL_EXPORT(PyTypeObject) LxmlElementBaseType = {
+static PyTypeObject __pyx_type_4lxml_5etree__ParserDictionaryContext = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.ElementBase"), /*tp_name*/
-  sizeof(struct LxmlElementBase), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ParserDictionaryContext"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ParserDictionaryContext, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -180245,11 +180408,7 @@ DL_EXPORT(PyTypeObject) LxmlElementBaseType = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_8_Element_31__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -180259,19 +180418,15 @@ DL_EXPORT(PyTypeObject) LxmlElementBaseType = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("ElementBase(*children, attrib=None, nsmap=None, **_extra)\n\n    The public Element class.  All custom Element classes must inherit\n    from this one.  To create an Element, use the `Element()` factory.\n\n    BIG FAT WARNING: Subclasses *must not* override __init__ or\n    __new__ as it is absolutely undefined when these objects will be\n    created or destroyed.  All persistent state of Elements must be\n    stored in the underlying XML.  If you really need to initialize\n    the object after creation, you can implement an ``_init(self)``\n    method that will be called directly after object creation.\n\n    Subclasses of this class can be instantiated to create a new\n    Element.  By default, the tag name will be the class name and the\n    namespace will be empty.  You can modify this with the following\n    class attributes:\n\n    * TAG - the tag name, possibly containing a namespace in Clark\n      notation\n\n    * NAMESPACE - the default namespace URI, unless provided as part\n      of the TAG attribute.\n\n    * HTML - flag if the class is an HTML tag, as opposed to an XML\n      tag.  This only applies to un-namespaced tags and defaults to\n      false (i.e. XML).\n\n    * PARSER - the parser that provides the configuration for the\n      newly created document.  Providing an HTML parser here will\n      default to creating an HTML element.\n\n    In user code, the latter three are commonly inherited in class\n    hierarchies that implement a common namespace.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
-  0, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ParserDictionaryContext, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ParserDictionaryContext, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_ElementBase, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__ParserDictionaryContext, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -180279,9 +180434,9 @@ DL_EXPORT(PyTypeObject) LxmlElementBaseType = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_11ElementBase_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_ElementBase, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ParserDictionaryContext, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -180297,82 +180452,78 @@ DL_EXPORT(PyTypeObject) LxmlElementBaseType = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_PyErrorLog __pyx_vtable_4lxml_5etree_PyErrorLog;
+static struct __pyx_vtabstruct_4lxml_5etree__FileReaderContext __pyx_vtable_4lxml_5etree__FileReaderContext;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_PyErrorLog(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_PyErrorLog *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__BaseErrorLog(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__FileReaderContext(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__FileReaderContext *p;
+  PyObject *o;
+  o = (*t->tp_alloc)(t, 0);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_PyErrorLog *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog*)__pyx_vtabptr_4lxml_5etree_PyErrorLog;
-  p->level_map = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_map_level = Py_None; Py_INCREF(Py_None);
-  p->_log = Py_None; Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree__FileReaderContext *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__FileReaderContext;
+  p->_filelike = Py_None; Py_INCREF(Py_None);
+  p->_encoding = Py_None; Py_INCREF(Py_None);
+  p->_url = Py_None; Py_INCREF(Py_None);
+  p->_bytes = Py_None; Py_INCREF(Py_None);
+  p->_exc_context = ((struct __pyx_obj_4lxml_5etree__ExceptionContext *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_18_FileReaderContext_1__cinit__(o, a, k) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_PyErrorLog(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_PyErrorLog *p = (struct __pyx_obj_4lxml_5etree_PyErrorLog *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
+static void __pyx_tp_dealloc_4lxml_5etree__FileReaderContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__FileReaderContext *p = (struct __pyx_obj_4lxml_5etree__FileReaderContext *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->level_map);
-  Py_CLEAR(p->_map_level);
-  Py_CLEAR(p->_log);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__BaseErrorLog(o);
+  Py_CLEAR(p->_filelike);
+  Py_CLEAR(p->_encoding);
+  Py_CLEAR(p->_url);
+  Py_CLEAR(p->_bytes);
+  Py_CLEAR(p->_exc_context);
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree_PyErrorLog(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__FileReaderContext(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree_PyErrorLog *p = (struct __pyx_obj_4lxml_5etree_PyErrorLog *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__BaseErrorLog(o, v, a); if (e) return e;
-  if (p->level_map) {
-    e = (*v)(p->level_map, a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__FileReaderContext *p = (struct __pyx_obj_4lxml_5etree__FileReaderContext *)o;
+  if (p->_filelike) {
+    e = (*v)(p->_filelike, a); if (e) return e;
   }
-  if (p->_map_level) {
-    e = (*v)(p->_map_level, a); if (e) return e;
+  if (p->_encoding) {
+    e = (*v)(p->_encoding, a); if (e) return e;
   }
-  if (p->_log) {
-    e = (*v)(p->_log, a); if (e) return e;
+  if (p->_url) {
+    e = (*v)(p->_url, a); if (e) return e;
+  }
+  if (p->_bytes) {
+    e = (*v)(p->_bytes, a); if (e) return e;
+  }
+  if (p->_exc_context) {
+    e = (*v)(((PyObject*)p->_exc_context), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree_PyErrorLog(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_PyErrorLog *p = (struct __pyx_obj_4lxml_5etree_PyErrorLog *)o;
-  __pyx_tp_clear_4lxml_5etree__BaseErrorLog(o);
-  Py_CLEAR(p->level_map);
-  Py_CLEAR(p->_map_level);
-  Py_CLEAR(p->_log);
+static int __pyx_tp_clear_4lxml_5etree__FileReaderContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__FileReaderContext *p = (struct __pyx_obj_4lxml_5etree__FileReaderContext *)o;
+  Py_CLEAR(p->_filelike);
+  Py_CLEAR(p->_encoding);
+  Py_CLEAR(p->_url);
+  Py_CLEAR(p->_bytes);
+  Py_CLEAR(p->_exc_context);
   return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_10PyErrorLog_level_map(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_10PyErrorLog_9level_map_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree_PyErrorLog[] = {
-  {__Pyx_NAMESTR("copy"), (PyCFunction)__pyx_pw_4lxml_5etree_10PyErrorLog_3copy, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_10PyErrorLog_2copy)},
-  {__Pyx_NAMESTR("log"), (PyCFunction)__pyx_pw_4lxml_5etree_10PyErrorLog_5log, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_10PyErrorLog_4log)},
-  {__Pyx_NAMESTR("receive"), (PyCFunction)__pyx_pw_4lxml_5etree_10PyErrorLog_7receive, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_10PyErrorLog_6receive)},
+static PyMethodDef __pyx_methods_4lxml_5etree__FileReaderContext[] = {
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree_PyErrorLog[] = {
-  {(char *)"level_map", __pyx_getprop_4lxml_5etree_10PyErrorLog_level_map, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree_PyErrorLog = {
+static PyTypeObject __pyx_type_4lxml_5etree__FileReaderContext = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.PyErrorLog"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_PyErrorLog), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._FileReaderContext"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__FileReaderContext), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_PyErrorLog, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__FileReaderContext, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -180381,11 +180532,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_PyErrorLog = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_13_BaseErrorLog_5__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -180395,25 +180542,25 @@ static PyTypeObject __pyx_type_4lxml_5etree_PyErrorLog = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("PyErrorLog(self, logger_name=None, logger=None)\n    A global error log that connects to the Python stdlib logging package.\n\n    The constructor accepts an optional logger name or a readily\n    instantiated logger instance.\n\n    If you want to change the mapping between libxml2's ErrorLevels and Python\n    logging levels, you can modify the level_map dictionary from a subclass.\n\n    The default mapping is::\n\n            ErrorLevels.WARNING = logging.WARNING\n            ErrorLevels.ERROR   = logging.ERROR\n            ErrorLevels.FATAL   = logging.CRITICAL\n\n    You can also override the method ``receive()`` that takes a LogEntry\n    object and calls ``self.log(log_entry, format_string, arg1, arg2, ...)``\n    with appropriate data.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_PyErrorLog, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_PyErrorLog, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__FileReaderContext, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__FileReaderContext, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_PyErrorLog, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__FileReaderContext, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree_PyErrorLog, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_10PyErrorLog_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_PyErrorLog, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__FileReaderContext, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -180429,69 +180576,38 @@ static PyTypeObject __pyx_type_4lxml_5etree_PyErrorLog = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_DTD __pyx_vtable_4lxml_5etree_DTD;
+static struct __pyx_vtabstruct_4lxml_5etree__FeedParser __pyx_vtable_4lxml_5etree__FeedParser;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_DTD(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_DTD *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__Validator(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__FeedParser(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__FeedParser *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__BaseParser(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_DTD *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__Validator*)__pyx_vtabptr_4lxml_5etree_DTD;
+  p = ((struct __pyx_obj_4lxml_5etree__FeedParser *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseParser*)__pyx_vtabptr_4lxml_5etree__FeedParser;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_DTD(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_3DTD_13__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
-  }
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__Validator(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_3DTD_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_3DTD_4name_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_3DTD_external_id(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_3DTD_11external_id_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_3DTD_system_url(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_3DTD_10system_url_1__get__(o);
+static PyObject *__pyx_getprop_4lxml_5etree_11_FeedParser_feed_error_log(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_11_FeedParser_14feed_error_log_1__get__(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_DTD[] = {
-  {__Pyx_NAMESTR("iterelements"), (PyCFunction)__pyx_pw_4lxml_5etree_3DTD_3iterelements, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("elements"), (PyCFunction)__pyx_pw_4lxml_5etree_3DTD_6elements, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("iterentities"), (PyCFunction)__pyx_pw_4lxml_5etree_3DTD_8iterentities, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("entities"), (PyCFunction)__pyx_pw_4lxml_5etree_3DTD_11entities, METH_NOARGS, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree__FeedParser[] = {
+  {__Pyx_NAMESTR("feed"), (PyCFunction)__pyx_pw_4lxml_5etree_11_FeedParser_1feed, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11_FeedParser_feed)},
+  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_4lxml_5etree_11_FeedParser_3close, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11_FeedParser_2close)},
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree_DTD[] = {
-  {(char *)"name", __pyx_getprop_4lxml_5etree_3DTD_name, 0, 0, 0},
-  {(char *)"external_id", __pyx_getprop_4lxml_5etree_3DTD_external_id, 0, 0, 0},
-  {(char *)"system_url", __pyx_getprop_4lxml_5etree_3DTD_system_url, 0, 0, 0},
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__FeedParser[] = {
+  {(char *)"feed_error_log", __pyx_getprop_4lxml_5etree_11_FeedParser_feed_error_log, 0, __Pyx_DOCSTR(__pyx_k_The_error_log_of_the_last_or_cur), 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_DTD = {
+static PyTypeObject __pyx_type_4lxml_5etree__FeedParser = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.DTD"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_DTD), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._FeedParser"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__FeedParser), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_DTD, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -180505,30 +180621,34 @@ static PyTypeObject __pyx_type_4lxml_5etree_DTD = {
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  __pyx_pw_4lxml_5etree_3DTD_15__call__, /*tp_call*/
+  0, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("DTD(self, file=None, external_id=None)\n    A DTD validator.\n\n    Can load from filesystem directly given a filename or file-like object.\n    Alternatively, pass the keyword parameter ``external_id`` to load from a\n    catalog.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Validator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__Validator, /*tp_clear*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_DTD, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__FeedParser, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree_DTD, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__FeedParser, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_3DTD_1__init__, /*tp_init*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_11_BaseParser_1__init__, /*tp_init*/
+  #else
+  0, /*tp_init*/
+  #endif
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_DTD, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__FeedParser, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -180544,111 +180664,27 @@ static PyTypeObject __pyx_type_4lxml_5etree_DTD = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_iterparse __pyx_vtable_4lxml_5etree_iterparse;
+static struct __pyx_vtabstruct_4lxml_5etree_XMLParser __pyx_vtable_4lxml_5etree_XMLParser;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_iterparse(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_iterparse *p;
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree_XMLParser(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_XMLParser *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__FeedParser(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_iterparse *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_iterparse;
-  p->_parser = ((struct __pyx_obj_4lxml_5etree__FeedParser *)Py_None); Py_INCREF(Py_None);
-  p->_tag = Py_None; Py_INCREF(Py_None);
-  p->_events = Py_None; Py_INCREF(Py_None);
-  p->root = Py_None; Py_INCREF(Py_None);
-  p->_source = Py_None; Py_INCREF(Py_None);
-  p->_filename = Py_None; Py_INCREF(Py_None);
-  p->_error = Py_None; Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree_XMLParser *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseParser*)__pyx_vtabptr_4lxml_5etree_XMLParser;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_iterparse(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_iterparse *p = (struct __pyx_obj_4lxml_5etree_iterparse *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_parser);
-  Py_CLEAR(p->_tag);
-  Py_CLEAR(p->_events);
-  Py_CLEAR(p->root);
-  Py_CLEAR(p->_source);
-  Py_CLEAR(p->_filename);
-  Py_CLEAR(p->_error);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree_iterparse(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree_iterparse *p = (struct __pyx_obj_4lxml_5etree_iterparse *)o;
-  if (p->_parser) {
-    e = (*v)(((PyObject*)p->_parser), a); if (e) return e;
-  }
-  if (p->_tag) {
-    e = (*v)(p->_tag, a); if (e) return e;
-  }
-  if (p->_events) {
-    e = (*v)(p->_events, a); if (e) return e;
-  }
-  if (p->root) {
-    e = (*v)(p->root, a); if (e) return e;
-  }
-  if (p->_source) {
-    e = (*v)(p->_source, a); if (e) return e;
-  }
-  if (p->_filename) {
-    e = (*v)(p->_filename, a); if (e) return e;
-  }
-  if (p->_error) {
-    e = (*v)(p->_error, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree_iterparse(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_iterparse *p = (struct __pyx_obj_4lxml_5etree_iterparse *)o;
-  Py_CLEAR(p->_parser);
-  Py_CLEAR(p->_tag);
-  Py_CLEAR(p->_events);
-  Py_CLEAR(p->root);
-  Py_CLEAR(p->_source);
-  Py_CLEAR(p->_filename);
-  Py_CLEAR(p->_error);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_9iterparse_error_log(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_9iterparse_9error_log_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_9iterparse_root(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_9iterparse_4root_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree_iterparse[] = {
-  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_9iterparse_5__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree_XMLParser[] = {
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree_iterparse[] = {
-  {(char *)"error_log", __pyx_getprop_4lxml_5etree_9iterparse_error_log, 0, __Pyx_DOCSTR(__pyx_k_The_error_log_of_the_last_or_cur_2), 0},
-  {(char *)"root", __pyx_getprop_4lxml_5etree_9iterparse_root, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree_iterparse = {
+static PyTypeObject __pyx_type_4lxml_5etree_XMLParser = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.iterparse"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_iterparse), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.XMLParser"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_XMLParser), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_iterparse, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -180668,24 +180704,24 @@ static PyTypeObject __pyx_type_4lxml_5etree_iterparse = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("iterparse(self, source, events=(\"end\",), tag=None,                   attribute_defaults=False, dtd_validation=False,                   load_dtd=False, no_network=True, remove_blank_text=False,                   remove_comments=False, remove_pis=False, encoding=None,                   html=False, recover=None, huge_tree=False, schema=None)\n\n    Incremental parser.\n\n    Parses XML into a tree and generates tuples (event, element) in a\n    SAX-like fashion. ``event`` is any of 'start', 'end', 'start-ns',\n    'end-ns'.\n\n    For 'start' and 'end', ``element`` is the Element that the parser just\n    found opening or closing.  For 'start-ns', it is a tuple (prefix, URI) of\n    a new namespace declaration.  For 'end-ns', it is simply None.  Note that\n    all start and end events are guaranteed to be properly nested.\n\n    The keyword argument ``events`` specifies a sequence of event type names\n    that should be generated.  By default, only 'end' events will be\n    generated.\n\n    The additional ``tag`` argument restricts the 'start' and 'end' events to\n    those elements that match the given tag.  By default, events are generated\n    for all elements.  Note that the 'start-ns' and 'end-ns' events are not\n    impacted by this restriction.\n\n    The other keyword arguments in the constructor are mainly based on the\n    libxml2 parser configuration.  A DTD will also be loaded if validation or\n    attribute default values are requested.\n\n    Available boolean keyword arguments:\n     - attribute_defaults: read default attributes from DTD\n     - dtd_validation: validate (if DTD is available)\n     - load_dtd: use DTD for parsing\n     - no_network: prevent network access for related files\n     - remove_blank_text: discard blank text nodes\n     - remove_comments: discard comments\n     - remove_pis: discard processing instructions\n     - strip_cdata: replace CDATA sections by normal text content (default: True)\n     - compact: safe memory for short text content (default: True)\n     - resolve_entities: replace entities by their text value (default: True)\n     - huge_tree: disable security restrictions and support very deep trees\n                  and very long text content (only affects libxml2 2.7+)\n     - html: parse input as HTML (default: XML)\n     - recover: try hard to parse through broken input (default: True for HTML,\n                False otherwise)\n\n    Other keyword arguments:\n     - encoding: override the document encoding\n     - schema: an XMLSchema to validate against\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_iterparse, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_iterparse, /*tp_clear*/
+  __Pyx_DOCSTR("XMLParser(self, encoding=None, attribute_defaults=False, dtd_validation=False, load_dtd=False, no_network=True, ns_clean=False, recover=False, XMLSchema schema=None, remove_blank_text=False, resolve_entities=True, remove_comments=False, remove_pis=False, strip_cdata=True, target=None, compact=True)\n\n    The XML parser.\n\n    Parsers can be supplied as additional argument to various parse\n    functions of the lxml API.  A default parser is always available\n    and can be replaced by a call to the global function\n    'set_default_parser'.  New parsers can be created at any time\n    without a major run-time overhead.\n\n    The keyword arguments in the constructor are mainly based on the\n    libxml2 parser configuration.  A DTD will also be loaded if DTD\n    validation or attribute default values are requested (unless you\n    additionally provide an XMLSchema from which the default\n    attributes can be read).\n\n    Available boolean keyword arguments:\n\n    - attribute_defaults - inject default attributes from DTD or XMLSchema\n    - dtd_validation     - validate against a DTD referenced by the document\n    - load_dtd           - use DTD for parsing\n    - no_network         - prevent network access for related files (default: True)\n    - ns_clean           - clean up redundant namespace declarations\n    - recover            - try hard to parse through broken XML\n    - remove_blank_text  - discard blank text nodes\n    - remove_comments    - discard comments\n    - remove_pis         - discard processing instructions\n    - strip_cdata        - replace CDATA sections by normal text content (default: True)\n    - compact            - safe memory for short text content (default: True)\n    - resolve_entities   - replace entities by their text value (default: True)\n    - huge_tree          - disable security restrictions and support very deep trees\n                           and very long text content (only affects libxml2 2.7+)\n\n    Other keyword arguments:\n\n    - encoding - override the document encoding\n    - target   - a parser target object that will receive the parse events\n    - schema   - an XMLSchema to validate against\n\n    Note that you should avoid sharing parsers between threads.  While this is\n    not harmful, it is more efficient to use separate parsers.  This does not\n    apply to the default parser.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_4lxml_5etree_9iterparse_3__iter__, /*tp_iter*/
-  __pyx_pw_4lxml_5etree_9iterparse_5__next__, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_iterparse, /*tp_methods*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree_XMLParser, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree_iterparse, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_9iterparse_1__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_9XMLParser_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_iterparse, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_XMLParser, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -180701,61 +180737,28 @@ static PyTypeObject __pyx_type_4lxml_5etree_iterparse = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree_XMLPullParser __pyx_vtable_4lxml_5etree_XMLPullParser;
 
-static struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *__pyx_freelist_4lxml_5etree___pyx_scope_struct_2_iterelements[8];
-static int __pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct_2_iterelements(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements)))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct_2_iterelements[--__pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
-  } else {
-    o = (*t->tp_alloc)(t, 0);
-    if (unlikely(!o)) return 0;
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree_XMLPullParser(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_XMLPullParser *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree_XMLParser(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree_XMLPullParser *)o);
+  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseParser*)__pyx_vtabptr_4lxml_5etree_XMLPullParser;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct_2_iterelements(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->__pyx_v_node);
-  Py_CLEAR(p->__pyx_v_self);
-  if ((__pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements))) {
-    __pyx_freelist_4lxml_5etree___pyx_scope_struct_2_iterelements[__pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements++] = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
-  }
-}
-
-static int __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct_2_iterelements(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *)o;
-  if (p->__pyx_v_node) {
-    e = (*v)(((PyObject*)p->__pyx_v_node), a); if (e) return e;
-  }
-  if (p->__pyx_v_self) {
-    e = (*v)(((PyObject*)p->__pyx_v_self), a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree___pyx_scope_struct_2_iterelements(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *)o;
-  Py_CLEAR(p->__pyx_v_node);
-  Py_CLEAR(p->__pyx_v_self);
-  return 0;
-}
+static PyMethodDef __pyx_methods_4lxml_5etree_XMLPullParser[] = {
+  {__Pyx_NAMESTR("read_events"), (PyCFunction)__pyx_pw_4lxml_5etree_13XMLPullParser_3read_events, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
 
-static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_2_iterelements = {
+static PyTypeObject __pyx_type_4lxml_5etree_XMLPullParser = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.__pyx_scope_struct_2_iterelements"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.XMLPullParser"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_XMLPullParser), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct_2_iterelements, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -180774,15 +180777,15 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_2_iterelements =
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct_2_iterelements, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree___pyx_scope_struct_2_iterelements, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("XMLPullParser(self, events=None, *, tag=None, **kwargs)\n\n    XML parser that collects parse events in an iterator.\n\n    The collected events are the same as for iterparse(), but the\n    parser itself is non-blocking in the sense that it receives\n    data chunks incrementally through its .feed() method, instead\n    of reading them directly from a file(-like) object all by itself.\n\n    By default, it collects Element end events.  To change that,\n    pass any subset of the available events into the ``events``\n    argument: ``'start'``, ``'end'``, ``'start-ns'``,\n    ``'end-ns'``, ``'comment'``, ``'pi'``.\n\n    To support loading external dependencies relative to the input\n    source, you can pass the ``base_url``.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  0, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_XMLPullParser, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -180790,9 +180793,9 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_2_iterelements =
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_13XMLPullParser_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree___pyx_scope_struct_2_iterelements, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_XMLPullParser, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -180808,49 +180811,27 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_2_iterelements =
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext __pyx_vtable_4lxml_5etree__XSLTResolverContext;
+static struct __pyx_vtabstruct_4lxml_5etree_ETCompatXMLParser __pyx_vtable_4lxml_5etree_ETCompatXMLParser;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__XSLTResolverContext(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__XSLTResolverContext *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ResolverContext(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_ETCompatXMLParser(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_ETCompatXMLParser *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree_XMLParser(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext*)__pyx_vtabptr_4lxml_5etree__XSLTResolverContext;
-  p->_parser = ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None); Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree_ETCompatXMLParser *)o);
+  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseParser*)__pyx_vtabptr_4lxml_5etree_ETCompatXMLParser;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__XSLTResolverContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__XSLTResolverContext *p = (struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_parser);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__ResolverContext(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__XSLTResolverContext(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__XSLTResolverContext *p = (struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)o;
-  e = __pyx_tp_traverse_4lxml_5etree__ResolverContext(o, v, a); if (e) return e;
-  if (p->_parser) {
-    e = (*v)(((PyObject*)p->_parser), a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__XSLTResolverContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__XSLTResolverContext *p = (struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)o;
-  __pyx_tp_clear_4lxml_5etree__ResolverContext(o);
-  Py_CLEAR(p->_parser);
-  return 0;
-}
+static PyMethodDef __pyx_methods_4lxml_5etree_ETCompatXMLParser[] = {
+  {0, 0, 0, 0}
+};
 
-static PyTypeObject __pyx_type_4lxml_5etree__XSLTResolverContext = {
+static PyTypeObject __pyx_type_4lxml_5etree_ETCompatXMLParser = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._XSLTResolverContext"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__XSLTResolverContext), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.ETCompatXMLParser"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_ETCompatXMLParser), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__XSLTResolverContext, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -180869,15 +180850,15 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTResolverContext = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__XSLTResolverContext, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__XSLTResolverContext, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("ETCompatXMLParser(self, encoding=None, attribute_defaults=False,                  dtd_validation=False, load_dtd=False, no_network=True,                  ns_clean=False, recover=False, schema=None,                  huge_tree=False, remove_blank_text=False, resolve_entities=True,                  remove_comments=True, remove_pis=True, strip_cdata=True,                  target=None, compact=True)\n\n    An XML parser with an ElementTree compatible default setup.\n\n    See the XMLParser class for details.\n\n    This parser has ``remove_comments`` and ``remove_pis`` enabled by default\n    and thus ignores comments and processing instructions.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  0, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_ETCompatXMLParser, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -180885,9 +180866,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTResolverContext = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_17ETCompatXMLParser_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__XSLTResolverContext, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_ETCompatXMLParser, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -180903,68 +180884,27 @@ static PyTypeObject __pyx_type_4lxml_5etree__XSLTResolverContext = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ParserDictionaryContext __pyx_vtable_4lxml_5etree__ParserDictionaryContext;
+static struct __pyx_vtabstruct_4lxml_5etree_HTMLParser __pyx_vtable_4lxml_5etree_HTMLParser;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ParserDictionaryContext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
+static PyObject *__pyx_tp_new_4lxml_5etree_HTMLParser(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_HTMLParser *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__FeedParser(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ParserDictionaryContext;
-  p->_default_parser = ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None); Py_INCREF(Py_None);
-  p->_implied_parser_contexts = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_24_ParserDictionaryContext_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  p = ((struct __pyx_obj_4lxml_5etree_HTMLParser *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseParser*)__pyx_vtabptr_4lxml_5etree_HTMLParser;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ParserDictionaryContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *p = (struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)o;
-  PyObject_GC_UnTrack(o);
-  {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_24_ParserDictionaryContext_3__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
-  }
-  Py_CLEAR(p->_default_parser);
-  Py_CLEAR(p->_implied_parser_contexts);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__ParserDictionaryContext(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *p = (struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)o;
-  if (p->_default_parser) {
-    e = (*v)(((PyObject*)p->_default_parser), a); if (e) return e;
-  }
-  if (p->_implied_parser_contexts) {
-    e = (*v)(p->_implied_parser_contexts, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__ParserDictionaryContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *p = (struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)o;
-  Py_CLEAR(p->_default_parser);
-  Py_CLEAR(p->_implied_parser_contexts);
-  return 0;
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__ParserDictionaryContext[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_HTMLParser[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ParserDictionaryContext = {
+static PyTypeObject __pyx_type_4lxml_5etree_HTMLParser = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ParserDictionaryContext"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.HTMLParser"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_HTMLParser), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ParserDictionaryContext, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -180983,15 +180923,15 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParserDictionaryContext = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ParserDictionaryContext, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ParserDictionaryContext, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("HTMLParser(self, encoding=None, remove_blank_text=False,                    remove_comments=False, remove_pis=False, strip_cdata=True,                    no_network=True, target=None, XMLSchema schema=None,                    recover=True, compact=True)\n\n    The HTML parser.\n\n    This parser allows reading HTML into a normal XML tree.  By\n    default, it can read broken (non well-formed) HTML, depending on\n    the capabilities of libxml2.  Use the 'recover' option to switch\n    this off.\n\n    Available boolean keyword arguments:\n\n    - recover            - try hard to parse through broken HTML (default: True)\n    - no_network         - prevent network access for related files (default: True)\n    - remove_blank_text  - discard empty text nodes\n    - remove_comments    - discard comments\n    - remove_pis         - discard processing instructions\n    - strip_cdata        - replace CDATA sections by normal text content (default: True)\n    - compact            - safe memory for short text content (default: True)\n\n    Other keyword arguments:\n\n    - encoding - override the document encoding\n    - target   - a parser target object that will receive the parse events\n    - schema   - an XMLSchema to validate against\n\n    Note that you should avoid sharing parsers between threads for performance\n    reasons.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ParserDictionaryContext, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_HTMLParser, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -180999,9 +180939,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParserDictionaryContext = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_10HTMLParser_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ParserDictionaryContext, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_HTMLParser, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -181017,79 +180957,28 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParserDictionaryContext = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_iterwalk __pyx_vtable_4lxml_5etree_iterwalk;
+static struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser __pyx_vtable_4lxml_5etree_HTMLPullParser;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_iterwalk(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_iterwalk *p;
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree_HTMLPullParser(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_HTMLPullParser *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree_HTMLParser(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_iterwalk *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_iterwalk;
-  p->_matcher = ((struct __pyx_obj_4lxml_5etree__MultiTagMatcher *)Py_None); Py_INCREF(Py_None);
-  p->_node_stack = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_events = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->_pop_event = Py_None; Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree_HTMLPullParser *)o);
+  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseParser*)__pyx_vtabptr_4lxml_5etree_HTMLPullParser;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_iterwalk(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_iterwalk *p = (struct __pyx_obj_4lxml_5etree_iterwalk *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_matcher);
-  Py_CLEAR(p->_node_stack);
-  Py_CLEAR(p->_events);
-  Py_CLEAR(p->_pop_event);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree_iterwalk(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree_iterwalk *p = (struct __pyx_obj_4lxml_5etree_iterwalk *)o;
-  if (p->_matcher) {
-    e = (*v)(((PyObject*)p->_matcher), a); if (e) return e;
-  }
-  if (p->_node_stack) {
-    e = (*v)(p->_node_stack, a); if (e) return e;
-  }
-  if (p->_events) {
-    e = (*v)(p->_events, a); if (e) return e;
-  }
-  if (p->_pop_event) {
-    e = (*v)(p->_pop_event, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree_iterwalk(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_iterwalk *p = (struct __pyx_obj_4lxml_5etree_iterwalk *)o;
-  Py_CLEAR(p->_matcher);
-  Py_CLEAR(p->_node_stack);
-  Py_CLEAR(p->_events);
-  Py_CLEAR(p->_pop_event);
-  return 0;
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree_iterwalk[] = {
-  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_8iterwalk_5__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree_HTMLPullParser[] = {
+  {__Pyx_NAMESTR("read_events"), (PyCFunction)__pyx_pw_4lxml_5etree_14HTMLPullParser_3read_events, METH_NOARGS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_iterwalk = {
+static PyTypeObject __pyx_type_4lxml_5etree_HTMLPullParser = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.iterwalk"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_iterwalk), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.HTMLPullParser"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_HTMLPullParser), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_iterwalk, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -181109,14 +180998,14 @@ static PyTypeObject __pyx_type_4lxml_5etree_iterwalk = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("iterwalk(self, element_or_tree, events=(\"end\",), tag=None)\n\n    A tree walker that generates events from an existing tree as if it\n    was parsing XML data with ``iterparse()``.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_iterwalk, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_iterwalk, /*tp_clear*/
+  __Pyx_DOCSTR("HTMLPullParser(self, events=None, *, tag=None, base_url=None, **kwargs)\n\n    HTML parser that collects parse events in an iterator.\n\n    The collected events are the same as for iterparse(), but the\n    parser itself is non-blocking in the sense that it receives\n    data chunks incrementally through its .feed() method, instead\n    of reading them directly from a file(-like) object all by itself.\n\n    By default, it collects Element end events.  To change that,\n    pass any subset of the available events into the ``events``\n    argument: ``'start'``, ``'end'``, ``'start-ns'``,\n    ``'end-ns'``, ``'comment'``, ``'pi'``.\n\n    To support loading external dependencies relative to the input\n    source, you can pass the ``base_url``.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_4lxml_5etree_8iterwalk_3__iter__, /*tp_iter*/
-  __pyx_pw_4lxml_5etree_8iterwalk_5__next__, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_iterwalk, /*tp_methods*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree_HTMLPullParser, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -181124,9 +181013,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_iterwalk = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_8iterwalk_1__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_14HTMLPullParser_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_iterwalk, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_HTMLPullParser, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -181142,28 +181031,44 @@ static PyTypeObject __pyx_type_4lxml_5etree_iterwalk = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__DomainErrorLog __pyx_vtable_4lxml_5etree__DomainErrorLog;
+static struct __pyx_vtabstruct_4lxml_5etree__SaxParserTarget __pyx_vtable_4lxml_5etree__SaxParserTarget;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__DomainErrorLog(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__DomainErrorLog *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ErrorLog(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__SaxParserTarget(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__SaxParserTarget *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__DomainErrorLog *)o);
-  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog*)__pyx_vtabptr_4lxml_5etree__DomainErrorLog;
+  p = ((struct __pyx_obj_4lxml_5etree__SaxParserTarget *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__SaxParserTarget;
+  if (unlikely(__pyx_pw_4lxml_5etree_16_SaxParserTarget_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__DomainErrorLog[] = {
-  {__Pyx_NAMESTR("receive"), (PyCFunction)__pyx_pw_4lxml_5etree_15_DomainErrorLog_3receive, METH_O, __Pyx_DOCSTR(0)},
+static void __pyx_tp_dealloc_4lxml_5etree__SaxParserTarget(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__SaxParserTarget[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__DomainErrorLog = {
+static PyTypeObject __pyx_type_4lxml_5etree__SaxParserTarget = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._DomainErrorLog"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__DomainErrorLog), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._SaxParserTarget"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__SaxParserTarget), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ErrorLog, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__SaxParserTarget, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -181172,11 +181077,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__DomainErrorLog = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_13_ListErrorLog_7__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -181186,19 +181087,15 @@ static PyTypeObject __pyx_type_4lxml_5etree__DomainErrorLog = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ErrorLog, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ErrorLog, /*tp_clear*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_9_ErrorLog_11__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__DomainErrorLog, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__SaxParserTarget, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -181206,9 +181103,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__DomainErrorLog = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_15_DomainErrorLog_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__DomainErrorLog, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__SaxParserTarget, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -181224,67 +181121,53 @@ static PyTypeObject __pyx_type_4lxml_5etree__DomainErrorLog = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_AttributeBasedElementClassLookup __pyx_vtable_4lxml_5etree_AttributeBasedElementClassLookup;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_AttributeBasedElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__ParseEventsIterator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ParseEventsIterator *p;
+  PyObject *o;
+  o = (*t->tp_alloc)(t, 0);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup*)__pyx_vtabptr_4lxml_5etree_AttributeBasedElementClassLookup;
-  p->_class_mapping = Py_None; Py_INCREF(Py_None);
-  p->_pytag = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_32AttributeBasedElementClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree__ParseEventsIterator *)o);
+  p->_events = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_20_ParseEventsIterator_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_AttributeBasedElementClassLookup(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *p = (struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
+static void __pyx_tp_dealloc_4lxml_5etree__ParseEventsIterator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ParseEventsIterator *p = (struct __pyx_obj_4lxml_5etree__ParseEventsIterator *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_class_mapping);
-  Py_CLEAR(p->_pytag);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup(o);
+  Py_CLEAR(p->_events);
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree_AttributeBasedElementClassLookup(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__ParseEventsIterator(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *p = (struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *)o;
-  e = __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup(o, v, a); if (e) return e;
-  if (p->_class_mapping) {
-    e = (*v)(p->_class_mapping, a); if (e) return e;
-  }
-  if (p->_pytag) {
-    e = (*v)(p->_pytag, a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__ParseEventsIterator *p = (struct __pyx_obj_4lxml_5etree__ParseEventsIterator *)o;
+  if (p->_events) {
+    e = (*v)(p->_events, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree_AttributeBasedElementClassLookup(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *p = (struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup *)o;
-  __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup(o);
-  Py_CLEAR(p->_class_mapping);
-  Py_CLEAR(p->_pytag);
+static int __pyx_tp_clear_4lxml_5etree__ParseEventsIterator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ParseEventsIterator *p = (struct __pyx_obj_4lxml_5etree__ParseEventsIterator *)o;
+  Py_CLEAR(p->_events);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_AttributeBasedElementClassLookup[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree__ParseEventsIterator[] = {
+  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_20_ParseEventsIterator_5__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_AttributeBasedElementClassLookup = {
+static PyTypeObject __pyx_type_4lxml_5etree__ParseEventsIterator = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.AttributeBasedElementClassLookup"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_AttributeBasedElementClassLookup), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ParseEventsIterator"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ParseEventsIterator), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_AttributeBasedElementClassLookup, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ParseEventsIterator, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -181303,15 +181186,15 @@ static PyTypeObject __pyx_type_4lxml_5etree_AttributeBasedElementClassLookup = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("AttributeBasedElementClassLookup(self, attribute_name, class_mapping, fallback=None)\n    Checks an attribute of an Element and looks up the value in a\n    class dictionary.\n\n    Arguments:\n      - attribute name - '{ns}name' style string\n      - class mapping  - Python dict mapping attribute values to Element classes\n      - fallback       - optional fallback lookup mechanism\n\n    A None key in the class mapping will be checked if the attribute is\n    missing.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_AttributeBasedElementClassLookup, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_AttributeBasedElementClassLookup, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("A reusable parse events iterator"), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ParseEventsIterator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ParseEventsIterator, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_AttributeBasedElementClassLookup, /*tp_methods*/
+  __pyx_pw_4lxml_5etree_20_ParseEventsIterator_3__iter__, /*tp_iter*/
+  __pyx_pw_4lxml_5etree_20_ParseEventsIterator_5__next__, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree__ParseEventsIterator, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -181319,9 +181202,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_AttributeBasedElementClassLookup = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_32AttributeBasedElementClassLookup_3__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_AttributeBasedElementClassLookup, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ParseEventsIterator, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -181337,139 +181220,97 @@ static PyTypeObject __pyx_type_4lxml_5etree_AttributeBasedElementClassLookup = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree_TreeBuilder __pyx_vtable_4lxml_5etree_TreeBuilder;
 
-static struct __pyx_obj_4lxml_5etree_DocInfo *__pyx_freelist_4lxml_5etree_DocInfo[4];
-static int __pyx_freecount_4lxml_5etree_DocInfo = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree_DocInfo(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_DocInfo *p;
-  PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree_DocInfo > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree_DocInfo)) & ((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree_DocInfo[--__pyx_freecount_4lxml_5etree_DocInfo];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree_DocInfo));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
-  } else {
-    if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-      o = (*t->tp_alloc)(t, 0);
-    } else {
-      o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-    }
-    if (unlikely(!o)) return 0;
-  }
-  p = ((struct __pyx_obj_4lxml_5etree_DocInfo *)o);
-  p->_doc = ((struct LxmlDocument *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_7DocInfo_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree_TreeBuilder(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_TreeBuilder *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__SaxParserTarget(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree_TreeBuilder *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__SaxParserTarget*)__pyx_vtabptr_4lxml_5etree_TreeBuilder;
+  p->_parser = ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None); Py_INCREF(Py_None);
+  p->_factory = Py_None; Py_INCREF(Py_None);
+  p->_data = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_element_stack = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_element_stack_pop = Py_None; Py_INCREF(Py_None);
+  p->_last = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_DocInfo(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_DocInfo *p = (struct __pyx_obj_4lxml_5etree_DocInfo *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_TreeBuilder(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_TreeBuilder *p = (struct __pyx_obj_4lxml_5etree_TreeBuilder *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_doc);
-  if ((__pyx_freecount_4lxml_5etree_DocInfo < 4) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree_DocInfo))) {
-    __pyx_freelist_4lxml_5etree_DocInfo[__pyx_freecount_4lxml_5etree_DocInfo++] = ((struct __pyx_obj_4lxml_5etree_DocInfo *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
-  }
+  Py_CLEAR(p->_parser);
+  Py_CLEAR(p->_factory);
+  Py_CLEAR(p->_data);
+  Py_CLEAR(p->_element_stack);
+  Py_CLEAR(p->_element_stack_pop);
+  Py_CLEAR(p->_last);
+  #if CYTHON_COMPILING_IN_CPYTHON
+  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
+  #endif
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__SaxParserTarget(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree_DocInfo(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree_TreeBuilder(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree_DocInfo *p = (struct __pyx_obj_4lxml_5etree_DocInfo *)o;
-  if (p->_doc) {
-    e = (*v)(((PyObject*)p->_doc), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree_TreeBuilder *p = (struct __pyx_obj_4lxml_5etree_TreeBuilder *)o;
+  e = ((likely(__pyx_ptype_4lxml_5etree__SaxParserTarget)) ? ((__pyx_ptype_4lxml_5etree__SaxParserTarget->tp_traverse) ? __pyx_ptype_4lxml_5etree__SaxParserTarget->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_4lxml_5etree_TreeBuilder)); if (e) return e;
+  if (p->_parser) {
+    e = (*v)(((PyObject*)p->_parser), a); if (e) return e;
   }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree_DocInfo(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_DocInfo *p = (struct __pyx_obj_4lxml_5etree_DocInfo *)o;
-  Py_CLEAR(p->_doc);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_root_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_7DocInfo_9root_name_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_public_id(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_7DocInfo_9public_id_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_system_url(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_7DocInfo_10system_url_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_xml_version(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_7DocInfo_11xml_version_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_encoding(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_7DocInfo_8encoding_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_standalone(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_7DocInfo_10standalone_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_URL(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_7DocInfo_3URL_1__get__(o);
-}
-
-static int __pyx_setprop_4lxml_5etree_7DocInfo_URL(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_4lxml_5etree_7DocInfo_3URL_3__set__(o, v);
+  if (p->_factory) {
+    e = (*v)(p->_factory, a); if (e) return e;
   }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
+  if (p->_data) {
+    e = (*v)(p->_data, a); if (e) return e;
   }
+  if (p->_element_stack) {
+    e = (*v)(p->_element_stack, a); if (e) return e;
+  }
+  if (p->_element_stack_pop) {
+    e = (*v)(p->_element_stack_pop, a); if (e) return e;
+  }
+  if (p->_last) {
+    e = (*v)(((PyObject*)p->_last), a); if (e) return e;
+  }
+  return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_doctype(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_7DocInfo_7doctype_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_internalDTD(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_7DocInfo_11internalDTD_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_7DocInfo_externalDTD(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_7DocInfo_11externalDTD_1__get__(o);
+static int __pyx_tp_clear_4lxml_5etree_TreeBuilder(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_TreeBuilder *p = (struct __pyx_obj_4lxml_5etree_TreeBuilder *)o;
+  if (likely(__pyx_ptype_4lxml_5etree__SaxParserTarget)) { if (__pyx_ptype_4lxml_5etree__SaxParserTarget->tp_clear) __pyx_ptype_4lxml_5etree__SaxParserTarget->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_4lxml_5etree_TreeBuilder);
+  Py_CLEAR(p->_parser);
+  Py_CLEAR(p->_factory);
+  Py_CLEAR(p->_data);
+  Py_CLEAR(p->_element_stack);
+  Py_CLEAR(p->_element_stack_pop);
+  Py_CLEAR(p->_last);
+  return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_DocInfo[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_TreeBuilder[] = {
+  {__Pyx_NAMESTR("close"), (PyCFunction)__pyx_pw_4lxml_5etree_11TreeBuilder_3close, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11TreeBuilder_2close)},
+  {__Pyx_NAMESTR("data"), (PyCFunction)__pyx_pw_4lxml_5etree_11TreeBuilder_5data, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11TreeBuilder_4data)},
+  {__Pyx_NAMESTR("start"), (PyCFunction)__pyx_pw_4lxml_5etree_11TreeBuilder_7start, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11TreeBuilder_6start)},
+  {__Pyx_NAMESTR("end"), (PyCFunction)__pyx_pw_4lxml_5etree_11TreeBuilder_9end, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11TreeBuilder_8end)},
+  {__Pyx_NAMESTR("pi"), (PyCFunction)__pyx_pw_4lxml_5etree_11TreeBuilder_11pi, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11TreeBuilder_10pi)},
+  {__Pyx_NAMESTR("comment"), (PyCFunction)__pyx_pw_4lxml_5etree_11TreeBuilder_13comment, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_11TreeBuilder_12comment)},
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree_DocInfo[] = {
-  {(char *)"root_name", __pyx_getprop_4lxml_5etree_7DocInfo_root_name, 0, __Pyx_DOCSTR(__pyx_k_Returns_the_name_of_the_root_nod), 0},
-  {(char *)"public_id", __pyx_getprop_4lxml_5etree_7DocInfo_public_id, 0, __Pyx_DOCSTR(__pyx_k_Returns_the_public_ID_of_the_DOC), 0},
-  {(char *)"system_url", __pyx_getprop_4lxml_5etree_7DocInfo_system_url, 0, __Pyx_DOCSTR(__pyx_k_Returns_the_system_ID_of_the_DOC), 0},
-  {(char *)"xml_version", __pyx_getprop_4lxml_5etree_7DocInfo_xml_version, 0, __Pyx_DOCSTR(__pyx_k_Returns_the_XML_version_as_decla), 0},
-  {(char *)"encoding", __pyx_getprop_4lxml_5etree_7DocInfo_encoding, 0, __Pyx_DOCSTR(__pyx_k_Returns_the_encoding_name_as_dec), 0},
-  {(char *)"standalone", __pyx_getprop_4lxml_5etree_7DocInfo_standalone, 0, __Pyx_DOCSTR(__pyx_k_Returns_the_standalone_flag_as_d), 0},
-  {(char *)"URL", __pyx_getprop_4lxml_5etree_7DocInfo_URL, __pyx_setprop_4lxml_5etree_7DocInfo_URL, __Pyx_DOCSTR(__pyx_k_The_source_URL_of_the_document_o), 0},
-  {(char *)"doctype", __pyx_getprop_4lxml_5etree_7DocInfo_doctype, 0, __Pyx_DOCSTR(__pyx_k_Returns_a_DOCTYPE_declaration_st), 0},
-  {(char *)"internalDTD", __pyx_getprop_4lxml_5etree_7DocInfo_internalDTD, 0, __Pyx_DOCSTR(__pyx_k_Returns_a_DTD_validator_based_on), 0},
-  {(char *)"externalDTD", __pyx_getprop_4lxml_5etree_7DocInfo_externalDTD, 0, __Pyx_DOCSTR(__pyx_k_Returns_a_DTD_validator_based_on_2), 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree_DocInfo = {
+static PyTypeObject __pyx_type_4lxml_5etree_TreeBuilder = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.DocInfo"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_DocInfo), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.TreeBuilder"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_TreeBuilder), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_DocInfo, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_TreeBuilder, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -181489,24 +181330,24 @@ static PyTypeObject __pyx_type_4lxml_5etree_DocInfo = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("Document information provided by parser and DTD."), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_DocInfo, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_DocInfo, /*tp_clear*/
+  __Pyx_DOCSTR("TreeBuilder(self, element_factory=None, parser=None)\n    Parser target that builds a tree.\n\n    The final tree is returned by the ``close()`` method.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_TreeBuilder, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_TreeBuilder, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_DocInfo, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_TreeBuilder, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree_DocInfo, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_11TreeBuilder_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_DocInfo, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_TreeBuilder, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -181522,67 +181363,89 @@ static PyTypeObject __pyx_type_4lxml_5etree_DocInfo = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree__PythonSaxParserTarget __pyx_vtable_4lxml_5etree__PythonSaxParserTarget;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_XInclude(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_XInclude *p;
-  PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree__PythonSaxParserTarget(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__SaxParserTarget(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_XInclude *)o);
-  p->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__SaxParserTarget*)__pyx_vtabptr_4lxml_5etree__PythonSaxParserTarget;
+  p->_target_start = Py_None; Py_INCREF(Py_None);
+  p->_target_end = Py_None; Py_INCREF(Py_None);
+  p->_target_data = Py_None; Py_INCREF(Py_None);
+  p->_target_doctype = Py_None; Py_INCREF(Py_None);
+  p->_target_pi = Py_None; Py_INCREF(Py_None);
+  p->_target_comment = Py_None; Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_22_PythonSaxParserTarget_1__cinit__(o, a, k) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_XInclude(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_XInclude *p = (struct __pyx_obj_4lxml_5etree_XInclude *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
+static void __pyx_tp_dealloc_4lxml_5etree__PythonSaxParserTarget(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *p = (struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_error_log);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_CLEAR(p->_target_start);
+  Py_CLEAR(p->_target_end);
+  Py_CLEAR(p->_target_data);
+  Py_CLEAR(p->_target_doctype);
+  Py_CLEAR(p->_target_pi);
+  Py_CLEAR(p->_target_comment);
+  #if CYTHON_COMPILING_IN_CPYTHON
+  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
+  #endif
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__SaxParserTarget(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree_XInclude(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__PythonSaxParserTarget(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree_XInclude *p = (struct __pyx_obj_4lxml_5etree_XInclude *)o;
-  if (p->_error_log) {
-    e = (*v)(((PyObject*)p->_error_log), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *p = (struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *)o;
+  e = ((likely(__pyx_ptype_4lxml_5etree__SaxParserTarget)) ? ((__pyx_ptype_4lxml_5etree__SaxParserTarget->tp_traverse) ? __pyx_ptype_4lxml_5etree__SaxParserTarget->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_4lxml_5etree__PythonSaxParserTarget)); if (e) return e;
+  if (p->_target_start) {
+    e = (*v)(p->_target_start, a); if (e) return e;
+  }
+  if (p->_target_end) {
+    e = (*v)(p->_target_end, a); if (e) return e;
+  }
+  if (p->_target_data) {
+    e = (*v)(p->_target_data, a); if (e) return e;
+  }
+  if (p->_target_doctype) {
+    e = (*v)(p->_target_doctype, a); if (e) return e;
+  }
+  if (p->_target_pi) {
+    e = (*v)(p->_target_pi, a); if (e) return e;
+  }
+  if (p->_target_comment) {
+    e = (*v)(p->_target_comment, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree_XInclude(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_XInclude *p = (struct __pyx_obj_4lxml_5etree_XInclude *)o;
-  Py_CLEAR(p->_error_log);
+static int __pyx_tp_clear_4lxml_5etree__PythonSaxParserTarget(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *p = (struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget *)o;
+  if (likely(__pyx_ptype_4lxml_5etree__SaxParserTarget)) { if (__pyx_ptype_4lxml_5etree__SaxParserTarget->tp_clear) __pyx_ptype_4lxml_5etree__SaxParserTarget->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_4lxml_5etree__PythonSaxParserTarget);
+  Py_CLEAR(p->_target_start);
+  Py_CLEAR(p->_target_end);
+  Py_CLEAR(p->_target_data);
+  Py_CLEAR(p->_target_doctype);
+  Py_CLEAR(p->_target_pi);
+  Py_CLEAR(p->_target_comment);
   return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_8XInclude_error_log(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_8XInclude_9error_log_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree_XInclude[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree__PythonSaxParserTarget[] = {
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree_XInclude[] = {
-  {(char *)"error_log", __pyx_getprop_4lxml_5etree_8XInclude_error_log, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree_XInclude = {
+static PyTypeObject __pyx_type_4lxml_5etree__PythonSaxParserTarget = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.XInclude"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_XInclude), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._PythonSaxParserTarget"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__PythonSaxParserTarget), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_XInclude, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__PythonSaxParserTarget, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -181596,30 +181459,30 @@ static PyTypeObject __pyx_type_4lxml_5etree_XInclude = {
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  __pyx_pw_4lxml_5etree_8XInclude_3__call__, /*tp_call*/
+  0, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("XInclude(self)\n    XInclude processor.\n\n    Create an instance and call it on an Element to run XInclude\n    processing.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_XInclude, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_XInclude, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__PythonSaxParserTarget, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__PythonSaxParserTarget, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_XInclude, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__PythonSaxParserTarget, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree_XInclude, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_8XInclude_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_XInclude, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__PythonSaxParserTarget, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -181635,99 +181498,72 @@ static PyTypeObject __pyx_type_4lxml_5etree_XInclude = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree__FilelikeWriter __pyx_vtable_4lxml_5etree__FilelikeWriter;
 
-static struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *__pyx_freelist_4lxml_5etree__DTDAttributeDecl[8];
-static int __pyx_freecount_4lxml_5etree__DTDAttributeDecl = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree__DTDAttributeDecl(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *p;
+static PyObject *__pyx_tp_new_4lxml_5etree__FilelikeWriter(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__FilelikeWriter *p;
   PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree__DTDAttributeDecl > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDAttributeDecl)))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDAttributeDecl[--__pyx_freecount_4lxml_5etree__DTDAttributeDecl];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__DTDAttributeDecl));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
-  } else {
-    o = (*t->tp_alloc)(t, 0);
-    if (unlikely(!o)) return 0;
+  o = (*t->tp_alloc)(t, 0);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__FilelikeWriter;
+  p->_filelike = Py_None; Py_INCREF(Py_None);
+  p->_close_filelike = Py_None; Py_INCREF(Py_None);
+  p->_exc_context = ((struct __pyx_obj_4lxml_5etree__ExceptionContext *)Py_None); Py_INCREF(Py_None);
+  p->error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_15_FilelikeWriter_1__cinit__(o, a, k) < 0)) {
+    Py_DECREF(o); o = 0;
   }
-  p = ((struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *)o);
-  p->_dtd = ((struct __pyx_obj_4lxml_5etree_DTD *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__DTDAttributeDecl(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *p = (struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__FilelikeWriter(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__FilelikeWriter *p = (struct __pyx_obj_4lxml_5etree__FilelikeWriter *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_dtd);
-  if ((__pyx_freecount_4lxml_5etree__DTDAttributeDecl < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDAttributeDecl))) {
-    __pyx_freelist_4lxml_5etree__DTDAttributeDecl[__pyx_freecount_4lxml_5etree__DTDAttributeDecl++] = ((struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
-  }
+  Py_CLEAR(p->_filelike);
+  Py_CLEAR(p->_close_filelike);
+  Py_CLEAR(p->_exc_context);
+  Py_CLEAR(p->error_log);
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__DTDAttributeDecl(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__FilelikeWriter(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *p = (struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *)o;
-  if (p->_dtd) {
-    e = (*v)(((PyObject*)p->_dtd), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__FilelikeWriter *p = (struct __pyx_obj_4lxml_5etree__FilelikeWriter *)o;
+  if (p->_filelike) {
+    e = (*v)(p->_filelike, a); if (e) return e;
+  }
+  if (p->_close_filelike) {
+    e = (*v)(p->_close_filelike, a); if (e) return e;
+  }
+  if (p->_exc_context) {
+    e = (*v)(((PyObject*)p->_exc_context), a); if (e) return e;
+  }
+  if (p->error_log) {
+    e = (*v)(((PyObject*)p->error_log), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__DTDAttributeDecl(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *p = (struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *)o;
-  Py_CLEAR(p->_dtd);
+static int __pyx_tp_clear_4lxml_5etree__FilelikeWriter(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__FilelikeWriter *p = (struct __pyx_obj_4lxml_5etree__FilelikeWriter *)o;
+  Py_CLEAR(p->_filelike);
+  Py_CLEAR(p->_close_filelike);
+  Py_CLEAR(p->_exc_context);
+  Py_CLEAR(p->error_log);
   return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_4name_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_elemname(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_8elemname_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_prefix(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_6prefix_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_type(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_4type_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_default(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_7default_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_default_value(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_13default_value_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__DTDAttributeDecl[] = {
-  {__Pyx_NAMESTR("itervalues"), (PyCFunction)__pyx_pw_4lxml_5etree_17_DTDAttributeDecl_3itervalues, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("values"), (PyCFunction)__pyx_pw_4lxml_5etree_17_DTDAttributeDecl_6values, METH_NOARGS, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree__FilelikeWriter[] = {
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__DTDAttributeDecl[] = {
-  {(char *)"name", __pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_name, 0, 0, 0},
-  {(char *)"elemname", __pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_elemname, 0, 0, 0},
-  {(char *)"prefix", __pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_prefix, 0, 0, 0},
-  {(char *)"type", __pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_type, 0, 0, 0},
-  {(char *)"default", __pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_default, 0, 0, 0},
-  {(char *)"default_value", __pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_default_value, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__DTDAttributeDecl = {
+static PyTypeObject __pyx_type_4lxml_5etree__FilelikeWriter = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._DTDAttributeDecl"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__DTDAttributeDecl), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._FilelikeWriter"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__FilelikeWriter), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__DTDAttributeDecl, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__FilelikeWriter, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -181736,7 +181572,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDAttributeDecl = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_1__repr__, /*tp_repr*/
+  0, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -181748,15 +181584,15 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDAttributeDecl = {
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__DTDAttributeDecl, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__DTDAttributeDecl, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__FilelikeWriter, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__FilelikeWriter, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__DTDAttributeDecl, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__FilelikeWriter, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__DTDAttributeDecl, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -181764,7 +181600,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDAttributeDecl = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__DTDAttributeDecl, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__FilelikeWriter, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -181780,49 +181616,68 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDAttributeDecl = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_XMLSchema __pyx_vtable_4lxml_5etree_XMLSchema;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_XMLSchema(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_XMLSchema *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__Validator(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_XMLSchema *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__Validator*)__pyx_vtabptr_4lxml_5etree_XMLSchema;
-  if (unlikely(__pyx_pw_4lxml_5etree_9XMLSchema_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
+static PyObject *__pyx_tp_new_4lxml_5etree_xmlfile(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_xmlfile *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree_xmlfile *)o);
+  p->output_file = Py_None; Py_INCREF(Py_None);
+  p->encoding = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->writer = ((struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_XMLSchema(PyObject *o) {
+static void __pyx_tp_dealloc_4lxml_5etree_xmlfile(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_xmlfile *p = (struct __pyx_obj_4lxml_5etree_xmlfile *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_9XMLSchema_5__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
+  Py_CLEAR(p->output_file);
+  Py_CLEAR(p->encoding);
+  Py_CLEAR(p->writer);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_4lxml_5etree_xmlfile(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree_xmlfile *p = (struct __pyx_obj_4lxml_5etree_xmlfile *)o;
+  if (p->output_file) {
+    e = (*v)(p->output_file, a); if (e) return e;
   }
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__Validator(o);
+  if (p->writer) {
+    e = (*v)(((PyObject*)p->writer), a); if (e) return e;
+  }
+  return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_XMLSchema[] = {
+static int __pyx_tp_clear_4lxml_5etree_xmlfile(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_xmlfile *p = (struct __pyx_obj_4lxml_5etree_xmlfile *)o;
+  Py_CLEAR(p->output_file);
+  Py_CLEAR(p->writer);
+  return 0;
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_xmlfile[] = {
+  {__Pyx_NAMESTR("__enter__"), (PyCFunction)__pyx_pw_4lxml_5etree_7xmlfile_3__enter__, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("__exit__"), (PyCFunction)__pyx_pw_4lxml_5etree_7xmlfile_5__exit__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_XMLSchema = {
+static PyTypeObject __pyx_type_4lxml_5etree_xmlfile = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.XMLSchema"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_XMLSchema), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.xmlfile"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_xmlfile), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_XMLSchema, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_xmlfile, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -181836,20 +181691,20 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLSchema = {
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  __pyx_pw_4lxml_5etree_9XMLSchema_7__call__, /*tp_call*/
+  0, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("XMLSchema(self, etree=None, file=None)\n    Turn a document into an XML Schema validator.\n\n    Either pass a schema as Element or ElementTree, or pass a file or\n    filename through the ``file`` keyword argument.\n\n    Passing the ``attribute_defaults`` boolean option will make the\n    schema insert default/fixed attributes into validated documents.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Validator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__Validator, /*tp_clear*/
+  __Pyx_DOCSTR("xmlfile(self, output_file, encoding=None, compression=None)\n\n    A simple mechanism for incremental XML serialisation.\n\n    Usage example::\n\n         with xmlfile(\"somefile.xml\", encoding='utf-8') as xf:\n             xf.write_declaration(standalone=True)\n             xf.write_doctype('<!DOCTYPE root SYSTEM \"some.dtd\">')\n\n             # generate an element (the root element)\n             with xf.element('root'):\n                  # write a complete Element into the open root element\n                  xf.write(etree.Element('test'))\n\n                  # generate and write more Elements, e.g. through iterparse\n                  for element in generate_some_elements():\n                      # serialise generated elements into the XML file\n                      xf.write(element)\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_xmlfile, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_xmlfile, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_XMLSchema, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_xmlfile, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -181857,9 +181712,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLSchema = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_9XMLSchema_3__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_7xmlfile_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_XMLSchema, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_xmlfile, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -181875,67 +181730,74 @@ static PyTypeObject __pyx_type_4lxml_5etree_XMLSchema = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator __pyx_vtable_4lxml_5etree__ElementMatchIterator;
+static struct __pyx_vtabstruct_4lxml_5etree__IncrementalFileWriter __pyx_vtable_4lxml_5etree__IncrementalFileWriter;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ElementMatchIterator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ElementMatchIterator *p;
+static PyObject *__pyx_tp_new_4lxml_5etree__IncrementalFileWriter(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *p;
   PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
-  } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
+  o = (*t->tp_alloc)(t, 0);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ElementMatchIterator;
-  p->_node = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
-  p->_matcher = ((struct __pyx_obj_4lxml_5etree__MultiTagMatcher *)Py_None); Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__IncrementalFileWriter;
+  p->_encoding = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_target = ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)Py_None); Py_INCREF(Py_None);
+  p->_element_stack = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_1__cinit__(o, a, k) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ElementMatchIterator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ElementMatchIterator *p = (struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
-  }
-  #endif
+static void __pyx_tp_dealloc_4lxml_5etree__IncrementalFileWriter(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *p = (struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_node);
-  Py_CLEAR(p->_matcher);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_4lxml_5etree_22_IncrementalFileWriter_3__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_CLEAR(p->_encoding);
+  Py_CLEAR(p->_target);
+  Py_CLEAR(p->_element_stack);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__ElementMatchIterator(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__IncrementalFileWriter(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__ElementMatchIterator *p = (struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)o;
-  if (p->_node) {
-    e = (*v)(((PyObject*)p->_node), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *p = (struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)o;
+  if (p->_target) {
+    e = (*v)(((PyObject*)p->_target), a); if (e) return e;
   }
-  if (p->_matcher) {
-    e = (*v)(((PyObject*)p->_matcher), a); if (e) return e;
+  if (p->_element_stack) {
+    e = (*v)(p->_element_stack, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__ElementMatchIterator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ElementMatchIterator *p = (struct __pyx_obj_4lxml_5etree__ElementMatchIterator *)o;
-  Py_CLEAR(p->_node);
-  Py_CLEAR(p->_matcher);
+static int __pyx_tp_clear_4lxml_5etree__IncrementalFileWriter(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *p = (struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)o;
+  Py_CLEAR(p->_target);
+  Py_CLEAR(p->_element_stack);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__ElementMatchIterator[] = {
-  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_21_ElementMatchIterator_3__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree__IncrementalFileWriter[] = {
+  {__Pyx_NAMESTR("write_declaration"), (PyCFunction)__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_5write_declaration, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_IncrementalFileWriter_4write_declaration)},
+  {__Pyx_NAMESTR("write_doctype"), (PyCFunction)__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_7write_doctype, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_IncrementalFileWriter_6write_doctype)},
+  {__Pyx_NAMESTR("element"), (PyCFunction)__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_9element, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_IncrementalFileWriter_8element)},
+  {__Pyx_NAMESTR("write"), (PyCFunction)__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_11write, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_IncrementalFileWriter_10write)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ElementMatchIterator = {
+static PyTypeObject __pyx_type_4lxml_5etree__IncrementalFileWriter = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ElementMatchIterator"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ElementMatchIterator), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._IncrementalFileWriter"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ElementMatchIterator, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__IncrementalFileWriter, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -181954,15 +181816,15 @@ static PyTypeObject __pyx_type_4lxml_5etree__ElementMatchIterator = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ElementMatchIterator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ElementMatchIterator, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__IncrementalFileWriter, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__IncrementalFileWriter, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_1__iter__, /*tp_iter*/
-  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_3__next__, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ElementMatchIterator, /*tp_methods*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree__IncrementalFileWriter, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -181972,7 +181834,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ElementMatchIterator = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ElementMatchIterator, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__IncrementalFileWriter, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -181988,30 +181850,74 @@ static PyTypeObject __pyx_type_4lxml_5etree__ElementMatchIterator = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_AncestorsIterator __pyx_vtable_4lxml_5etree_AncestorsIterator;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_AncestorsIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_AncestorsIterator *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ElementMatchIterator(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_AncestorsIterator *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator*)__pyx_vtabptr_4lxml_5etree_AncestorsIterator;
-  if (unlikely(__pyx_pw_4lxml_5etree_17AncestorsIterator_1__cinit__(o, a, k) < 0)) {
+static struct __pyx_obj_4lxml_5etree__FileWriterElement *__pyx_freelist_4lxml_5etree__FileWriterElement[8];
+static int __pyx_freecount_4lxml_5etree__FileWriterElement = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree__FileWriterElement(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__FileWriterElement *p;
+  PyObject *o;
+  if (likely((__pyx_freecount_4lxml_5etree__FileWriterElement > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__FileWriterElement)))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree__FileWriterElement[--__pyx_freecount_4lxml_5etree__FileWriterElement];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__FileWriterElement));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
+  } else {
+    o = (*t->tp_alloc)(t, 0);
+    if (unlikely(!o)) return 0;
+  }
+  p = ((struct __pyx_obj_4lxml_5etree__FileWriterElement *)o);
+  p->_element = Py_None; Py_INCREF(Py_None);
+  p->_writer = ((struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_18_FileWriterElement_1__cinit__(o, a, k) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_AncestorsIterator[] = {
+static void __pyx_tp_dealloc_4lxml_5etree__FileWriterElement(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__FileWriterElement *p = (struct __pyx_obj_4lxml_5etree__FileWriterElement *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_element);
+  Py_CLEAR(p->_writer);
+  if ((__pyx_freecount_4lxml_5etree__FileWriterElement < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__FileWriterElement))) {
+    __pyx_freelist_4lxml_5etree__FileWriterElement[__pyx_freecount_4lxml_5etree__FileWriterElement++] = ((struct __pyx_obj_4lxml_5etree__FileWriterElement *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
+  }
+}
+
+static int __pyx_tp_traverse_4lxml_5etree__FileWriterElement(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__FileWriterElement *p = (struct __pyx_obj_4lxml_5etree__FileWriterElement *)o;
+  if (p->_element) {
+    e = (*v)(p->_element, a); if (e) return e;
+  }
+  if (p->_writer) {
+    e = (*v)(((PyObject*)p->_writer), a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree__FileWriterElement(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__FileWriterElement *p = (struct __pyx_obj_4lxml_5etree__FileWriterElement *)o;
+  Py_CLEAR(p->_element);
+  Py_CLEAR(p->_writer);
+  return 0;
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__FileWriterElement[] = {
+  {__Pyx_NAMESTR("__enter__"), (PyCFunction)__pyx_pw_4lxml_5etree_18_FileWriterElement_3__enter__, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("__exit__"), (PyCFunction)__pyx_pw_4lxml_5etree_18_FileWriterElement_5__exit__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_AncestorsIterator = {
+static PyTypeObject __pyx_type_4lxml_5etree__FileWriterElement = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.AncestorsIterator"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_AncestorsIterator), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._FileWriterElement"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__FileWriterElement), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ElementMatchIterator, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__FileWriterElement, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -182030,23 +181936,15 @@ static PyTypeObject __pyx_type_4lxml_5etree_AncestorsIterator = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("AncestorsIterator(self, node, tag=None)\n    Iterates over the ancestors of an element (from parent to parent).\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ElementMatchIterator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ElementMatchIterator, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__FileWriterElement, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__FileWriterElement, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_1__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_3__next__, /*tp_iternext*/
-  #else
   0, /*tp_iternext*/
-  #endif
-  __pyx_methods_4lxml_5etree_AncestorsIterator, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__FileWriterElement, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -182056,7 +181954,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_AncestorsIterator = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_AncestorsIterator, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__FileWriterElement, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -182072,27 +181970,111 @@ static PyTypeObject __pyx_type_4lxml_5etree_AncestorsIterator = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_HTMLParser __pyx_vtable_4lxml_5etree_HTMLParser;
+static struct __pyx_vtabstruct_4lxml_5etree_iterparse __pyx_vtable_4lxml_5etree_iterparse;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_HTMLParser(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_HTMLParser *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__FeedParser(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_iterparse(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_iterparse *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_HTMLParser *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseParser*)__pyx_vtabptr_4lxml_5etree_HTMLParser;
+  p = ((struct __pyx_obj_4lxml_5etree_iterparse *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_iterparse;
+  p->_parser = ((struct __pyx_obj_4lxml_5etree__FeedParser *)Py_None); Py_INCREF(Py_None);
+  p->_tag = Py_None; Py_INCREF(Py_None);
+  p->_events = Py_None; Py_INCREF(Py_None);
+  p->root = Py_None; Py_INCREF(Py_None);
+  p->_source = Py_None; Py_INCREF(Py_None);
+  p->_filename = Py_None; Py_INCREF(Py_None);
+  p->_error = Py_None; Py_INCREF(Py_None);
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_HTMLParser[] = {
+static void __pyx_tp_dealloc_4lxml_5etree_iterparse(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_iterparse *p = (struct __pyx_obj_4lxml_5etree_iterparse *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_parser);
+  Py_CLEAR(p->_tag);
+  Py_CLEAR(p->_events);
+  Py_CLEAR(p->root);
+  Py_CLEAR(p->_source);
+  Py_CLEAR(p->_filename);
+  Py_CLEAR(p->_error);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_4lxml_5etree_iterparse(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree_iterparse *p = (struct __pyx_obj_4lxml_5etree_iterparse *)o;
+  if (p->_parser) {
+    e = (*v)(((PyObject*)p->_parser), a); if (e) return e;
+  }
+  if (p->_tag) {
+    e = (*v)(p->_tag, a); if (e) return e;
+  }
+  if (p->_events) {
+    e = (*v)(p->_events, a); if (e) return e;
+  }
+  if (p->root) {
+    e = (*v)(p->root, a); if (e) return e;
+  }
+  if (p->_source) {
+    e = (*v)(p->_source, a); if (e) return e;
+  }
+  if (p->_filename) {
+    e = (*v)(p->_filename, a); if (e) return e;
+  }
+  if (p->_error) {
+    e = (*v)(p->_error, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree_iterparse(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_iterparse *p = (struct __pyx_obj_4lxml_5etree_iterparse *)o;
+  Py_CLEAR(p->_parser);
+  Py_CLEAR(p->_tag);
+  Py_CLEAR(p->_events);
+  Py_CLEAR(p->root);
+  Py_CLEAR(p->_source);
+  Py_CLEAR(p->_filename);
+  Py_CLEAR(p->_error);
+  return 0;
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_9iterparse_error_log(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_9iterparse_9error_log_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_9iterparse_root(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_9iterparse_4root_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_iterparse[] = {
+  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_9iterparse_5__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_HTMLParser = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree_iterparse[] = {
+  {(char *)"error_log", __pyx_getprop_4lxml_5etree_9iterparse_error_log, 0, __Pyx_DOCSTR(__pyx_k_The_error_log_of_the_last_or_cur_2), 0},
+  {(char *)"root", __pyx_getprop_4lxml_5etree_9iterparse_root, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree_iterparse = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.HTMLParser"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_HTMLParser), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.iterparse"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_iterparse), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_iterparse, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -182112,24 +182094,24 @@ static PyTypeObject __pyx_type_4lxml_5etree_HTMLParser = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("HTMLParser(self, encoding=None, remove_blank_text=False,                    remove_comments=False, remove_pis=False, strip_cdata=True,                    no_network=True, target=None, XMLSchema schema=None,                    recover=True, compact=True)\n\n    The HTML parser.\n\n    This parser allows reading HTML into a normal XML tree.  By\n    default, it can read broken (non well-formed) HTML, depending on\n    the capabilities of libxml2.  Use the 'recover' option to switch\n    this off.\n\n    Available boolean keyword arguments:\n\n    - recover            - try hard to parse through broken HTML (default: True)\n    - no_network         - prevent network access for related files (default: True)\n    - remove_blank_text  - discard empty text nodes\n    - remove_comments    - discard comments\n    - remove_pis         - discard processing instructions\n    - strip_cdata        - replace CDATA sections by normal text content (default: True)\n    - compact            - safe memory for short text content (default: True)\n\n    Other keyword arguments:\n\n    - encoding - override the document encoding\n    - target   - a parser target object that will receive the parse events\n    - schema   - an XMLSchema to validate against\n\n    Note that you should avoid sharing parsers between threads for performance\n    reasons.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
+  __Pyx_DOCSTR("iterparse(self, source, events=(\"end\",), tag=None,                   attribute_defaults=False, dtd_validation=False,                   load_dtd=False, no_network=True, remove_blank_text=False,                   remove_comments=False, remove_pis=False, encoding=None,                   html=False, recover=None, huge_tree=False, schema=None)\n\n    Incremental parser.\n\n    Parses XML into a tree and generates tuples (event, element) in a\n    SAX-like fashion. ``event`` is any of 'start', 'end', 'start-ns',\n    'end-ns'.\n\n    For 'start' and 'end', ``element`` is the Element that the parser just\n    found opening or closing.  For 'start-ns', it is a tuple (prefix, URI) of\n    a new namespace declaration.  For 'end-ns', it is simply None.  Note that\n    all start and end events are guaranteed to be properly nested.\n\n    The keyword argument ``events`` specifies a sequence of event type names\n    that should be generated.  By default, only 'end' events will be\n    generated.\n\n    The additional ``tag`` argument restricts the 'start' and 'end' events to\n    those elements that match the given tag.  By default, events are generated\n    for all elements.  Note that the 'start-ns' and 'end-ns' events are not\n    impacted by this restriction.\n\n    The other keyword arguments in the constructor are mainly based on the\n    libxml2 parser configuration.  A DTD will also be loaded if validation or\n    attribute default values are requested.\n\n    Available boolean keyword arguments:\n     - attribute_defaults: read default attributes from DTD\n     - dtd_validation: validate (if DTD is available)\n     - load_dtd: use DTD for parsing\n     - no_network: prevent network access for related files\n     - remove_blank_text: discard blank text nodes\n     - remove_comments: discard comments\n     - remove_pis: discard processing instructions\n     - strip_cdata: replace CDATA sections by normal text content (default: True)\n     - compact: safe memory for short text content (default: True)\n     - resolve_entities: replace entities by their text value (default: True)\n     - huge_tree: disable security restrictions and support very deep trees\n                  and very long text content (only affects libxml2 2.7+)\n     - html: parse input as HTML (default: XML)\n     - recover: try hard to parse through broken input (default: True for HTML,\n                False otherwise)\n\n    Other keyword arguments:\n     - encoding: override the document encoding\n     - schema: an XMLSchema to validate against\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_iterparse, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_iterparse, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_HTMLParser, /*tp_methods*/
+  __pyx_pw_4lxml_5etree_9iterparse_3__iter__, /*tp_iter*/
+  __pyx_pw_4lxml_5etree_9iterparse_5__next__, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree_iterparse, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree_iterparse, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_10HTMLParser_1__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_9iterparse_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_HTMLParser, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_iterparse, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -182145,28 +182127,79 @@ static PyTypeObject __pyx_type_4lxml_5etree_HTMLParser = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_HTMLPullParser __pyx_vtable_4lxml_5etree_HTMLPullParser;
+static struct __pyx_vtabstruct_4lxml_5etree_iterwalk __pyx_vtable_4lxml_5etree_iterwalk;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_HTMLPullParser(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_HTMLPullParser *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree_HTMLParser(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_iterwalk(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_iterwalk *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_HTMLPullParser *)o);
-  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseParser*)__pyx_vtabptr_4lxml_5etree_HTMLPullParser;
+  p = ((struct __pyx_obj_4lxml_5etree_iterwalk *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_iterwalk;
+  p->_matcher = ((struct __pyx_obj_4lxml_5etree__MultiTagMatcher *)Py_None); Py_INCREF(Py_None);
+  p->_node_stack = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_events = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_pop_event = Py_None; Py_INCREF(Py_None);
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_HTMLPullParser[] = {
-  {__Pyx_NAMESTR("read_events"), (PyCFunction)__pyx_pw_4lxml_5etree_14HTMLPullParser_3read_events, METH_NOARGS, __Pyx_DOCSTR(0)},
+static void __pyx_tp_dealloc_4lxml_5etree_iterwalk(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_iterwalk *p = (struct __pyx_obj_4lxml_5etree_iterwalk *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_matcher);
+  Py_CLEAR(p->_node_stack);
+  Py_CLEAR(p->_events);
+  Py_CLEAR(p->_pop_event);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_4lxml_5etree_iterwalk(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree_iterwalk *p = (struct __pyx_obj_4lxml_5etree_iterwalk *)o;
+  if (p->_matcher) {
+    e = (*v)(((PyObject*)p->_matcher), a); if (e) return e;
+  }
+  if (p->_node_stack) {
+    e = (*v)(p->_node_stack, a); if (e) return e;
+  }
+  if (p->_events) {
+    e = (*v)(p->_events, a); if (e) return e;
+  }
+  if (p->_pop_event) {
+    e = (*v)(p->_pop_event, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree_iterwalk(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_iterwalk *p = (struct __pyx_obj_4lxml_5etree_iterwalk *)o;
+  Py_CLEAR(p->_matcher);
+  Py_CLEAR(p->_node_stack);
+  Py_CLEAR(p->_events);
+  Py_CLEAR(p->_pop_event);
+  return 0;
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_iterwalk[] = {
+  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_8iterwalk_5__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_HTMLPullParser = {
+static PyTypeObject __pyx_type_4lxml_5etree_iterwalk = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.HTMLPullParser"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_HTMLPullParser), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.iterwalk"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_iterwalk), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__BaseParser, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_iterwalk, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -182186,14 +182219,14 @@ static PyTypeObject __pyx_type_4lxml_5etree_HTMLPullParser = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("HTMLPullParser(self, events=None, *, tag=None, base_url=None, **kwargs)\n\n    HTML parser that collects parse events in an iterator.\n\n    The collected events are the same as for iterparse(), but the\n    parser itself is non-blocking in the sense that it receives\n    data chunks incrementally through its .feed() method, instead\n    of reading them directly from a file(-like) object all by itself.\n\n    By default, it collects Element end events.  To change that,\n    pass any subset of the available events into the ``events``\n    argument: ``'start'``, ``'end'``, ``'start-ns'``,\n    ``'end-ns'``, ``'comment'``, ``'pi'``.\n\n    To support loading external dependencies relative to the input\n    source, you can pass the ``base_url``.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__BaseParser, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__BaseParser, /*tp_clear*/
+  __Pyx_DOCSTR("iterwalk(self, element_or_tree, events=(\"end\",), tag=None)\n\n    A tree walker that generates events from an existing tree as if it\n    was parsing XML data with ``iterparse()``.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_iterwalk, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_iterwalk, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_HTMLPullParser, /*tp_methods*/
+  __pyx_pw_4lxml_5etree_8iterwalk_3__iter__, /*tp_iter*/
+  __pyx_pw_4lxml_5etree_8iterwalk_5__next__, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree_iterwalk, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -182201,9 +182234,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_HTMLPullParser = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_14HTMLPullParser_1__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_8iterwalk_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_HTMLPullParser, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_iterwalk, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -182375,62 +182408,67 @@ static PyTypeObject __pyx_type_4lxml_5etree__IDDict = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_ElementNamespaceClassLookup __pyx_vtable_4lxml_5etree_ElementNamespaceClassLookup;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementNamespaceClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup*)__pyx_vtabptr_4lxml_5etree_ElementNamespaceClassLookup;
-  p->_namespace_registries = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_27ElementNamespaceClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
+static PyObject *__pyx_tp_new_4lxml_5etree_XInclude(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_XInclude *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree_XInclude *)o);
+  p->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_ElementNamespaceClassLookup(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_XInclude(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_XInclude *p = (struct __pyx_obj_4lxml_5etree_XInclude *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_namespace_registries);
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup(o);
+  Py_CLEAR(p->_error_log);
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree_ElementNamespaceClassLookup(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree_XInclude(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *)o;
-  e = __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup(o, v, a); if (e) return e;
-  if (p->_namespace_registries) {
-    e = (*v)(p->_namespace_registries, a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree_XInclude *p = (struct __pyx_obj_4lxml_5etree_XInclude *)o;
+  if (p->_error_log) {
+    e = (*v)(((PyObject*)p->_error_log), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree_ElementNamespaceClassLookup(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup *)o;
-  __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup(o);
-  Py_CLEAR(p->_namespace_registries);
+static int __pyx_tp_clear_4lxml_5etree_XInclude(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_XInclude *p = (struct __pyx_obj_4lxml_5etree_XInclude *)o;
+  Py_CLEAR(p->_error_log);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_ElementNamespaceClassLookup[] = {
-  {__Pyx_NAMESTR("get_namespace"), (PyCFunction)__pyx_pw_4lxml_5etree_27ElementNamespaceClassLookup_5get_namespace, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_27ElementNamespaceClassLookup_4get_namespace)},
+static PyObject *__pyx_getprop_4lxml_5etree_8XInclude_error_log(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_8XInclude_9error_log_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_XInclude[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_ElementNamespaceClassLookup = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree_XInclude[] = {
+  {(char *)"error_log", __pyx_getprop_4lxml_5etree_8XInclude_error_log, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree_XInclude = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.ElementNamespaceClassLookup"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_ElementNamespaceClassLookup), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.XInclude"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_XInclude), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_ElementNamespaceClassLookup, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_XInclude, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -182444,30 +182482,30 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementNamespaceClassLookup = {
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  0, /*tp_call*/
+  __pyx_pw_4lxml_5etree_8XInclude_3__call__, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("ElementNamespaceClassLookup(self, fallback=None)\n\n    Element class lookup scheme that searches the Element class in the\n    Namespace registry.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_ElementNamespaceClassLookup, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_ElementNamespaceClassLookup, /*tp_clear*/
+  __Pyx_DOCSTR("XInclude(self)\n    XInclude processor.\n\n    Create an instance and call it on an Element to run XInclude\n    processing.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_XInclude, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_XInclude, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_ElementNamespaceClassLookup, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_XInclude, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree_XInclude, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_27ElementNamespaceClassLookup_3__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_8XInclude_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_ElementNamespaceClassLookup, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_XInclude, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -182483,48 +182521,57 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementNamespaceClassLookup = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__AppendOnlyElementProxy __pyx_vtable_4lxml_5etree__AppendOnlyElementProxy;
+static struct __pyx_vtabstruct_4lxml_5etree__ExsltRegExp __pyx_vtable_4lxml_5etree__ExsltRegExp;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__AppendOnlyElementProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ReadOnlyElementProxy(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__ExsltRegExp(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ExsltRegExp *p;
+  PyObject *o;
+  o = (*t->tp_alloc)(t, 0);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__AppendOnlyElementProxy;
+  p = ((struct __pyx_obj_4lxml_5etree__ExsltRegExp *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ExsltRegExp;
+  p->_compile_map = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_12_ExsltRegExp_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_23_AppendOnlyElementProxy_text(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_23_AppendOnlyElementProxy_4text_1__get__(o);
+static void __pyx_tp_dealloc_4lxml_5etree__ExsltRegExp(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ExsltRegExp *p = (struct __pyx_obj_4lxml_5etree__ExsltRegExp *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_compile_map);
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_setprop_4lxml_5etree_23_AppendOnlyElementProxy_text(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_4lxml_5etree_23_AppendOnlyElementProxy_4text_3__set__(o, v);
-  }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
+static int __pyx_tp_traverse_4lxml_5etree__ExsltRegExp(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__ExsltRegExp *p = (struct __pyx_obj_4lxml_5etree__ExsltRegExp *)o;
+  if (p->_compile_map) {
+    e = (*v)(p->_compile_map, a); if (e) return e;
   }
+  return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__AppendOnlyElementProxy[] = {
-  {__Pyx_NAMESTR("append"), (PyCFunction)__pyx_pw_4lxml_5etree_23_AppendOnlyElementProxy_1append, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_23_AppendOnlyElementProxy_append)},
-  {__Pyx_NAMESTR("extend"), (PyCFunction)__pyx_pw_4lxml_5etree_23_AppendOnlyElementProxy_3extend, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_23_AppendOnlyElementProxy_2extend)},
-  {0, 0, 0, 0}
-};
+static int __pyx_tp_clear_4lxml_5etree__ExsltRegExp(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ExsltRegExp *p = (struct __pyx_obj_4lxml_5etree__ExsltRegExp *)o;
+  Py_CLEAR(p->_compile_map);
+  return 0;
+}
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__AppendOnlyElementProxy[] = {
-  {(char *)"text", __pyx_getprop_4lxml_5etree_23_AppendOnlyElementProxy_text, __pyx_setprop_4lxml_5etree_23_AppendOnlyElementProxy_text, __Pyx_DOCSTR(__pyx_k_Text_before_the_first_subelement_2), 0},
-  {0, 0, 0, 0, 0}
+static PyMethodDef __pyx_methods_4lxml_5etree__ExsltRegExp[] = {
+  {__Pyx_NAMESTR("test"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ExsltRegExp_3test, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("match"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ExsltRegExp_5match, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("replace"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ExsltRegExp_7replace, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__AppendOnlyElementProxy = {
+static PyTypeObject __pyx_type_4lxml_5etree__ExsltRegExp = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._AppendOnlyElementProxy"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ExsltRegExp"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ExsltRegExp), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ExsltRegExp, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -182533,11 +182580,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__AppendOnlyElementProxy = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_3__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -182548,20 +182591,16 @@ static PyTypeObject __pyx_type_4lxml_5etree__AppendOnlyElementProxy = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("A read-only element that allows adding children and changing the\n    text content (i.e. everything that adds to the subtree).\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ReadOnlyProxy, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ReadOnlyProxy, /*tp_clear*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ExsltRegExp, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ExsltRegExp, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_15__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__AppendOnlyElementProxy, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__ExsltRegExp, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__AppendOnlyElementProxy, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -182569,7 +182608,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__AppendOnlyElementProxy = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__AppendOnlyElementProxy, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ExsltRegExp, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -182585,42 +182624,137 @@ static PyTypeObject __pyx_type_4lxml_5etree__AppendOnlyElementProxy = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyEntityProxy __pyx_vtable_4lxml_5etree__ModifyContentOnlyEntityProxy;
+static struct __pyx_vtabstruct_4lxml_5etree__BaseContext __pyx_vtable_4lxml_5etree__BaseContext;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ModifyContentOnlyEntityProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ModifyContentOnlyEntityProxy *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ModifyContentOnlyProxy(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__BaseContext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__BaseContext *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ModifyContentOnlyEntityProxy *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyEntityProxy;
+  p = ((struct __pyx_obj_4lxml_5etree__BaseContext *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__BaseContext;
+  p->_doc = ((struct LxmlDocument *)Py_None); Py_INCREF(Py_None);
+  p->_extensions = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_namespaces = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_global_namespaces = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_utf_refs = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_function_cache = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_eval_context_dict = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_temp_refs = ((struct __pyx_obj_4lxml_5etree__TempStore *)Py_None); Py_INCREF(Py_None);
+  p->_temp_documents = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  p->_exc = ((struct __pyx_obj_4lxml_5etree__ExceptionContext *)Py_None); Py_INCREF(Py_None);
+  p->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_12_BaseContext_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_29_ModifyContentOnlyEntityProxy_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_29_ModifyContentOnlyEntityProxy_4name_1__get__(o);
+static void __pyx_tp_dealloc_4lxml_5etree__BaseContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__BaseContext *p = (struct __pyx_obj_4lxml_5etree__BaseContext *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_doc);
+  Py_CLEAR(p->_extensions);
+  Py_CLEAR(p->_namespaces);
+  Py_CLEAR(p->_global_namespaces);
+  Py_CLEAR(p->_utf_refs);
+  Py_CLEAR(p->_function_cache);
+  Py_CLEAR(p->_eval_context_dict);
+  Py_CLEAR(p->_temp_refs);
+  Py_CLEAR(p->_temp_documents);
+  Py_CLEAR(p->_exc);
+  Py_CLEAR(p->_error_log);
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static int __pyx_setprop_4lxml_5etree_29_ModifyContentOnlyEntityProxy_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_4lxml_5etree_29_ModifyContentOnlyEntityProxy_4name_3__set__(o, v);
+static int __pyx_tp_traverse_4lxml_5etree__BaseContext(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__BaseContext *p = (struct __pyx_obj_4lxml_5etree__BaseContext *)o;
+  if (p->_doc) {
+    e = (*v)(((PyObject*)p->_doc), a); if (e) return e;
   }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
+  if (p->_extensions) {
+    e = (*v)(p->_extensions, a); if (e) return e;
   }
+  if (p->_namespaces) {
+    e = (*v)(p->_namespaces, a); if (e) return e;
+  }
+  if (p->_global_namespaces) {
+    e = (*v)(p->_global_namespaces, a); if (e) return e;
+  }
+  if (p->_utf_refs) {
+    e = (*v)(p->_utf_refs, a); if (e) return e;
+  }
+  if (p->_function_cache) {
+    e = (*v)(p->_function_cache, a); if (e) return e;
+  }
+  if (p->_eval_context_dict) {
+    e = (*v)(p->_eval_context_dict, a); if (e) return e;
+  }
+  if (p->_temp_refs) {
+    e = (*v)(((PyObject*)p->_temp_refs), a); if (e) return e;
+  }
+  if (p->_temp_documents) {
+    e = (*v)(p->_temp_documents, a); if (e) return e;
+  }
+  if (p->_exc) {
+    e = (*v)(((PyObject*)p->_exc), a); if (e) return e;
+  }
+  if (p->_error_log) {
+    e = (*v)(((PyObject*)p->_error_log), a); if (e) return e;
+  }
+  return 0;
 }
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ModifyContentOnlyEntityProxy[] = {
-  {(char *)"name", __pyx_getprop_4lxml_5etree_29_ModifyContentOnlyEntityProxy_name, __pyx_setprop_4lxml_5etree_29_ModifyContentOnlyEntityProxy_name, 0, 0},
+static int __pyx_tp_clear_4lxml_5etree__BaseContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__BaseContext *p = (struct __pyx_obj_4lxml_5etree__BaseContext *)o;
+  Py_CLEAR(p->_doc);
+  Py_CLEAR(p->_extensions);
+  Py_CLEAR(p->_namespaces);
+  Py_CLEAR(p->_global_namespaces);
+  Py_CLEAR(p->_utf_refs);
+  Py_CLEAR(p->_function_cache);
+  Py_CLEAR(p->_eval_context_dict);
+  Py_CLEAR(p->_temp_refs);
+  Py_CLEAR(p->_temp_documents);
+  Py_CLEAR(p->_exc);
+  Py_CLEAR(p->_error_log);
+  return 0;
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_12_BaseContext_context_node(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_12_BaseContext_12context_node_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_12_BaseContext_eval_context(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_12_BaseContext_12eval_context_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__BaseContext[] = {
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__BaseContext[] = {
+  {(char *)"context_node", __pyx_getprop_4lxml_5etree_12_BaseContext_context_node, 0, 0, 0},
+  {(char *)"eval_context", __pyx_getprop_4lxml_5etree_12_BaseContext_eval_context, 0, 0, 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy = {
+static PyTypeObject __pyx_type_4lxml_5etree__BaseContext = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ModifyContentOnlyEntityProxy"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ModifyContentOnlyEntityProxy), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._BaseContext"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__BaseContext), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__BaseContext, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -182629,11 +182763,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_3__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -182643,29 +182773,25 @@ static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("A read-only proxy for entity references (for internal use only!)"), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ReadOnlyProxy, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ReadOnlyProxy, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__BaseContext, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__BaseContext, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_15__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
-  0, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__BaseContext, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__ModifyContentOnlyEntityProxy, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__BaseContext, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_12_BaseContext_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ModifyContentOnlyEntityProxy, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__BaseContext, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -182681,47 +182807,85 @@ static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyEntityProxy __pyx_vtable_4lxml_5etree__ReadOnlyEntityProxy;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ReadOnlyEntityProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ReadOnlyEntityProxy *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ReadOnlyProxy(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__ElementUnicodeResult(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *p;
+  PyObject *o = (&PyUnicode_Type)->tp_new(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ReadOnlyEntityProxy *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__ReadOnlyEntityProxy;
+  p = ((struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *)o);
+  p->_parent = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
+  p->attrname = Py_None; Py_INCREF(Py_None);
   return o;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_20_ReadOnlyEntityProxy_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_20_ReadOnlyEntityProxy_4name_1__get__(o);
+static void __pyx_tp_dealloc_4lxml_5etree__ElementUnicodeResult(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *p = (struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_parent);
+  Py_CLEAR(p->attrname);
+  #if CYTHON_COMPILING_IN_CPYTHON
+  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
+  #endif
+  PyObject_GC_Track(o);
+  (&PyUnicode_Type)->tp_dealloc(o);
 }
 
-static int __pyx_setprop_4lxml_5etree_20_ReadOnlyEntityProxy_name(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_4lxml_5etree_20_ReadOnlyEntityProxy_4name_3__set__(o, v);
+static int __pyx_tp_traverse_4lxml_5etree__ElementUnicodeResult(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *p = (struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *)o;
+  if (!(&PyUnicode_Type)->tp_traverse); else { e = (&PyUnicode_Type)->tp_traverse(o,v,a); if (e) return e; }
+  if (p->_parent) {
+    e = (*v)(((PyObject*)p->_parent), a); if (e) return e;
   }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
+  if (p->attrname) {
+    e = (*v)(p->attrname, a); if (e) return e;
   }
+  return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_20_ReadOnlyEntityProxy_text(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_20_ReadOnlyEntityProxy_4text_1__get__(o);
+static int __pyx_tp_clear_4lxml_5etree__ElementUnicodeResult(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *p = (struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *)o;
+  if (!(&PyUnicode_Type)->tp_clear); else (&PyUnicode_Type)->tp_clear(o);
+  Py_CLEAR(p->_parent);
+  Py_CLEAR(p->attrname);
+  return 0;
 }
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ReadOnlyEntityProxy[] = {
-  {(char *)"name", __pyx_getprop_4lxml_5etree_20_ReadOnlyEntityProxy_name, __pyx_setprop_4lxml_5etree_20_ReadOnlyEntityProxy_name, 0, 0},
-  {(char *)"text", __pyx_getprop_4lxml_5etree_20_ReadOnlyEntityProxy_text, 0, 0, 0},
+static PyObject *__pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_attrname(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_21_ElementUnicodeResult_8attrname_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_is_tail(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_21_ElementUnicodeResult_7is_tail_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_is_text(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_21_ElementUnicodeResult_7is_text_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_is_attribute(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_21_ElementUnicodeResult_12is_attribute_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__ElementUnicodeResult[] = {
+  {__Pyx_NAMESTR("getparent"), (PyCFunction)__pyx_pw_4lxml_5etree_21_ElementUnicodeResult_1getparent, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ElementUnicodeResult[] = {
+  {(char *)"attrname", __pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_attrname, 0, 0, 0},
+  {(char *)"is_tail", __pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_is_tail, 0, 0, 0},
+  {(char *)"is_text", __pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_is_text, 0, 0, 0},
+  {(char *)"is_attribute", __pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_is_attribute, 0, 0, 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyEntityProxy = {
+static PyTypeObject __pyx_type_4lxml_5etree__ElementUnicodeResult = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ReadOnlyEntityProxy"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ReadOnlyEntityProxy), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._ElementUnicodeResult"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__ElementUnicodeResult), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__ElementUnicodeResult, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -182730,11 +182894,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyEntityProxy = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_3__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -182745,20 +182905,16 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyEntityProxy = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("A read-only proxy for entity references (for internal use only!)"), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ReadOnlyProxy, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ReadOnlyProxy, /*tp_clear*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__ElementUnicodeResult, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__ElementUnicodeResult, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_15__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
-  0, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__ElementUnicodeResult, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__ReadOnlyEntityProxy, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__ElementUnicodeResult, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -182766,7 +182922,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyEntityProxy = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ReadOnlyEntityProxy, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__ElementUnicodeResult, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -182782,74 +182938,53 @@ static PyTypeObject __pyx_type_4lxml_5etree__ReadOnlyEntityProxy = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree__XPathContext __pyx_vtable_4lxml_5etree__XPathContext;
 
-static struct __pyx_obj_4lxml_5etree__FileWriterElement *__pyx_freelist_4lxml_5etree__FileWriterElement[8];
-static int __pyx_freecount_4lxml_5etree__FileWriterElement = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree__FileWriterElement(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__FileWriterElement *p;
-  PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree__FileWriterElement > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__FileWriterElement)))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree__FileWriterElement[--__pyx_freecount_4lxml_5etree__FileWriterElement];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__FileWriterElement));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
-  } else {
-    o = (*t->tp_alloc)(t, 0);
-    if (unlikely(!o)) return 0;
-  }
-  p = ((struct __pyx_obj_4lxml_5etree__FileWriterElement *)o);
-  p->_element = Py_None; Py_INCREF(Py_None);
-  p->_writer = ((struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_18_FileWriterElement_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+static PyObject *__pyx_tp_new_4lxml_5etree__XPathContext(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__XPathContext *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__BaseContext(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree__XPathContext *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseContext*)__pyx_vtabptr_4lxml_5etree__XPathContext;
+  p->_variables = Py_None; Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__FileWriterElement(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__FileWriterElement *p = (struct __pyx_obj_4lxml_5etree__FileWriterElement *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__XPathContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__XPathContext *p = (struct __pyx_obj_4lxml_5etree__XPathContext *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_element);
-  Py_CLEAR(p->_writer);
-  if ((__pyx_freecount_4lxml_5etree__FileWriterElement < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__FileWriterElement))) {
-    __pyx_freelist_4lxml_5etree__FileWriterElement[__pyx_freecount_4lxml_5etree__FileWriterElement++] = ((struct __pyx_obj_4lxml_5etree__FileWriterElement *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
-  }
+  Py_CLEAR(p->_variables);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__BaseContext(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__FileWriterElement(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__XPathContext(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__FileWriterElement *p = (struct __pyx_obj_4lxml_5etree__FileWriterElement *)o;
-  if (p->_element) {
-    e = (*v)(p->_element, a); if (e) return e;
-  }
-  if (p->_writer) {
-    e = (*v)(((PyObject*)p->_writer), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__XPathContext *p = (struct __pyx_obj_4lxml_5etree__XPathContext *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__BaseContext(o, v, a); if (e) return e;
+  if (p->_variables) {
+    e = (*v)(p->_variables, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__FileWriterElement(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__FileWriterElement *p = (struct __pyx_obj_4lxml_5etree__FileWriterElement *)o;
-  Py_CLEAR(p->_element);
-  Py_CLEAR(p->_writer);
+static int __pyx_tp_clear_4lxml_5etree__XPathContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__XPathContext *p = (struct __pyx_obj_4lxml_5etree__XPathContext *)o;
+  __pyx_tp_clear_4lxml_5etree__BaseContext(o);
+  Py_CLEAR(p->_variables);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__FileWriterElement[] = {
-  {__Pyx_NAMESTR("__enter__"), (PyCFunction)__pyx_pw_4lxml_5etree_18_FileWriterElement_3__enter__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("__exit__"), (PyCFunction)__pyx_pw_4lxml_5etree_18_FileWriterElement_5__exit__, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree__XPathContext[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__FileWriterElement = {
+static PyTypeObject __pyx_type_4lxml_5etree__XPathContext = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._FileWriterElement"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__FileWriterElement), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._XPathContext"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__XPathContext), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__FileWriterElement, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__XPathContext, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -182870,13 +183005,13 @@ static PyTypeObject __pyx_type_4lxml_5etree__FileWriterElement = {
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__FileWriterElement, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__FileWriterElement, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__XPathContext, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__XPathContext, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__FileWriterElement, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__XPathContext, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -182884,9 +183019,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__FileWriterElement = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_13_XPathContext_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__FileWriterElement, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__XPathContext, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -182902,33 +183037,87 @@ static PyTypeObject __pyx_type_4lxml_5etree__FileWriterElement = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase __pyx_vtable_4lxml_5etree__XPathEvaluatorBase;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__MemDebug(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_4lxml_5etree__XPathEvaluatorBase(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *p;
   PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
   if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__XPathEvaluatorBase;
+  p->_context = ((struct __pyx_obj_4lxml_5etree__XPathContext *)Py_None); Py_INCREF(Py_None);
+  p->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_19_XPathEvaluatorBase_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__MemDebug(PyObject *o) {
+static void __pyx_tp_dealloc_4lxml_5etree__XPathEvaluatorBase(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *p = (struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *)o;
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
+  PyObject_GC_UnTrack(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_4lxml_5etree_19_XPathEvaluatorBase_5__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_CLEAR(p->_context);
+  Py_CLEAR(p->_error_log);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__MemDebug[] = {
-  {__Pyx_NAMESTR("bytes_used"), (PyCFunction)__pyx_pw_4lxml_5etree_9_MemDebug_1bytes_used, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_9_MemDebug_bytes_used)},
-  {__Pyx_NAMESTR("blocks_used"), (PyCFunction)__pyx_pw_4lxml_5etree_9_MemDebug_3blocks_used, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_9_MemDebug_2blocks_used)},
-  {__Pyx_NAMESTR("dict_size"), (PyCFunction)__pyx_pw_4lxml_5etree_9_MemDebug_5dict_size, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_9_MemDebug_4dict_size)},
-  {__Pyx_NAMESTR("dump"), (PyCFunction)__pyx_pw_4lxml_5etree_9_MemDebug_7dump, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_9_MemDebug_6dump)},
-  {__Pyx_NAMESTR("show"), (PyCFunction)__pyx_pw_4lxml_5etree_9_MemDebug_9show, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_9_MemDebug_8show)},
+static int __pyx_tp_traverse_4lxml_5etree__XPathEvaluatorBase(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *p = (struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *)o;
+  if (p->_context) {
+    e = (*v)(((PyObject*)p->_context), a); if (e) return e;
+  }
+  if (p->_error_log) {
+    e = (*v)(((PyObject*)p->_error_log), a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree__XPathEvaluatorBase(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *p = (struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *)o;
+  Py_CLEAR(p->_context);
+  Py_CLEAR(p->_error_log);
+  return 0;
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_19_XPathEvaluatorBase_error_log(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_19_XPathEvaluatorBase_9error_log_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__XPathEvaluatorBase[] = {
+  {__Pyx_NAMESTR("evaluate"), (PyCFunction)__pyx_pw_4lxml_5etree_19_XPathEvaluatorBase_7evaluate, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_19_XPathEvaluatorBase_6evaluate)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__MemDebug = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__XPathEvaluatorBase[] = {
+  {(char *)"error_log", __pyx_getprop_4lxml_5etree_19_XPathEvaluatorBase_error_log, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__XPathEvaluatorBase = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._MemDebug"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__MemDebug), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._XPathEvaluatorBase"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__MemDebug, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__XPathEvaluatorBase, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -182947,25 +183136,25 @@ static PyTypeObject __pyx_type_4lxml_5etree__MemDebug = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
-  __Pyx_DOCSTR("Debugging support for the memory allocation in libxml2.\n    "), /*tp_doc*/
-  0, /*tp_traverse*/
-  0, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__XPathEvaluatorBase, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__XPathEvaluatorBase, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__MemDebug, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__XPathEvaluatorBase, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__XPathEvaluatorBase, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_19_XPathEvaluatorBase_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__MemDebug, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__XPathEvaluatorBase, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -182981,36 +183170,20 @@ static PyTypeObject __pyx_type_4lxml_5etree__MemDebug = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree_XPathElementEvaluator __pyx_vtable_4lxml_5etree_XPathElementEvaluator;
 
-static struct __pyx_obj_4lxml_5etree__Attrib *__pyx_freelist_4lxml_5etree__Attrib[16];
-static int __pyx_freecount_4lxml_5etree__Attrib = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree__Attrib(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__Attrib *p;
-  PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree__Attrib > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__Attrib)) & ((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree__Attrib[--__pyx_freecount_4lxml_5etree__Attrib];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__Attrib));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
-  } else {
-    if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-      o = (*t->tp_alloc)(t, 0);
-    } else {
-      o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-    }
-    if (unlikely(!o)) return 0;
-  }
-  p = ((struct __pyx_obj_4lxml_5etree__Attrib *)o);
+static PyObject *__pyx_tp_new_4lxml_5etree_XPathElementEvaluator(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__XPathEvaluatorBase(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase*)__pyx_vtabptr_4lxml_5etree_XPathElementEvaluator;
   p->_element = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_7_Attrib_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__Attrib(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__Attrib *p = (struct __pyx_obj_4lxml_5etree__Attrib *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_XPathElementEvaluator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *p = (struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
@@ -183018,144 +183191,112 @@ static void __pyx_tp_dealloc_4lxml_5etree__Attrib(PyObject *o) {
   #endif
   PyObject_GC_UnTrack(o);
   Py_CLEAR(p->_element);
-  if ((__pyx_freecount_4lxml_5etree__Attrib < 16) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__Attrib))) {
-    __pyx_freelist_4lxml_5etree__Attrib[__pyx_freecount_4lxml_5etree__Attrib++] = ((struct __pyx_obj_4lxml_5etree__Attrib *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
-  }
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__XPathEvaluatorBase(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__Attrib(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree_XPathElementEvaluator(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__Attrib *p = (struct __pyx_obj_4lxml_5etree__Attrib *)o;
+  struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *p = (struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__XPathEvaluatorBase(o, v, a); if (e) return e;
   if (p->_element) {
     e = (*v)(((PyObject*)p->_element), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__Attrib(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__Attrib *p = (struct __pyx_obj_4lxml_5etree__Attrib *)o;
+static int __pyx_tp_clear_4lxml_5etree_XPathElementEvaluator(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *p = (struct __pyx_obj_4lxml_5etree_XPathElementEvaluator *)o;
+  __pyx_tp_clear_4lxml_5etree__XPathEvaluatorBase(o);
   Py_CLEAR(p->_element);
   return 0;
 }
-static PyObject *__pyx_sq_item_4lxml_5etree__Attrib(PyObject *o, Py_ssize_t i) {
-  PyObject *r;
-  PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
-  r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
-  Py_DECREF(x);
-  return r;
-}
-
-static int __pyx_mp_ass_subscript_4lxml_5etree__Attrib(PyObject *o, PyObject *i, PyObject *v) {
-  if (v) {
-    return __pyx_pw_4lxml_5etree_7_Attrib_3__setitem__(o, i, v);
-  }
-  else {
-    return __pyx_pw_4lxml_5etree_7_Attrib_5__delitem__(o, i);
-  }
-}
 
-static PyMethodDef __pyx_methods_4lxml_5etree__Attrib[] = {
-  {__Pyx_NAMESTR("update"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_7update, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("pop"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_9pop, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("clear"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_11clear, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("__copy__"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_15__copy__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("__deepcopy__"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_17__deepcopy__, METH_O, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("get"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_25get, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("keys"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_27keys, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("iterkeys"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_31iterkeys, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("values"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_33values, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("itervalues"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_35itervalues, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("items"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_37items, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("iteritems"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_39iteritems, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("has_key"), (PyCFunction)__pyx_pw_4lxml_5etree_7_Attrib_41has_key, METH_O, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree_XPathElementEvaluator[] = {
+  {__Pyx_NAMESTR("register_namespace"), (PyCFunction)__pyx_pw_4lxml_5etree_21XPathElementEvaluator_3register_namespace, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_21XPathElementEvaluator_2register_namespace)},
+  {__Pyx_NAMESTR("register_namespaces"), (PyCFunction)__pyx_pw_4lxml_5etree_21XPathElementEvaluator_5register_namespaces, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_21XPathElementEvaluator_4register_namespaces)},
   {0, 0, 0, 0}
 };
 
-static PyNumberMethods __pyx_tp_as_number__Attrib = {
-  0, /*nb_add*/
-  0, /*nb_subtract*/
-  0, /*nb_multiply*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_divide*/
-  #endif
-  0, /*nb_remainder*/
-  0, /*nb_divmod*/
-  0, /*nb_power*/
-  0, /*nb_negative*/
-  0, /*nb_positive*/
-  0, /*nb_absolute*/
-  __pyx_pw_4lxml_5etree_7_Attrib_21__bool__, /*nb_nonzero*/
-  0, /*nb_invert*/
-  0, /*nb_lshift*/
-  0, /*nb_rshift*/
-  0, /*nb_and*/
-  0, /*nb_xor*/
-  0, /*nb_or*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_coerce*/
-  #endif
-  0, /*nb_int*/
+static PyTypeObject __pyx_type_4lxml_5etree_XPathElementEvaluator = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("lxml.etree.XPathElementEvaluator"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_XPathElementEvaluator), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_4lxml_5etree_XPathElementEvaluator, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
   #if PY_MAJOR_VERSION < 3
-  0, /*nb_long*/
+  0, /*tp_compare*/
   #else
   0, /*reserved*/
   #endif
-  0, /*nb_float*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_oct*/
-  #endif
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_hex*/
-  #endif
-  0, /*nb_inplace_add*/
-  0, /*nb_inplace_subtract*/
-  0, /*nb_inplace_multiply*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_inplace_divide*/
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  __pyx_pw_4lxml_5etree_21XPathElementEvaluator_7__call__, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("XPathElementEvaluator(self, element, namespaces=None, extensions=None, regexp=True, smart_strings=True)\n    Create an XPath evaluator for an element.\n\n    Absolute XPath expressions (starting with '/') will be evaluated against\n    the ElementTree as returned by getroottree().\n\n    Additional namespace declarations can be passed with the\n    'namespace' keyword argument.  EXSLT regular expression support\n    can be disabled with the 'regexp' boolean keyword (defaults to\n    True).  Smart strings will be returned for string results unless\n    you pass ``smart_strings=False``.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_XPathElementEvaluator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_XPathElementEvaluator, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree_XPathElementEvaluator, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  __pyx_pw_4lxml_5etree_21XPathElementEvaluator_1__init__, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_4lxml_5etree_XPathElementEvaluator, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
   #endif
-  0, /*nb_inplace_remainder*/
-  0, /*nb_inplace_power*/
-  0, /*nb_inplace_lshift*/
-  0, /*nb_inplace_rshift*/
-  0, /*nb_inplace_and*/
-  0, /*nb_inplace_xor*/
-  0, /*nb_inplace_or*/
-  0, /*nb_floor_divide*/
-  0, /*nb_true_divide*/
-  0, /*nb_inplace_floor_divide*/
-  0, /*nb_inplace_true_divide*/
-  #if PY_VERSION_HEX >= 0x02050000
-  0, /*nb_index*/
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree_XPathDocumentEvaluator __pyx_vtable_4lxml_5etree_XPathDocumentEvaluator;
 
-static PySequenceMethods __pyx_tp_as_sequence__Attrib = {
-  __pyx_pw_4lxml_5etree_7_Attrib_23__len__, /*sq_length*/
-  0, /*sq_concat*/
-  0, /*sq_repeat*/
-  __pyx_sq_item_4lxml_5etree__Attrib, /*sq_item*/
-  0, /*sq_slice*/
-  0, /*sq_ass_item*/
-  0, /*sq_ass_slice*/
-  __pyx_pw_4lxml_5etree_7_Attrib_43__contains__, /*sq_contains*/
-  0, /*sq_inplace_concat*/
-  0, /*sq_inplace_repeat*/
-};
+static PyObject *__pyx_tp_new_4lxml_5etree_XPathDocumentEvaluator(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_XPathDocumentEvaluator *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree_XPathElementEvaluator(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree_XPathDocumentEvaluator *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase*)__pyx_vtabptr_4lxml_5etree_XPathDocumentEvaluator;
+  return o;
+}
 
-static PyMappingMethods __pyx_tp_as_mapping__Attrib = {
-  __pyx_pw_4lxml_5etree_7_Attrib_23__len__, /*mp_length*/
-  __pyx_pw_4lxml_5etree_7_Attrib_19__getitem__, /*mp_subscript*/
-  __pyx_mp_ass_subscript_4lxml_5etree__Attrib, /*mp_ass_subscript*/
+static PyMethodDef __pyx_methods_4lxml_5etree_XPathDocumentEvaluator[] = {
+  {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__Attrib = {
+static PyTypeObject __pyx_type_4lxml_5etree_XPathDocumentEvaluator = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._Attrib"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__Attrib), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.XPathDocumentEvaluator"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_XPathDocumentEvaluator), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__Attrib, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_XPathElementEvaluator, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -183164,25 +183305,25 @@ static PyTypeObject __pyx_type_4lxml_5etree__Attrib = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_7_Attrib_13__repr__, /*tp_repr*/
-  &__pyx_tp_as_number__Attrib, /*tp_as_number*/
-  &__pyx_tp_as_sequence__Attrib, /*tp_as_sequence*/
-  &__pyx_tp_as_mapping__Attrib, /*tp_as_mapping*/
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  0, /*tp_call*/
+  __pyx_pw_4lxml_5etree_22XPathDocumentEvaluator_3__call__, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("A dict-like proxy for the ``Element.attrib`` property.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Attrib, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__Attrib, /*tp_clear*/
-  __pyx_pw_4lxml_5etree_7_Attrib_45__richcmp__, /*tp_richcompare*/
+  __Pyx_DOCSTR("XPathDocumentEvaluator(self, etree, namespaces=None, extensions=None, regexp=True, smart_strings=True)\n    Create an XPath evaluator for an ElementTree.\n\n    Additional namespace declarations can be passed with the\n    'namespace' keyword argument.  EXSLT regular expression support\n    can be disabled with the 'regexp' boolean keyword (defaults to\n    True).  Smart strings will be returned for string results unless\n    you pass ``smart_strings=False``.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_XPathElementEvaluator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree_XPathElementEvaluator, /*tp_clear*/
+  0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_4lxml_5etree_7_Attrib_29__iter__, /*tp_iter*/
+  0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__Attrib, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_XPathDocumentEvaluator, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -183190,9 +183331,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__Attrib = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_22XPathDocumentEvaluator_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__Attrib, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_XPathDocumentEvaluator, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -183208,104 +183349,61 @@ static PyTypeObject __pyx_type_4lxml_5etree__Attrib = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree_XPath __pyx_vtable_4lxml_5etree_XPath;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementDefaultClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree_ElementClassLookup(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_XPath(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_XPath *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__XPathEvaluatorBase(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *)o);
-  p->element_class = Py_None; Py_INCREF(Py_None);
-  p->comment_class = Py_None; Py_INCREF(Py_None);
-  p->pi_class = Py_None; Py_INCREF(Py_None);
-  p->entity_class = Py_None; Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_25ElementDefaultClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree_XPath *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase*)__pyx_vtabptr_4lxml_5etree_XPath;
+  p->_path = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_5XPath_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_ElementDefaultClassLookup(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_XPath(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_XPath *p = (struct __pyx_obj_4lxml_5etree_XPath *)o;
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->element_class);
-  Py_CLEAR(p->comment_class);
-  Py_CLEAR(p->pi_class);
-  Py_CLEAR(p->entity_class);
-  #if CYTHON_COMPILING_IN_CPYTHON
-  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
-  #endif
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree_ElementClassLookup(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree_ElementDefaultClassLookup(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *)o;
-  e = ((likely(__pyx_ptype_4lxml_5etree_ElementClassLookup)) ? ((__pyx_ptype_4lxml_5etree_ElementClassLookup->tp_traverse) ? __pyx_ptype_4lxml_5etree_ElementClassLookup->tp_traverse(o, v, a) : 0) : __Pyx_call_next_tp_traverse(o, v, a, __pyx_tp_traverse_4lxml_5etree_ElementDefaultClassLookup)); if (e) return e;
-  if (p->element_class) {
-    e = (*v)(p->element_class, a); if (e) return e;
-  }
-  if (p->comment_class) {
-    e = (*v)(p->comment_class, a); if (e) return e;
-  }
-  if (p->pi_class) {
-    e = (*v)(p->pi_class, a); if (e) return e;
-  }
-  if (p->entity_class) {
-    e = (*v)(p->entity_class, a); if (e) return e;
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_4lxml_5etree_5XPath_7__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
   }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree_ElementDefaultClassLookup(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *p = (struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup *)o;
-  if (likely(__pyx_ptype_4lxml_5etree_ElementClassLookup)) { if (__pyx_ptype_4lxml_5etree_ElementClassLookup->tp_clear) __pyx_ptype_4lxml_5etree_ElementClassLookup->tp_clear(o); } else __Pyx_call_next_tp_clear(o, __pyx_tp_clear_4lxml_5etree_ElementDefaultClassLookup);
-  Py_CLEAR(p->element_class);
-  Py_CLEAR(p->comment_class);
-  Py_CLEAR(p->pi_class);
-  Py_CLEAR(p->entity_class);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_element_class(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_25ElementDefaultClassLookup_13element_class_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_comment_class(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_25ElementDefaultClassLookup_13comment_class_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_pi_class(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_25ElementDefaultClassLookup_8pi_class_1__get__(o);
+  Py_CLEAR(p->_path);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__XPathEvaluatorBase(o);
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_entity_class(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_25ElementDefaultClassLookup_12entity_class_1__get__(o);
+static PyObject *__pyx_getprop_4lxml_5etree_5XPath_path(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_5XPath_4path_1__get__(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_ElementDefaultClassLookup[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_XPath[] = {
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree_ElementDefaultClassLookup[] = {
-  {(char *)"element_class", __pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_element_class, 0, 0, 0},
-  {(char *)"comment_class", __pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_comment_class, 0, 0, 0},
-  {(char *)"pi_class", __pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_pi_class, 0, 0, 0},
-  {(char *)"entity_class", __pyx_getprop_4lxml_5etree_25ElementDefaultClassLookup_entity_class, 0, 0, 0},
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree_XPath[] = {
+  {(char *)"path", __pyx_getprop_4lxml_5etree_5XPath_path, 0, __Pyx_DOCSTR(__pyx_k_The_literal_XPath_expression), 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_ElementDefaultClassLookup = {
+static PyTypeObject __pyx_type_4lxml_5etree_XPath = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.ElementDefaultClassLookup"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_ElementDefaultClassLookup), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.XPath"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_XPath), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_ElementDefaultClassLookup, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_XPath, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -183314,35 +183412,35 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementDefaultClassLookup = {
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_5XPath_9__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  0, /*tp_call*/
+  __pyx_pw_4lxml_5etree_5XPath_5__call__, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("ElementDefaultClassLookup(self, element=None, comment=None, pi=None, entity=None)\n    Element class lookup scheme that always returns the default Element\n    class.\n\n    The keyword arguments ``element``, ``comment``, ``pi`` and ``entity``\n    accept the respective Element classes.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_ElementDefaultClassLookup, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_ElementDefaultClassLookup, /*tp_clear*/
+  __Pyx_DOCSTR("XPath(self, path, namespaces=None, extensions=None, regexp=True, smart_strings=True)\n    A compiled XPath expression that can be called on Elements and ElementTrees.\n\n    Besides the XPath expression, you can pass prefix-namespace\n    mappings and extension functions to the constructor through the\n    keyword arguments ``namespaces`` and ``extensions``.  EXSLT\n    regular expression support can be disabled with the 'regexp'\n    boolean keyword (defaults to True).  Smart strings will be\n    returned for string results unless you pass\n    ``smart_strings=False``.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__XPathEvaluatorBase, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__XPathEvaluatorBase, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_ElementDefaultClassLookup, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_XPath, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree_ElementDefaultClassLookup, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree_XPath, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_25ElementDefaultClassLookup_3__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_5XPath_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_ElementDefaultClassLookup, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_XPath, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -183358,85 +183456,27 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementDefaultClassLookup = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree_ETXPath __pyx_vtable_4lxml_5etree_ETXPath;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ElementUnicodeResult(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *p;
-  PyObject *o = (&PyUnicode_Type)->tp_new(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_ETXPath(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_ETXPath *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree_XPath(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *)o);
-  p->_parent = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
-  p->attrname = Py_None; Py_INCREF(Py_None);
+  p = ((struct __pyx_obj_4lxml_5etree_ETXPath *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__XPathEvaluatorBase*)__pyx_vtabptr_4lxml_5etree_ETXPath;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ElementUnicodeResult(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *p = (struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_parent);
-  Py_CLEAR(p->attrname);
-  #if CYTHON_COMPILING_IN_CPYTHON
-  if (PyType_IS_GC(Py_TYPE(o)->tp_base))
-  #endif
-  PyObject_GC_Track(o);
-  (&PyUnicode_Type)->tp_dealloc(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__ElementUnicodeResult(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *p = (struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *)o;
-  if (!(&PyUnicode_Type)->tp_traverse); else { e = (&PyUnicode_Type)->tp_traverse(o,v,a); if (e) return e; }
-  if (p->_parent) {
-    e = (*v)(((PyObject*)p->_parent), a); if (e) return e;
-  }
-  if (p->attrname) {
-    e = (*v)(p->attrname, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__ElementUnicodeResult(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *p = (struct __pyx_obj_4lxml_5etree__ElementUnicodeResult *)o;
-  if (!(&PyUnicode_Type)->tp_clear); else (&PyUnicode_Type)->tp_clear(o);
-  Py_CLEAR(p->_parent);
-  Py_CLEAR(p->attrname);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_attrname(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_21_ElementUnicodeResult_8attrname_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_is_tail(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_21_ElementUnicodeResult_7is_tail_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_is_text(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_21_ElementUnicodeResult_7is_text_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_is_attribute(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_21_ElementUnicodeResult_12is_attribute_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_5etree__ElementUnicodeResult[] = {
-  {__Pyx_NAMESTR("getparent"), (PyCFunction)__pyx_pw_4lxml_5etree_21_ElementUnicodeResult_1getparent, METH_NOARGS, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_5etree_ETXPath[] = {
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ElementUnicodeResult[] = {
-  {(char *)"attrname", __pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_attrname, 0, 0, 0},
-  {(char *)"is_tail", __pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_is_tail, 0, 0, 0},
-  {(char *)"is_text", __pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_is_text, 0, 0, 0},
-  {(char *)"is_attribute", __pyx_getprop_4lxml_5etree_21_ElementUnicodeResult_is_attribute, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__ElementUnicodeResult = {
+static PyTypeObject __pyx_type_4lxml_5etree_ETXPath = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ElementUnicodeResult"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ElementUnicodeResult), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.ETXPath"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_ETXPath), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ElementUnicodeResult, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_XPath, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -183445,35 +183485,43 @@ static PyTypeObject __pyx_type_4lxml_5etree__ElementUnicodeResult = {
   #else
   0, /*reserved*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_5XPath_9__repr__, /*tp_repr*/
+  #else
   0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_5XPath_5__call__, /*tp_call*/
+  #else
   0, /*tp_call*/
+  #endif
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ElementUnicodeResult, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ElementUnicodeResult, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("ETXPath(self, path, extensions=None, regexp=True, smart_strings=True)\n    Special XPath class that supports the ElementTree {uri} notation for namespaces.\n\n    Note that this class does not accept the ``namespace`` keyword\n    argument. All namespaces must be passed as part of the path\n    string.  Smart strings will be returned for string results unless\n    you pass ``smart_strings=False``.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__XPathEvaluatorBase, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__XPathEvaluatorBase, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ElementUnicodeResult, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_ETXPath, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__ElementUnicodeResult, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_7ETXPath_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ElementUnicodeResult, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_ETXPath, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -183489,57 +183537,49 @@ static PyTypeObject __pyx_type_4lxml_5etree__ElementUnicodeResult = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ExsltRegExp __pyx_vtable_4lxml_5etree__ExsltRegExp;
+static struct __pyx_vtabstruct_4lxml_5etree__XSLTResolverContext __pyx_vtable_4lxml_5etree__XSLTResolverContext;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ExsltRegExp(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ExsltRegExp *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
+static PyObject *__pyx_tp_new_4lxml_5etree__XSLTResolverContext(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__XSLTResolverContext *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ResolverContext(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ExsltRegExp *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ExsltRegExp;
-  p->_compile_map = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_12_ExsltRegExp_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  p = ((struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)o);
+  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext*)__pyx_vtabptr_4lxml_5etree__XSLTResolverContext;
+  p->_parser = ((struct __pyx_obj_4lxml_5etree__BaseParser *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ExsltRegExp(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ExsltRegExp *p = (struct __pyx_obj_4lxml_5etree__ExsltRegExp *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__XSLTResolverContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__XSLTResolverContext *p = (struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_compile_map);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_CLEAR(p->_parser);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__ResolverContext(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__ExsltRegExp(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__XSLTResolverContext(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__ExsltRegExp *p = (struct __pyx_obj_4lxml_5etree__ExsltRegExp *)o;
-  if (p->_compile_map) {
-    e = (*v)(p->_compile_map, a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__XSLTResolverContext *p = (struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__ResolverContext(o, v, a); if (e) return e;
+  if (p->_parser) {
+    e = (*v)(((PyObject*)p->_parser), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__ExsltRegExp(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ExsltRegExp *p = (struct __pyx_obj_4lxml_5etree__ExsltRegExp *)o;
-  Py_CLEAR(p->_compile_map);
+static int __pyx_tp_clear_4lxml_5etree__XSLTResolverContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__XSLTResolverContext *p = (struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)o;
+  __pyx_tp_clear_4lxml_5etree__ResolverContext(o);
+  Py_CLEAR(p->_parser);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__ExsltRegExp[] = {
-  {__Pyx_NAMESTR("test"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ExsltRegExp_3test, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("match"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ExsltRegExp_5match, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("replace"), (PyCFunction)__pyx_pw_4lxml_5etree_12_ExsltRegExp_7replace, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(0)},
-  {0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__ExsltRegExp = {
+static PyTypeObject __pyx_type_4lxml_5etree__XSLTResolverContext = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ExsltRegExp"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ExsltRegExp), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._XSLTResolverContext"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__XSLTResolverContext), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ExsltRegExp, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__XSLTResolverContext, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -183560,13 +183600,13 @@ static PyTypeObject __pyx_type_4lxml_5etree__ExsltRegExp = {
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ExsltRegExp, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ExsltRegExp, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__XSLTResolverContext, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__XSLTResolverContext, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ExsltRegExp, /*tp_methods*/
+  0, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -183576,7 +183616,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ExsltRegExp = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ExsltRegExp, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__XSLTResolverContext, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -183592,78 +183632,61 @@ static PyTypeObject __pyx_type_4lxml_5etree__ExsltRegExp = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree_XSLTAccessControl __pyx_vtable_4lxml_5etree_XSLTAccessControl;
 
-static struct __pyx_obj_4lxml_5etree_QName *__pyx_freelist_4lxml_5etree_QName[8];
-static int __pyx_freecount_4lxml_5etree_QName = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree_QName(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_QName *p;
+static PyObject *__pyx_tp_new_4lxml_5etree_XSLTAccessControl(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_XSLTAccessControl *p;
   PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree_QName > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree_QName)) & ((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree_QName[--__pyx_freecount_4lxml_5etree_QName];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree_QName));
-    (void) PyObject_INIT(o, t);
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
   } else {
-    if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-      o = (*t->tp_alloc)(t, 0);
-    } else {
-      o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-    }
-    if (unlikely(!o)) return 0;
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+  }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree_XSLTAccessControl *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_XSLTAccessControl;
+  if (unlikely(__pyx_pw_4lxml_5etree_17XSLTAccessControl_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
   }
-  p = ((struct __pyx_obj_4lxml_5etree_QName *)o);
-  p->text = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->localname = ((PyObject*)Py_None); Py_INCREF(Py_None);
-  p->namespace = ((PyObject*)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_QName(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree_QName *p = (struct __pyx_obj_4lxml_5etree_QName *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_XSLTAccessControl(PyObject *o) {
   #if PY_VERSION_HEX >= 0x030400a1
   if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
-  Py_CLEAR(p->text);
-  Py_CLEAR(p->localname);
-  Py_CLEAR(p->namespace);
-  if ((__pyx_freecount_4lxml_5etree_QName < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree_QName))) {
-    __pyx_freelist_4lxml_5etree_QName[__pyx_freecount_4lxml_5etree_QName++] = ((struct __pyx_obj_4lxml_5etree_QName *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_4lxml_5etree_17XSLTAccessControl_5__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
   }
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_5QName_text(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_5QName_4text_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_5QName_localname(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_5QName_9localname_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_5QName_namespace(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_5QName_9namespace_1__get__(o);
+static PyObject *__pyx_getprop_4lxml_5etree_17XSLTAccessControl_options(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_17XSLTAccessControl_7options_1__get__(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_QName[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_XSLTAccessControl[] = {
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree_QName[] = {
-  {(char *)"text", __pyx_getprop_4lxml_5etree_5QName_text, 0, 0, 0},
-  {(char *)"localname", __pyx_getprop_4lxml_5etree_5QName_localname, 0, 0, 0},
-  {(char *)"namespace", __pyx_getprop_4lxml_5etree_5QName_namespace, 0, 0, 0},
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree_XSLTAccessControl[] = {
+  {(char *)"options", __pyx_getprop_4lxml_5etree_17XSLTAccessControl_options, 0, __Pyx_DOCSTR(__pyx_k_The_access_control_configuration), 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_QName = {
+static PyTypeObject __pyx_type_4lxml_5etree_XSLTAccessControl = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.QName"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_QName), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.XSLTAccessControl"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_XSLTAccessControl), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_QName, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_XSLTAccessControl, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -183672,35 +183695,35 @@ static PyTypeObject __pyx_type_4lxml_5etree_QName = {
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_17XSLTAccessControl_7__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
-  __pyx_pw_4lxml_5etree_5QName_5__hash__, /*tp_hash*/
+  0, /*tp_hash*/
   0, /*tp_call*/
-  __pyx_pw_4lxml_5etree_5QName_3__str__, /*tp_str*/
+  0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
-  __Pyx_DOCSTR("QName(text_or_uri_or_element, tag=None)\n\n    QName wrapper for qualified XML names.\n\n    Pass a tag name by itself or a namespace URI and a tag name to\n    create a qualified name.  Alternatively, pass an Element to\n    extract its tag name.\n\n    The ``text`` property holds the qualified name in\n    ``{namespace}tagname`` notation.  The ``namespace`` and\n    ``localname`` properties hold the respective parts of the tag\n    name.\n\n    You can pass QName objects wherever a tag name is expected.  Also,\n    setting Element text from a QName will resolve the namespace\n    prefix and set a qualified text value.  This is helpful in XML\n    languages like SOAP or XML-Schema that use prefixed tag names in\n    their text content.\n    "), /*tp_doc*/
+  __Pyx_DOCSTR("XSLTAccessControl(self, read_file=True, write_file=True, create_dir=True, read_network=True, write_network=True)\n\n    Access control for XSLT: reading/writing files, directories and\n    network I/O.  Access to a type of resource is granted or denied by\n    passing any of the following boolean keyword arguments.  All of\n    them default to True to allow access.\n\n    - read_file\n    - write_file\n    - create_dir\n    - read_network\n    - write_network\n\n    For convenience, there is also a class member `DENY_ALL` that\n    provides an XSLTAccessControl instance that is readily configured\n    to deny everything, and a `DENY_WRITE` member that denies all\n    write access but allows read access.\n\n    See `XSLT`.\n    "), /*tp_doc*/
   0, /*tp_traverse*/
   0, /*tp_clear*/
-  __pyx_pw_4lxml_5etree_5QName_7__richcmp__, /*tp_richcompare*/
+  0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_QName, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_XSLTAccessControl, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree_QName, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree_XSLTAccessControl, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_5QName_1__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_17XSLTAccessControl_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_QName, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_XSLTAccessControl, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -183716,61 +183739,62 @@ static PyTypeObject __pyx_type_4lxml_5etree_QName = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree__XSLTContext __pyx_vtable_4lxml_5etree__XSLTContext;
 
-static struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *__pyx_freelist_4lxml_5etree___pyx_scope_struct_3_iterentities[8];
-static int __pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct_3_iterentities(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities)))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct_3_iterentities[--__pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
-  } else {
-    o = (*t->tp_alloc)(t, 0);
-    if (unlikely(!o)) return 0;
+static PyObject *__pyx_tp_new_4lxml_5etree__XSLTContext(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__XSLTContext *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__BaseContext(t, a, k);
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree__XSLTContext *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseContext*)__pyx_vtabptr_4lxml_5etree__XSLTContext;
+  p->_extension_element_proxy = ((struct __pyx_obj_4lxml_5etree__ReadOnlyElementProxy *)Py_None); Py_INCREF(Py_None);
+  p->_extension_elements = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_12_XSLTContext_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct_3_iterentities(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__XSLTContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__XSLTContext *p = (struct __pyx_obj_4lxml_5etree__XSLTContext *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->__pyx_v_node);
-  Py_CLEAR(p->__pyx_v_self);
-  if ((__pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities))) {
-    __pyx_freelist_4lxml_5etree___pyx_scope_struct_3_iterentities[__pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities++] = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
-  }
+  Py_CLEAR(p->_extension_element_proxy);
+  Py_CLEAR(p->_extension_elements);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__BaseContext(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct_3_iterentities(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__XSLTContext(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *)o;
-  if (p->__pyx_v_node) {
-    e = (*v)(((PyObject*)p->__pyx_v_node), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__XSLTContext *p = (struct __pyx_obj_4lxml_5etree__XSLTContext *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__BaseContext(o, v, a); if (e) return e;
+  if (p->_extension_element_proxy) {
+    e = (*v)(((PyObject*)p->_extension_element_proxy), a); if (e) return e;
   }
-  if (p->__pyx_v_self) {
-    e = (*v)(((PyObject*)p->__pyx_v_self), a); if (e) return e;
+  if (p->_extension_elements) {
+    e = (*v)(p->_extension_elements, a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree___pyx_scope_struct_3_iterentities(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *)o;
-  Py_CLEAR(p->__pyx_v_node);
-  Py_CLEAR(p->__pyx_v_self);
+static int __pyx_tp_clear_4lxml_5etree__XSLTContext(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__XSLTContext *p = (struct __pyx_obj_4lxml_5etree__XSLTContext *)o;
+  __pyx_tp_clear_4lxml_5etree__BaseContext(o);
+  Py_CLEAR(p->_extension_element_proxy);
+  Py_CLEAR(p->_extension_elements);
   return 0;
 }
 
-static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_3_iterentities = {
+static PyMethodDef __pyx_methods_4lxml_5etree__XSLTContext[] = {
+  {0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__XSLTContext = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.__pyx_scope_struct_3_iterentities"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._XSLTContext"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__XSLTContext), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct_3_iterentities, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__XSLTContext, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -183791,13 +183815,13 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_3_iterentities =
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct_3_iterentities, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree___pyx_scope_struct_3_iterentities, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__XSLTContext, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__XSLTContext, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  0, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__XSLTContext, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -183805,9 +183829,9 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_3_iterentities =
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_12_XSLTContext_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree___pyx_scope_struct_3_iterentities, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__XSLTContext, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -183823,51 +183847,49 @@ static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_3_iterentities =
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__TempStore __pyx_vtable_4lxml_5etree__TempStore;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__TempStore(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__TempStore *p;
+static struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam *__pyx_freelist_4lxml_5etree__XSLTQuotedStringParam[8];
+static int __pyx_freecount_4lxml_5etree__XSLTQuotedStringParam = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree__XSLTQuotedStringParam(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam *p;
   PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__TempStore *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__TempStore;
-  p->_storage = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (likely((__pyx_freecount_4lxml_5etree__XSLTQuotedStringParam > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam)))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree__XSLTQuotedStringParam[--__pyx_freecount_4lxml_5etree__XSLTQuotedStringParam];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam));
+    (void) PyObject_INIT(o, t);
+  } else {
+    o = (*t->tp_alloc)(t, 0);
+    if (unlikely(!o)) return 0;
+  }
+  p = ((struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam *)o);
+  p->strval = ((PyObject*)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_22_XSLTQuotedStringParam_1__cinit__(o, a, k) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__TempStore(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__TempStore *p = (struct __pyx_obj_4lxml_5etree__TempStore *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_storage);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__TempStore(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__TempStore *p = (struct __pyx_obj_4lxml_5etree__TempStore *)o;
-  if (p->_storage) {
-    e = (*v)(p->_storage, a); if (e) return e;
+static void __pyx_tp_dealloc_4lxml_5etree__XSLTQuotedStringParam(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam *p = (struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam *)o;
+  Py_CLEAR(p->strval);
+  if ((__pyx_freecount_4lxml_5etree__XSLTQuotedStringParam < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam))) {
+    __pyx_freelist_4lxml_5etree__XSLTQuotedStringParam[__pyx_freecount_4lxml_5etree__XSLTQuotedStringParam++] = ((struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
   }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__TempStore(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__TempStore *p = (struct __pyx_obj_4lxml_5etree__TempStore *)o;
-  Py_CLEAR(p->_storage);
-  return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__TempStore[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree__XSLTQuotedStringParam[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__TempStore = {
+static PyTypeObject __pyx_type_4lxml_5etree__XSLTQuotedStringParam = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._TempStore"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__TempStore), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._XSLTQuotedStringParam"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__XSLTQuotedStringParam), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__TempStore, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__XSLTQuotedStringParam, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -183886,15 +183908,15 @@ static PyTypeObject __pyx_type_4lxml_5etree__TempStore = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__TempStore, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__TempStore, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
+  __Pyx_DOCSTR("A wrapper class for literal XSLT string parameters that require\n    quote escaping.\n    "), /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__TempStore, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__XSLTQuotedStringParam, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -183902,9 +183924,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__TempStore = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_10_TempStore_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__TempStore, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__XSLTQuotedStringParam, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -183920,8 +183942,10 @@ static PyTypeObject __pyx_type_4lxml_5etree__TempStore = {
   0, /*tp_finalize*/
   #endif
 };
+static struct __pyx_vtabstruct_4lxml_5etree_XSLT __pyx_vtable_4lxml_5etree_XSLT;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__OpaqueNodeWrapper(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static PyObject *__pyx_tp_new_4lxml_5etree_XSLT(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_XSLT *p;
   PyObject *o;
   if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
     o = (*t->tp_alloc)(t, 0);
@@ -183929,28 +183953,84 @@ static PyObject *__pyx_tp_new_4lxml_5etree__OpaqueNodeWrapper(PyTypeObject *t, C
     o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
   if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree_XSLT *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_XSLT;
+  p->_context = ((struct __pyx_obj_4lxml_5etree__XSLTContext *)Py_None); Py_INCREF(Py_None);
+  p->_xslt_resolver_context = ((struct __pyx_obj_4lxml_5etree__XSLTResolverContext *)Py_None); Py_INCREF(Py_None);
+  p->_access_control = ((struct __pyx_obj_4lxml_5etree_XSLTAccessControl *)Py_None); Py_INCREF(Py_None);
+  p->_error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_4XSLT_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__OpaqueNodeWrapper(PyObject *o) {
+static void __pyx_tp_dealloc_4lxml_5etree_XSLT(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree_XSLT *p = (struct __pyx_obj_4lxml_5etree_XSLT *)o;
   #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
+  PyObject_GC_UnTrack(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_4lxml_5etree_4XSLT_5__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
+  }
+  Py_CLEAR(p->_context);
+  Py_CLEAR(p->_xslt_resolver_context);
+  Py_CLEAR(p->_access_control);
+  Py_CLEAR(p->_error_log);
   (*Py_TYPE(o)->tp_free)(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__OpaqueNodeWrapper[] = {
+static int __pyx_tp_traverse_4lxml_5etree_XSLT(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree_XSLT *p = (struct __pyx_obj_4lxml_5etree_XSLT *)o;
+  if (p->_context) {
+    e = (*v)(((PyObject*)p->_context), a); if (e) return e;
+  }
+  if (p->_xslt_resolver_context) {
+    e = (*v)(((PyObject*)p->_xslt_resolver_context), a); if (e) return e;
+  }
+  if (p->_access_control) {
+    e = (*v)(((PyObject*)p->_access_control), a); if (e) return e;
+  }
+  if (p->_error_log) {
+    e = (*v)(((PyObject*)p->_error_log), a); if (e) return e;
+  }
+  return 0;
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_4XSLT_error_log(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_4XSLT_9error_log_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_XSLT[] = {
+  {__Pyx_NAMESTR("strparam"), (PyCFunction)__pyx_pw_4lxml_5etree_4XSLT_7strparam, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_4XSLT_6strparam)},
+  {__Pyx_NAMESTR("set_global_max_depth"), (PyCFunction)__pyx_pw_4lxml_5etree_4XSLT_9set_global_max_depth, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_4XSLT_8set_global_max_depth)},
+  {__Pyx_NAMESTR("apply"), (PyCFunction)__pyx_pw_4lxml_5etree_4XSLT_11apply, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_4XSLT_10apply)},
+  {__Pyx_NAMESTR("tostring"), (PyCFunction)__pyx_pw_4lxml_5etree_4XSLT_13tostring, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_4XSLT_12tostring)},
+  {__Pyx_NAMESTR("__deepcopy__"), (PyCFunction)__pyx_pw_4lxml_5etree_4XSLT_15__deepcopy__, METH_O, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("__copy__"), (PyCFunction)__pyx_pw_4lxml_5etree_4XSLT_17__copy__, METH_NOARGS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__OpaqueNodeWrapper = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree_XSLT[] = {
+  {(char *)"error_log", __pyx_getprop_4lxml_5etree_4XSLT_error_log, 0, __Pyx_DOCSTR(__pyx_k_The_log_of_errors_and_warnings_o), 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree_XSLT = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._OpaqueNodeWrapper"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__OpaqueNodeWrapper), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.XSLT"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_XSLT), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__OpaqueNodeWrapper, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_XSLT, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -183964,30 +184044,30 @@ static PyTypeObject __pyx_type_4lxml_5etree__OpaqueNodeWrapper = {
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  0, /*tp_call*/
+  __pyx_pw_4lxml_5etree_4XSLT_19__call__, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
-  0, /*tp_doc*/
-  0, /*tp_traverse*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("XSLT(self, xslt_input, extensions=None, regexp=True, access_control=None)\n\n    Turn an XSL document into an XSLT object.\n\n    Calling this object on a tree or Element will execute the XSLT::\n\n        transform = etree.XSLT(xsl_tree)\n        result = transform(xml_tree)\n\n    Keyword arguments of the constructor:\n\n    - extensions: a dict mapping ``(namespace, name)`` pairs to\n      extension functions or extension elements\n    - regexp: enable exslt regular expression support in XPath\n      (default: True)\n    - access_control: access restrictions for network or file\n      system (see `XSLTAccessControl`)\n\n    Keyword arguments of the XSLT call:\n\n    - profile_run: enable XSLT profiling (default: False)\n\n    Other keyword arguments of the call are passed to the stylesheet\n    as parameters.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree_XSLT, /*tp_traverse*/
   0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__OpaqueNodeWrapper, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_XSLT, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree_XSLT, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_18_OpaqueNodeWrapper_1__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_4XSLT_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__OpaqueNodeWrapper, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_XSLT, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -184003,72 +184083,103 @@ static PyTypeObject __pyx_type_4lxml_5etree__OpaqueNodeWrapper = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__FilelikeWriter __pyx_vtable_4lxml_5etree__FilelikeWriter;
+static struct __pyx_vtabstruct_4lxml_5etree__XSLTResultTree __pyx_vtable_4lxml_5etree__XSLTResultTree;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__FilelikeWriter(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__FilelikeWriter *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
+static PyObject *__pyx_tp_new_4lxml_5etree__XSLTResultTree(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__XSLTResultTree *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__ElementTree(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__FilelikeWriter;
-  p->_filelike = Py_None; Py_INCREF(Py_None);
-  p->_close_filelike = Py_None; Py_INCREF(Py_None);
-  p->_exc_context = ((struct __pyx_obj_4lxml_5etree__ExceptionContext *)Py_None); Py_INCREF(Py_None);
-  p->error_log = ((struct __pyx_obj_4lxml_5etree__ErrorLog *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_15_FilelikeWriter_1__cinit__(o, a, k) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree__XSLTResultTree *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ElementTree*)__pyx_vtabptr_4lxml_5etree__XSLTResultTree;
+  p->_xslt = ((struct __pyx_obj_4lxml_5etree_XSLT *)Py_None); Py_INCREF(Py_None);
+  p->_profile = ((struct LxmlDocument *)Py_None); Py_INCREF(Py_None);
+  if (unlikely(__pyx_pw_4lxml_5etree_15_XSLTResultTree_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__FilelikeWriter(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__FilelikeWriter *p = (struct __pyx_obj_4lxml_5etree__FilelikeWriter *)o;
+static void __pyx_tp_dealloc_4lxml_5etree__XSLTResultTree(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__XSLTResultTree *p = (struct __pyx_obj_4lxml_5etree__XSLTResultTree *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_filelike);
-  Py_CLEAR(p->_close_filelike);
-  Py_CLEAR(p->_exc_context);
-  Py_CLEAR(p->error_log);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_CLEAR(p->_xslt);
+  Py_CLEAR(p->_profile);
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__ElementTree(o);
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__FilelikeWriter(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree__XSLTResultTree(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__FilelikeWriter *p = (struct __pyx_obj_4lxml_5etree__FilelikeWriter *)o;
-  if (p->_filelike) {
-    e = (*v)(p->_filelike, a); if (e) return e;
-  }
-  if (p->_close_filelike) {
-    e = (*v)(p->_close_filelike, a); if (e) return e;
-  }
-  if (p->_exc_context) {
-    e = (*v)(((PyObject*)p->_exc_context), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree__XSLTResultTree *p = (struct __pyx_obj_4lxml_5etree__XSLTResultTree *)o;
+  e = __pyx_tp_traverse_4lxml_5etree__ElementTree(o, v, a); if (e) return e;
+  if (p->_xslt) {
+    e = (*v)(((PyObject*)p->_xslt), a); if (e) return e;
   }
-  if (p->error_log) {
-    e = (*v)(((PyObject*)p->error_log), a); if (e) return e;
+  if (p->_profile) {
+    e = (*v)(((PyObject*)p->_profile), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__FilelikeWriter(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__FilelikeWriter *p = (struct __pyx_obj_4lxml_5etree__FilelikeWriter *)o;
-  Py_CLEAR(p->_filelike);
-  Py_CLEAR(p->_close_filelike);
-  Py_CLEAR(p->_exc_context);
-  Py_CLEAR(p->error_log);
+static int __pyx_tp_clear_4lxml_5etree__XSLTResultTree(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__XSLTResultTree *p = (struct __pyx_obj_4lxml_5etree__XSLTResultTree *)o;
+  __pyx_tp_clear_4lxml_5etree__ElementTree(o);
+  Py_CLEAR(p->_xslt);
+  Py_CLEAR(p->_profile);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__FilelikeWriter[] = {
+static PyObject *__pyx_getprop_4lxml_5etree_15_XSLTResultTree_xslt_profile(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_15_XSLTResultTree_12xslt_profile_1__get__(o);
+}
+
+static int __pyx_setprop_4lxml_5etree_15_XSLTResultTree_xslt_profile(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    PyErr_SetString(PyExc_NotImplementedError, "__set__");
+    return -1;
+  }
+  else {
+    return __pyx_pw_4lxml_5etree_15_XSLTResultTree_12xslt_profile_3__del__(o);
+  }
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__XSLTResultTree[] = {
+  {__Pyx_NAMESTR("__unicode__"), (PyCFunction)__pyx_pw_4lxml_5etree_15_XSLTResultTree_5__unicode__, METH_NOARGS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__FilelikeWriter = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__XSLTResultTree[] = {
+  {(char *)"xslt_profile", __pyx_getprop_4lxml_5etree_15_XSLTResultTree_xslt_profile, __pyx_setprop_4lxml_5etree_15_XSLTResultTree_xslt_profile, __Pyx_DOCSTR(__pyx_k_Return_an_ElementTree_with_profi), 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyBufferProcs __pyx_tp_as_buffer__XSLTResultTree = {
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getreadbuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getwritebuffer*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getsegcount*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*bf_getcharbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  __pyx_pw_4lxml_5etree_15_XSLTResultTree_7__getbuffer__, /*bf_getbuffer*/
+  #endif
+  #if PY_VERSION_HEX >= 0x02060000
+  __pyx_pw_4lxml_5etree_15_XSLTResultTree_9__releasebuffer__, /*bf_releasebuffer*/
+  #endif
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__XSLTResultTree = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._FilelikeWriter"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__FilelikeWriter), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._XSLTResultTree"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__XSLTResultTree), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__FilelikeWriter, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__XSLTResultTree, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -184083,21 +184194,21 @@ static PyTypeObject __pyx_type_4lxml_5etree__FilelikeWriter = {
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
   0, /*tp_call*/
-  0, /*tp_str*/
+  __pyx_pw_4lxml_5etree_15_XSLTResultTree_3__str__, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
+  &__pyx_tp_as_buffer__XSLTResultTree, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__FilelikeWriter, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__FilelikeWriter, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree__XSLTResultTree, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__XSLTResultTree, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__FilelikeWriter, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__XSLTResultTree, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__XSLTResultTree, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -184105,7 +184216,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__FilelikeWriter = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__FilelikeWriter, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__XSLTResultTree, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -184121,29 +184232,29 @@ static PyTypeObject __pyx_type_4lxml_5etree__FilelikeWriter = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__OpaqueDocumentWrapper __pyx_vtable_4lxml_5etree__OpaqueDocumentWrapper;
+static struct __pyx_vtabstruct_4lxml_5etree__XSLTProcessingInstruction __pyx_vtable_4lxml_5etree__XSLTProcessingInstruction;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__OpaqueDocumentWrapper(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__OpaqueNodeWrapper(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree__XSLTProcessingInstruction(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__XSLTProcessingInstruction *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree_PIBase(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__OpaqueDocumentWrapper;
+  p = ((struct __pyx_obj_4lxml_5etree__XSLTProcessingInstruction *)o);
+  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree___ContentOnlyElement*)__pyx_vtabptr_4lxml_5etree__XSLTProcessingInstruction;
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__OpaqueDocumentWrapper[] = {
-  {__Pyx_NAMESTR("append"), (PyCFunction)__pyx_pw_4lxml_5etree_22_OpaqueDocumentWrapper_1append, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_OpaqueDocumentWrapper_append)},
-  {__Pyx_NAMESTR("extend"), (PyCFunction)__pyx_pw_4lxml_5etree_22_OpaqueDocumentWrapper_3extend, METH_O, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_22_OpaqueDocumentWrapper_2extend)},
+static PyMethodDef __pyx_methods_4lxml_5etree__XSLTProcessingInstruction[] = {
+  {__Pyx_NAMESTR("parseXSL"), (PyCFunction)__pyx_pw_4lxml_5etree_26_XSLTProcessingInstruction_1parseXSL, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_26_XSLTProcessingInstruction_parseXSL)},
+  {__Pyx_NAMESTR("set"), (PyCFunction)__pyx_pw_4lxml_5etree_26_XSLTProcessingInstruction_3set, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_26_XSLTProcessingInstruction_2set)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__OpaqueDocumentWrapper = {
+static PyTypeObject __pyx_type_4lxml_5etree__XSLTProcessingInstruction = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._OpaqueDocumentWrapper"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._XSLTProcessingInstruction"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__XSLTProcessingInstruction), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__OpaqueNodeWrapper, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__Element, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -184152,7 +184263,11 @@ static PyTypeObject __pyx_type_4lxml_5etree__OpaqueDocumentWrapper = {
   #else
   0, /*reserved*/
   #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_22_ProcessingInstruction_1__repr__, /*tp_repr*/
+  #else
   0, /*tp_repr*/
+  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -184162,15 +184277,19 @@ static PyTypeObject __pyx_type_4lxml_5etree__OpaqueDocumentWrapper = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  0, /*tp_traverse*/
+  __pyx_tp_traverse_4lxml_5etree__Element, /*tp_traverse*/
   0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_5etree_8_Element_41__iter__, /*tp_iter*/
+  #else
   0, /*tp_iter*/
+  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__OpaqueDocumentWrapper, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__XSLTProcessingInstruction, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -184179,12 +184298,12 @@ static PyTypeObject __pyx_type_4lxml_5etree__OpaqueDocumentWrapper = {
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
   #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_18_OpaqueNodeWrapper_1__init__, /*tp_init*/
+  __pyx_pw_4lxml_5etree_6PIBase_1__init__, /*tp_init*/
   #else
   0, /*tp_init*/
   #endif
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__OpaqueDocumentWrapper, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__XSLTProcessingInstruction, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -184200,49 +184319,182 @@ static PyTypeObject __pyx_type_4lxml_5etree__OpaqueDocumentWrapper = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_Schematron __pyx_vtable_4lxml_5etree_Schematron;
+static struct __pyx_vtabstruct_4lxml_5etree_XSLTExtension __pyx_vtable_4lxml_5etree_XSLTExtension;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_Schematron(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_Schematron *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__Validator(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_Schematron *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__Validator*)__pyx_vtabptr_4lxml_5etree_Schematron;
-  if (unlikely(__pyx_pw_4lxml_5etree_10Schematron_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
+static PyObject *__pyx_tp_new_4lxml_5etree_XSLTExtension(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_XSLTExtension *p;
+  PyObject *o;
+  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+    o = (*t->tp_alloc)(t, 0);
+  } else {
+    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
+  if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_5etree_XSLTExtension *)o);
+  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_XSLTExtension;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_Schematron(PyObject *o) {
+static void __pyx_tp_dealloc_4lxml_5etree_XSLTExtension(PyObject *o) {
   #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_XSLTExtension[] = {
+  {__Pyx_NAMESTR("execute"), (PyCFunction)__pyx_pw_4lxml_5etree_13XSLTExtension_1execute, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13XSLTExtension_execute)},
+  {__Pyx_NAMESTR("apply_templates"), (PyCFunction)__pyx_pw_4lxml_5etree_13XSLTExtension_3apply_templates, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13XSLTExtension_2apply_templates)},
+  {__Pyx_NAMESTR("process_children"), (PyCFunction)__pyx_pw_4lxml_5etree_13XSLTExtension_5process_children, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_13XSLTExtension_4process_children)},
+  {0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree_XSLTExtension = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("lxml.etree.XSLTExtension"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_XSLTExtension), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_4lxml_5etree_XSLTExtension, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*tp_repr*/
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  0, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+  __Pyx_DOCSTR("Base class of an XSLT extension element.\n    "), /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  __pyx_methods_4lxml_5etree_XSLTExtension, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_4lxml_5etree_XSLTExtension, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+
+static struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *__pyx_freelist_4lxml_5etree__DTDElementContentDecl[8];
+static int __pyx_freecount_4lxml_5etree__DTDElementContentDecl = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree__DTDElementContentDecl(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *p;
+  PyObject *o;
+  if (likely((__pyx_freecount_4lxml_5etree__DTDElementContentDecl > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDElementContentDecl)))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDElementContentDecl[--__pyx_freecount_4lxml_5etree__DTDElementContentDecl];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__DTDElementContentDecl));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
+  } else {
+    o = (*t->tp_alloc)(t, 0);
+    if (unlikely(!o)) return 0;
+  }
+  p = ((struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *)o);
+  p->_dtd = ((struct __pyx_obj_4lxml_5etree_DTD *)Py_None); Py_INCREF(Py_None);
+  return o;
+}
+
+static void __pyx_tp_dealloc_4lxml_5etree__DTDElementContentDecl(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *p = (struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *)o;
   PyObject_GC_UnTrack(o);
-  {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_10Schematron_5__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
+  Py_CLEAR(p->_dtd);
+  if ((__pyx_freecount_4lxml_5etree__DTDElementContentDecl < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDElementContentDecl))) {
+    __pyx_freelist_4lxml_5etree__DTDElementContentDecl[__pyx_freecount_4lxml_5etree__DTDElementContentDecl++] = ((struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
   }
-  PyObject_GC_Track(o);
-  __pyx_tp_dealloc_4lxml_5etree__Validator(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_Schematron[] = {
+static int __pyx_tp_traverse_4lxml_5etree__DTDElementContentDecl(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *p = (struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *)o;
+  if (p->_dtd) {
+    e = (*v)(((PyObject*)p->_dtd), a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree__DTDElementContentDecl(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *p = (struct __pyx_obj_4lxml_5etree__DTDElementContentDecl *)o;
+  Py_CLEAR(p->_dtd);
+  return 0;
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_22_DTDElementContentDecl_4name_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_type(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_22_DTDElementContentDecl_4type_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_occur(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_22_DTDElementContentDecl_5occur_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_left(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_22_DTDElementContentDecl_4left_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_right(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_22_DTDElementContentDecl_5right_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__DTDElementContentDecl[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_Schematron = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__DTDElementContentDecl[] = {
+  {(char *)"name", __pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_name, 0, 0, 0},
+  {(char *)"type", __pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_type, 0, 0, 0},
+  {(char *)"occur", __pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_occur, 0, 0, 0},
+  {(char *)"left", __pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_left, 0, 0, 0},
+  {(char *)"right", __pyx_getprop_4lxml_5etree_22_DTDElementContentDecl_right, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__DTDElementContentDecl = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.Schematron"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_Schematron), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._DTDElementContentDecl"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__DTDElementContentDecl), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_Schematron, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__DTDElementContentDecl, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -184251,35 +184503,35 @@ static PyTypeObject __pyx_type_4lxml_5etree_Schematron = {
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_22_DTDElementContentDecl_1__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  __pyx_pw_4lxml_5etree_10Schematron_7__call__, /*tp_call*/
+  0, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("Schematron(self, etree=None, file=None)\n    A Schematron validator.\n\n    Pass a root Element or an ElementTree to turn it into a validator.\n    Alternatively, pass a filename as keyword argument 'file' to parse from\n    the file system.\n\n    Schematron is a less well known, but very powerful schema language.  The main\n    idea is to use the capabilities of XPath to put restrictions on the structure\n    and the content of XML documents.  Here is a simple example::\n\n      >>> schematron = Schematron(XML('''\n      ... <schema xmlns=\"http://www.ascc.net/xml/schematron\" >\n      ...   <pattern name=\"id is the only permited attribute name\">\n      ...     <rule context=\"*\">\n      ...       <report test=\"@*[not(name()='id')]\">Attribute\n      ...         <name path=\"@*[not(name()='id')]\"/> is forbidden<name/>\n      ...       </report>\n      ...     </rule>\n      ...   </pattern>\n      ... </schema>\n      ... '''))\n\n      >>> xml = XML('''\n      ... <AAA name=\"aaa\">\n      ...   <BBB id=\"bbb\"/>\n      ...   <CCC color=\"ccc\"/>\n      ... </AAA>\n      ... ''')\n\n      >>> schematron.validate(xml)\n      0\n\n      >>> xml = XML('''\n      ... <AAA id=\"aaa\">\n      ...   <BBB id=\"bbb\"/>\n      ...   <CCC/>\n      ... </AAA>\n      ... ''')\n\n      >>> schematron.validate(xml)\n      1\n\n    Schematron was added to libxml2 in version 2.6.21.  Before version 2.6.32,\n    however, Schematron lacked support for error reporting other than to stderr.\n    This version is therefore required to retrieve validation warnings and\n    errors in lxml.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__Validator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__Validator, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__DTDElementContentDecl, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__DTDElementContentDecl, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_Schematron, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__DTDElementContentDecl, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__DTDElementContentDecl, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_10Schematron_3__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_Schematron, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__DTDElementContentDecl, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -184296,23 +184548,98 @@ static PyTypeObject __pyx_type_4lxml_5etree_Schematron = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ErrorLogContext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+static struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *__pyx_freelist_4lxml_5etree__DTDAttributeDecl[8];
+static int __pyx_freecount_4lxml_5etree__DTDAttributeDecl = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree__DTDAttributeDecl(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *p;
   PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
-  if (unlikely(!o)) return 0;
+  if (likely((__pyx_freecount_4lxml_5etree__DTDAttributeDecl > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDAttributeDecl)))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDAttributeDecl[--__pyx_freecount_4lxml_5etree__DTDAttributeDecl];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__DTDAttributeDecl));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
+  } else {
+    o = (*t->tp_alloc)(t, 0);
+    if (unlikely(!o)) return 0;
+  }
+  p = ((struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *)o);
+  p->_dtd = ((struct __pyx_obj_4lxml_5etree_DTD *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ErrorLogContext(PyObject *o) {
-  (*Py_TYPE(o)->tp_free)(o);
+static void __pyx_tp_dealloc_4lxml_5etree__DTDAttributeDecl(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *p = (struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_dtd);
+  if ((__pyx_freecount_4lxml_5etree__DTDAttributeDecl < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDAttributeDecl))) {
+    __pyx_freelist_4lxml_5etree__DTDAttributeDecl[__pyx_freecount_4lxml_5etree__DTDAttributeDecl++] = ((struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
+  }
 }
 
-static PyTypeObject __pyx_type_4lxml_5etree__ErrorLogContext = {
+static int __pyx_tp_traverse_4lxml_5etree__DTDAttributeDecl(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *p = (struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *)o;
+  if (p->_dtd) {
+    e = (*v)(((PyObject*)p->_dtd), a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree__DTDAttributeDecl(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *p = (struct __pyx_obj_4lxml_5etree__DTDAttributeDecl *)o;
+  Py_CLEAR(p->_dtd);
+  return 0;
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_4name_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_elemname(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_8elemname_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_prefix(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_6prefix_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_type(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_4type_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_default(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_7default_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_default_value(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_13default_value_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__DTDAttributeDecl[] = {
+  {__Pyx_NAMESTR("itervalues"), (PyCFunction)__pyx_pw_4lxml_5etree_17_DTDAttributeDecl_3itervalues, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("values"), (PyCFunction)__pyx_pw_4lxml_5etree_17_DTDAttributeDecl_6values, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__DTDAttributeDecl[] = {
+  {(char *)"name", __pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_name, 0, 0, 0},
+  {(char *)"elemname", __pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_elemname, 0, 0, 0},
+  {(char *)"prefix", __pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_prefix, 0, 0, 0},
+  {(char *)"type", __pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_type, 0, 0, 0},
+  {(char *)"default", __pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_default, 0, 0, 0},
+  {(char *)"default_value", __pyx_getprop_4lxml_5etree_17_DTDAttributeDecl_default_value, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__DTDAttributeDecl = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ErrorLogContext"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ErrorLogContext), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._DTDAttributeDecl"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__DTDAttributeDecl), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ErrorLogContext, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__DTDAttributeDecl, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -184321,7 +184648,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ErrorLogContext = {
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_17_DTDAttributeDecl_1__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -184331,17 +184658,17 @@ static PyTypeObject __pyx_type_4lxml_5etree__ErrorLogContext = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
-  __Pyx_DOCSTR("\n    Error log context for the 'with' statement.\n    Stores a reference to the current callbacks to allow for\n    recursively stacked log contexts.\n    "), /*tp_doc*/
-  0, /*tp_traverse*/
-  0, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__DTDAttributeDecl, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__DTDAttributeDecl, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  0, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__DTDAttributeDecl, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__DTDAttributeDecl, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -184349,7 +184676,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__ErrorLogContext = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ErrorLogContext, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__DTDAttributeDecl, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -184365,61 +184692,89 @@ static PyTypeObject __pyx_type_4lxml_5etree__ErrorLogContext = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_XSLTAccessControl __pyx_vtable_4lxml_5etree_XSLTAccessControl;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_XSLTAccessControl(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_XSLTAccessControl *p;
+static struct __pyx_obj_4lxml_5etree__DTDElementDecl *__pyx_freelist_4lxml_5etree__DTDElementDecl[8];
+static int __pyx_freecount_4lxml_5etree__DTDElementDecl = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree__DTDElementDecl(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__DTDElementDecl *p;
   PyObject *o;
-  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
-    o = (*t->tp_alloc)(t, 0);
+  if (likely((__pyx_freecount_4lxml_5etree__DTDElementDecl > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDElementDecl)))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDElementDecl[--__pyx_freecount_4lxml_5etree__DTDElementDecl];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__DTDElementDecl));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
   } else {
-    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
-  }
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_XSLTAccessControl *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree_XSLTAccessControl;
-  if (unlikely(__pyx_pw_4lxml_5etree_17XSLTAccessControl_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
+    o = (*t->tp_alloc)(t, 0);
+    if (unlikely(!o)) return 0;
   }
+  p = ((struct __pyx_obj_4lxml_5etree__DTDElementDecl *)o);
+  p->_dtd = ((struct __pyx_obj_4lxml_5etree_DTD *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree_XSLTAccessControl(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
-    if (PyObject_CallFinalizerFromDealloc(o)) return;
+static void __pyx_tp_dealloc_4lxml_5etree__DTDElementDecl(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__DTDElementDecl *p = (struct __pyx_obj_4lxml_5etree__DTDElementDecl *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_dtd);
+  if ((__pyx_freecount_4lxml_5etree__DTDElementDecl < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDElementDecl))) {
+    __pyx_freelist_4lxml_5etree__DTDElementDecl[__pyx_freecount_4lxml_5etree__DTDElementDecl++] = ((struct __pyx_obj_4lxml_5etree__DTDElementDecl *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
   }
-  #endif
-  {
-    PyObject *etype, *eval, *etb;
-    PyErr_Fetch(&etype, &eval, &etb);
-    ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_17XSLTAccessControl_5__dealloc__(o);
-    --Py_REFCNT(o);
-    PyErr_Restore(etype, eval, etb);
+}
+
+static int __pyx_tp_traverse_4lxml_5etree__DTDElementDecl(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__DTDElementDecl *p = (struct __pyx_obj_4lxml_5etree__DTDElementDecl *)o;
+  if (p->_dtd) {
+    e = (*v)(((PyObject*)p->_dtd), a); if (e) return e;
   }
-  (*Py_TYPE(o)->tp_free)(o);
+  return 0;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_17XSLTAccessControl_options(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_17XSLTAccessControl_7options_1__get__(o);
+static int __pyx_tp_clear_4lxml_5etree__DTDElementDecl(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__DTDElementDecl *p = (struct __pyx_obj_4lxml_5etree__DTDElementDecl *)o;
+  Py_CLEAR(p->_dtd);
+  return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_XSLTAccessControl[] = {
+static PyObject *__pyx_getprop_4lxml_5etree_15_DTDElementDecl_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_15_DTDElementDecl_4name_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_15_DTDElementDecl_prefix(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_15_DTDElementDecl_6prefix_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_15_DTDElementDecl_type(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_15_DTDElementDecl_4type_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_15_DTDElementDecl_content(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_15_DTDElementDecl_7content_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__DTDElementDecl[] = {
+  {__Pyx_NAMESTR("iterattributes"), (PyCFunction)__pyx_pw_4lxml_5etree_15_DTDElementDecl_3iterattributes, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("attributes"), (PyCFunction)__pyx_pw_4lxml_5etree_15_DTDElementDecl_6attributes, METH_NOARGS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree_XSLTAccessControl[] = {
-  {(char *)"options", __pyx_getprop_4lxml_5etree_17XSLTAccessControl_options, 0, __Pyx_DOCSTR(__pyx_k_The_access_control_configuration), 0},
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__DTDElementDecl[] = {
+  {(char *)"name", __pyx_getprop_4lxml_5etree_15_DTDElementDecl_name, 0, 0, 0},
+  {(char *)"prefix", __pyx_getprop_4lxml_5etree_15_DTDElementDecl_prefix, 0, 0, 0},
+  {(char *)"type", __pyx_getprop_4lxml_5etree_15_DTDElementDecl_type, 0, 0, 0},
+  {(char *)"content", __pyx_getprop_4lxml_5etree_15_DTDElementDecl_content, 0, 0, 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_XSLTAccessControl = {
+static PyTypeObject __pyx_type_4lxml_5etree__DTDElementDecl = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.XSLTAccessControl"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_XSLTAccessControl), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._DTDElementDecl"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__DTDElementDecl), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_XSLTAccessControl, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__DTDElementDecl, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -184428,7 +184783,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLTAccessControl = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_17XSLTAccessControl_7__repr__, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_15_DTDElementDecl_1__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -184438,25 +184793,25 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLTAccessControl = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
-  __Pyx_DOCSTR("XSLTAccessControl(self, read_file=True, write_file=True, create_dir=True, read_network=True, write_network=True)\n\n    Access control for XSLT: reading/writing files, directories and\n    network I/O.  Access to a type of resource is granted or denied by\n    passing any of the following boolean keyword arguments.  All of\n    them default to True to allow access.\n\n    - read_file\n    - write_file\n    - create_dir\n    - read_network\n    - write_network\n\n    For convenience, there is also a class member `DENY_ALL` that\n    provides an XSLTAccessControl instance that is readily configured\n    to deny everything, and a `DENY_WRITE` member that denies all\n    write access but allows read access.\n\n    See `XSLT`.\n    "), /*tp_doc*/
-  0, /*tp_traverse*/
-  0, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__DTDElementDecl, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__DTDElementDecl, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_XSLTAccessControl, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__DTDElementDecl, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree_XSLTAccessControl, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__DTDElementDecl, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_17XSLTAccessControl_3__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_XSLTAccessControl, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__DTDElementDecl, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -184472,30 +184827,82 @@ static PyTypeObject __pyx_type_4lxml_5etree_XSLTAccessControl = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_SiblingsIterator __pyx_vtable_4lxml_5etree_SiblingsIterator;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_SiblingsIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_SiblingsIterator *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ElementMatchIterator(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_SiblingsIterator *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator*)__pyx_vtabptr_4lxml_5etree_SiblingsIterator;
-  if (unlikely(__pyx_pw_4lxml_5etree_16SiblingsIterator_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
+static struct __pyx_obj_4lxml_5etree__DTDEntityDecl *__pyx_freelist_4lxml_5etree__DTDEntityDecl[8];
+static int __pyx_freecount_4lxml_5etree__DTDEntityDecl = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree__DTDEntityDecl(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_5etree__DTDEntityDecl *p;
+  PyObject *o;
+  if (likely((__pyx_freecount_4lxml_5etree__DTDEntityDecl > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDEntityDecl)))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDEntityDecl[--__pyx_freecount_4lxml_5etree__DTDEntityDecl];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__DTDEntityDecl));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
+  } else {
+    o = (*t->tp_alloc)(t, 0);
+    if (unlikely(!o)) return 0;
   }
+  p = ((struct __pyx_obj_4lxml_5etree__DTDEntityDecl *)o);
+  p->_dtd = ((struct __pyx_obj_4lxml_5etree_DTD *)Py_None); Py_INCREF(Py_None);
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_SiblingsIterator[] = {
+static void __pyx_tp_dealloc_4lxml_5etree__DTDEntityDecl(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__DTDEntityDecl *p = (struct __pyx_obj_4lxml_5etree__DTDEntityDecl *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_dtd);
+  if ((__pyx_freecount_4lxml_5etree__DTDEntityDecl < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDEntityDecl))) {
+    __pyx_freelist_4lxml_5etree__DTDEntityDecl[__pyx_freecount_4lxml_5etree__DTDEntityDecl++] = ((struct __pyx_obj_4lxml_5etree__DTDEntityDecl *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
+  }
+}
+
+static int __pyx_tp_traverse_4lxml_5etree__DTDEntityDecl(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree__DTDEntityDecl *p = (struct __pyx_obj_4lxml_5etree__DTDEntityDecl *)o;
+  if (p->_dtd) {
+    e = (*v)(((PyObject*)p->_dtd), a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree__DTDEntityDecl(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree__DTDEntityDecl *p = (struct __pyx_obj_4lxml_5etree__DTDEntityDecl *)o;
+  Py_CLEAR(p->_dtd);
+  return 0;
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_14_DTDEntityDecl_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_14_DTDEntityDecl_4name_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_14_DTDEntityDecl_orig(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_14_DTDEntityDecl_4orig_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_14_DTDEntityDecl_content(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_14_DTDEntityDecl_7content_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree__DTDEntityDecl[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree_SiblingsIterator = {
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree__DTDEntityDecl[] = {
+  {(char *)"name", __pyx_getprop_4lxml_5etree_14_DTDEntityDecl_name, 0, 0, 0},
+  {(char *)"orig", __pyx_getprop_4lxml_5etree_14_DTDEntityDecl_orig, 0, 0, 0},
+  {(char *)"content", __pyx_getprop_4lxml_5etree_14_DTDEntityDecl_content, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_5etree__DTDEntityDecl = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.SiblingsIterator"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_SiblingsIterator), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._DTDEntityDecl"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__DTDEntityDecl), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ElementMatchIterator, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__DTDEntityDecl, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -184504,7 +184911,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_SiblingsIterator = {
   #else
   0, /*reserved*/
   #endif
-  0, /*tp_repr*/
+  __pyx_pw_4lxml_5etree_14_DTDEntityDecl_1__repr__, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -184514,25 +184921,17 @@ static PyTypeObject __pyx_type_4lxml_5etree_SiblingsIterator = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("SiblingsIterator(self, node, tag=None, preceding=False)\n    Iterates over the siblings of an element.\n\n    You can pass the boolean keyword ``preceding`` to specify the direction.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ElementMatchIterator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ElementMatchIterator, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__DTDEntityDecl, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__DTDEntityDecl, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_1__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_3__next__, /*tp_iternext*/
-  #else
   0, /*tp_iternext*/
-  #endif
-  __pyx_methods_4lxml_5etree_SiblingsIterator, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__DTDEntityDecl, /*tp_methods*/
   0, /*tp_members*/
-  0, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree__DTDEntityDecl, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -184540,7 +184939,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_SiblingsIterator = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_SiblingsIterator, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__DTDEntityDecl, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -184556,42 +184955,69 @@ static PyTypeObject __pyx_type_4lxml_5etree_SiblingsIterator = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ModifyContentOnlyPIProxy __pyx_vtable_4lxml_5etree__ModifyContentOnlyPIProxy;
+static struct __pyx_vtabstruct_4lxml_5etree_DTD __pyx_vtable_4lxml_5etree_DTD;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ModifyContentOnlyPIProxy(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ModifyContentOnlyPIProxy *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ModifyContentOnlyProxy(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_DTD(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_DTD *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__Validator(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ModifyContentOnlyPIProxy *)o);
-  p->__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ReadOnlyProxy*)__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyPIProxy;
+  p = ((struct __pyx_obj_4lxml_5etree_DTD *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__Validator*)__pyx_vtabptr_4lxml_5etree_DTD;
   return o;
 }
 
-static PyObject *__pyx_getprop_4lxml_5etree_25_ModifyContentOnlyPIProxy_target(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_25_ModifyContentOnlyPIProxy_6target_1__get__(o);
-}
-
-static int __pyx_setprop_4lxml_5etree_25_ModifyContentOnlyPIProxy_target(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
-  if (v) {
-    return __pyx_pw_4lxml_5etree_25_ModifyContentOnlyPIProxy_6target_3__set__(o, v);
+static void __pyx_tp_dealloc_4lxml_5etree_DTD(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
-  else {
-    PyErr_SetString(PyExc_NotImplementedError, "__del__");
-    return -1;
+  #endif
+  PyObject_GC_UnTrack(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_4lxml_5etree_3DTD_13__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
   }
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__Validator(o);
 }
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__ModifyContentOnlyPIProxy[] = {
-  {(char *)"target", __pyx_getprop_4lxml_5etree_25_ModifyContentOnlyPIProxy_target, __pyx_setprop_4lxml_5etree_25_ModifyContentOnlyPIProxy_target, 0, 0},
+static PyObject *__pyx_getprop_4lxml_5etree_3DTD_name(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_3DTD_4name_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_3DTD_external_id(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_3DTD_11external_id_1__get__(o);
+}
+
+static PyObject *__pyx_getprop_4lxml_5etree_3DTD_system_url(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_5etree_3DTD_10system_url_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_5etree_DTD[] = {
+  {__Pyx_NAMESTR("iterelements"), (PyCFunction)__pyx_pw_4lxml_5etree_3DTD_3iterelements, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("elements"), (PyCFunction)__pyx_pw_4lxml_5etree_3DTD_6elements, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("iterentities"), (PyCFunction)__pyx_pw_4lxml_5etree_3DTD_8iterentities, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("entities"), (PyCFunction)__pyx_pw_4lxml_5etree_3DTD_11entities, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_4lxml_5etree_DTD[] = {
+  {(char *)"name", __pyx_getprop_4lxml_5etree_3DTD_name, 0, 0, 0},
+  {(char *)"external_id", __pyx_getprop_4lxml_5etree_3DTD_external_id, 0, 0, 0},
+  {(char *)"system_url", __pyx_getprop_4lxml_5etree_3DTD_system_url, 0, 0, 0},
   {0, 0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy = {
+static PyTypeObject __pyx_type_4lxml_5etree_DTD = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ModifyContentOnlyPIProxy"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ModifyContentOnlyPIProxy), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.DTD"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_DTD), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ReadOnlyProxy, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_DTD, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -184600,43 +185026,35 @@ static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_3__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  0, /*tp_call*/
+  __pyx_pw_4lxml_5etree_3DTD_15__call__, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("A read-only proxy that allows changing the text/target content of a\n    processing instruction.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ReadOnlyProxy, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ReadOnlyProxy, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("DTD(self, file=None, external_id=None)\n    A DTD validator.\n\n    Can load from filesystem directly given a filename or file-like object.\n    Alternatively, pass the keyword parameter ``external_id`` to load from a\n    catalog.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__Validator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__Validator, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_14_ReadOnlyProxy_15__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
-  0, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_DTD, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__ModifyContentOnlyPIProxy, /*tp_getset*/
+  __pyx_getsets_4lxml_5etree_DTD, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_3DTD_1__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ModifyContentOnlyPIProxy, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_DTD, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -184652,50 +185070,49 @@ static PyTypeObject __pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ClassNamespaceRegistry __pyx_vtable_4lxml_5etree__ClassNamespaceRegistry;
+static struct __pyx_vtabstruct_4lxml_5etree_RelaxNG __pyx_vtable_4lxml_5etree_RelaxNG;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ClassNamespaceRegistry(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ClassNamespaceRegistry *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__NamespaceRegistry(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_5etree_RelaxNG(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_RelaxNG *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__Validator(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ClassNamespaceRegistry *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__NamespaceRegistry*)__pyx_vtabptr_4lxml_5etree__ClassNamespaceRegistry;
+  p = ((struct __pyx_obj_4lxml_5etree_RelaxNG *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__Validator*)__pyx_vtabptr_4lxml_5etree_RelaxNG;
+  if (unlikely(__pyx_pw_4lxml_5etree_7RelaxNG_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+    Py_DECREF(o); o = 0;
+  }
   return o;
 }
 
-static int __pyx_mp_ass_subscript_4lxml_5etree__ClassNamespaceRegistry(PyObject *o, PyObject *i, PyObject *v) {
-  if (v) {
-    return __pyx_pw_4lxml_5etree_23_ClassNamespaceRegistry_1__setitem__(o, i, v);
+static void __pyx_tp_dealloc_4lxml_5etree_RelaxNG(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
-  else {
-    if (__pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_as_mapping && __pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_as_mapping->mp_ass_subscript)
-      return __pyx_ptype_4lxml_5etree__NamespaceRegistry->tp_as_mapping->mp_ass_subscript(o, i, v);
-    PyErr_Format(PyExc_NotImplementedError,
-      "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);
-    return -1;
+  #endif
+  PyObject_GC_UnTrack(o);
+  {
+    PyObject *etype, *eval, *etb;
+    PyErr_Fetch(&etype, &eval, &etb);
+    ++Py_REFCNT(o);
+    __pyx_pw_4lxml_5etree_7RelaxNG_5__dealloc__(o);
+    --Py_REFCNT(o);
+    PyErr_Restore(etype, eval, etb);
   }
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__Validator(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__ClassNamespaceRegistry[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_RelaxNG[] = {
   {0, 0, 0, 0}
 };
 
-static PyMappingMethods __pyx_tp_as_mapping__ClassNamespaceRegistry = {
-  0, /*mp_length*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_5__getitem__, /*mp_subscript*/
-  #else
-  0, /*mp_subscript*/
-  #endif
-  __pyx_mp_ass_subscript_4lxml_5etree__ClassNamespaceRegistry, /*mp_ass_subscript*/
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__ClassNamespaceRegistry = {
+static PyTypeObject __pyx_type_4lxml_5etree_RelaxNG = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ClassNamespaceRegistry"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ClassNamespaceRegistry), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.RelaxNG"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_RelaxNG), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__NamespaceRegistry, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_RelaxNG, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -184704,29 +185121,25 @@ static PyTypeObject __pyx_type_4lxml_5etree__ClassNamespaceRegistry = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_23_ClassNamespaceRegistry_3__repr__, /*tp_repr*/
+  0, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
-  &__pyx_tp_as_mapping__ClassNamespaceRegistry, /*tp_as_mapping*/
+  0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  0, /*tp_call*/
+  __pyx_pw_4lxml_5etree_7RelaxNG_7__call__, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("Dictionary-like registry for namespace implementation classes"), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__NamespaceRegistry, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__NamespaceRegistry, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("RelaxNG(self, etree=None, file=None)\n    Turn a document into a Relax NG validator.\n\n    Either pass a schema as Element or ElementTree, or pass a file or\n    filename through the ``file`` keyword argument.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__Validator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__Validator, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_18_NamespaceRegistry_9__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ClassNamespaceRegistry, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_RelaxNG, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -184734,9 +185147,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__ClassNamespaceRegistry = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_7RelaxNG_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ClassNamespaceRegistry, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_RelaxNG, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -184752,62 +185165,49 @@ static PyTypeObject __pyx_type_4lxml_5etree__ClassNamespaceRegistry = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__ParserSchemaValidationContext __pyx_vtable_4lxml_5etree__ParserSchemaValidationContext;
+static struct __pyx_vtabstruct_4lxml_5etree_Schematron __pyx_vtable_4lxml_5etree_Schematron;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__ParserSchemaValidationContext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
+static PyObject *__pyx_tp_new_4lxml_5etree_Schematron(PyTypeObject *t, PyObject *a, PyObject *k) {
+  struct __pyx_obj_4lxml_5etree_Schematron *p;
+  PyObject *o = __pyx_tp_new_4lxml_5etree__Validator(t, a, k);
   if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *)o);
-  p->__pyx_vtab = __pyx_vtabptr_4lxml_5etree__ParserSchemaValidationContext;
-  p->_schema = ((struct __pyx_obj_4lxml_5etree_XMLSchema *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_4lxml_5etree_30_ParserSchemaValidationContext_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
+  p = ((struct __pyx_obj_4lxml_5etree_Schematron *)o);
+  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__Validator*)__pyx_vtabptr_4lxml_5etree_Schematron;
+  if (unlikely(__pyx_pw_4lxml_5etree_10Schematron_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
     Py_DECREF(o); o = 0;
   }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__ParserSchemaValidationContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *p = (struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *)o;
+static void __pyx_tp_dealloc_4lxml_5etree_Schematron(PyObject *o) {
+  #if PY_VERSION_HEX >= 0x030400a1
+  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+    if (PyObject_CallFinalizerFromDealloc(o)) return;
+  }
+  #endif
   PyObject_GC_UnTrack(o);
   {
     PyObject *etype, *eval, *etb;
     PyErr_Fetch(&etype, &eval, &etb);
     ++Py_REFCNT(o);
-    __pyx_pw_4lxml_5etree_30_ParserSchemaValidationContext_3__dealloc__(o);
+    __pyx_pw_4lxml_5etree_10Schematron_5__dealloc__(o);
     --Py_REFCNT(o);
     PyErr_Restore(etype, eval, etb);
   }
-  Py_CLEAR(p->_schema);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__ParserSchemaValidationContext(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *p = (struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *)o;
-  if (p->_schema) {
-    e = (*v)(((PyObject*)p->_schema), a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__ParserSchemaValidationContext(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *p = (struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *)o;
-  Py_CLEAR(p->_schema);
-  return 0;
+  PyObject_GC_Track(o);
+  __pyx_tp_dealloc_4lxml_5etree__Validator(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__ParserSchemaValidationContext[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree_Schematron[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_5etree__ParserSchemaValidationContext = {
+static PyTypeObject __pyx_type_4lxml_5etree_Schematron = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._ParserSchemaValidationContext"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.Schematron"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree_Schematron), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ParserSchemaValidationContext, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree_Schematron, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -184821,20 +185221,20 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParserSchemaValidationContext = {
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  0, /*tp_call*/
+  __pyx_pw_4lxml_5etree_10Schematron_7__call__, /*tp_call*/
   0, /*tp_str*/
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ParserSchemaValidationContext, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ParserSchemaValidationContext, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("Schematron(self, etree=None, file=None)\n    A Schematron validator.\n\n    Pass a root Element or an ElementTree to turn it into a validator.\n    Alternatively, pass a filename as keyword argument 'file' to parse from\n    the file system.\n\n    Schematron is a less well known, but very powerful schema language.  The main\n    idea is to use the capabilities of XPath to put restrictions on the structure\n    and the content of XML documents.  Here is a simple example::\n\n      >>> schematron = Schematron(XML('''\n      ... <schema xmlns=\"http://www.ascc.net/xml/schematron\" >\n      ...   <pattern name=\"id is the only permited attribute name\">\n      ...     <rule context=\"*\">\n      ...       <report test=\"@*[not(name()='id')]\">Attribute\n      ...         <name path=\"@*[not(name()='id')]\"/> is forbidden<name/>\n      ...       </report>\n      ...     </rule>\n      ...   </pattern>\n      ... </schema>\n      ... '''))\n\n      >>> xml = XML('''\n      ... <AAA name=\"aaa\">\n      ...   <BBB id=\"bbb\"/>\n      ...   <CCC color=\"ccc\"/>\n      ... </AAA>\n      ... ''')\n\n      >>> schematron.validate(xml)\n      0\n\n      >>> xml = XML('''\n      ... <AAA id=\"aaa\">\n      ...   <BBB id=\"bbb\"/>\n      ...   <CCC/>\n      ... </AAA>\n      ... ''')\n\n      >>> schematron.validate(xml)\n      1\n\n    Schematron was added to libxml2 in version 2.6.21.  Before version 2.6.32,\n    however, Schematron lacked support for error reporting other than to stderr.\n    This version is therefore required to retrieve validation warnings and\n    errors in lxml.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree__Validator, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree__Validator, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__ParserSchemaValidationContext, /*tp_methods*/
+  __pyx_methods_4lxml_5etree_Schematron, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -184842,9 +185242,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParserSchemaValidationContext = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  0, /*tp_init*/
+  __pyx_pw_4lxml_5etree_10Schematron_3__init__, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__ParserSchemaValidationContext, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree_Schematron, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -184861,81 +185261,32 @@ static PyTypeObject __pyx_type_4lxml_5etree__ParserSchemaValidationContext = {
   #endif
 };
 
-static struct __pyx_obj_4lxml_5etree__DTDEntityDecl *__pyx_freelist_4lxml_5etree__DTDEntityDecl[8];
-static int __pyx_freecount_4lxml_5etree__DTDEntityDecl = 0;
-
-static PyObject *__pyx_tp_new_4lxml_5etree__DTDEntityDecl(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__DTDEntityDecl *p;
+static PyObject *__pyx_tp_new_4lxml_5etree__MemDebug(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
   PyObject *o;
-  if (likely((__pyx_freecount_4lxml_5etree__DTDEntityDecl > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDEntityDecl)))) {
-    o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDEntityDecl[--__pyx_freecount_4lxml_5etree__DTDEntityDecl];
-    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree__DTDEntityDecl));
-    (void) PyObject_INIT(o, t);
-    PyObject_GC_Track(o);
-  } else {
-    o = (*t->tp_alloc)(t, 0);
-    if (unlikely(!o)) return 0;
-  }
-  p = ((struct __pyx_obj_4lxml_5etree__DTDEntityDecl *)o);
-  p->_dtd = ((struct __pyx_obj_4lxml_5etree_DTD *)Py_None); Py_INCREF(Py_None);
+  o = (*t->tp_alloc)(t, 0);
+  if (unlikely(!o)) return 0;
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__DTDEntityDecl(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__DTDEntityDecl *p = (struct __pyx_obj_4lxml_5etree__DTDEntityDecl *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_dtd);
-  if ((__pyx_freecount_4lxml_5etree__DTDEntityDecl < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree__DTDEntityDecl))) {
-    __pyx_freelist_4lxml_5etree__DTDEntityDecl[__pyx_freecount_4lxml_5etree__DTDEntityDecl++] = ((struct __pyx_obj_4lxml_5etree__DTDEntityDecl *)o);
-  } else {
-    (*Py_TYPE(o)->tp_free)(o);
-  }
-}
-
-static int __pyx_tp_traverse_4lxml_5etree__DTDEntityDecl(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_5etree__DTDEntityDecl *p = (struct __pyx_obj_4lxml_5etree__DTDEntityDecl *)o;
-  if (p->_dtd) {
-    e = (*v)(((PyObject*)p->_dtd), a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_5etree__DTDEntityDecl(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__DTDEntityDecl *p = (struct __pyx_obj_4lxml_5etree__DTDEntityDecl *)o;
-  Py_CLEAR(p->_dtd);
-  return 0;
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_14_DTDEntityDecl_name(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_14_DTDEntityDecl_4name_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_14_DTDEntityDecl_orig(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_14_DTDEntityDecl_4orig_1__get__(o);
-}
-
-static PyObject *__pyx_getprop_4lxml_5etree_14_DTDEntityDecl_content(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_5etree_14_DTDEntityDecl_7content_1__get__(o);
+static void __pyx_tp_dealloc_4lxml_5etree__MemDebug(PyObject *o) {
+  (*Py_TYPE(o)->tp_free)(o);
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__DTDEntityDecl[] = {
+static PyMethodDef __pyx_methods_4lxml_5etree__MemDebug[] = {
+  {__Pyx_NAMESTR("bytes_used"), (PyCFunction)__pyx_pw_4lxml_5etree_9_MemDebug_1bytes_used, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_9_MemDebug_bytes_used)},
+  {__Pyx_NAMESTR("blocks_used"), (PyCFunction)__pyx_pw_4lxml_5etree_9_MemDebug_3blocks_used, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_9_MemDebug_2blocks_used)},
+  {__Pyx_NAMESTR("dict_size"), (PyCFunction)__pyx_pw_4lxml_5etree_9_MemDebug_5dict_size, METH_NOARGS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_9_MemDebug_4dict_size)},
+  {__Pyx_NAMESTR("dump"), (PyCFunction)__pyx_pw_4lxml_5etree_9_MemDebug_7dump, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_9_MemDebug_6dump)},
+  {__Pyx_NAMESTR("show"), (PyCFunction)__pyx_pw_4lxml_5etree_9_MemDebug_9show, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_9_MemDebug_8show)},
   {0, 0, 0, 0}
 };
 
-static struct PyGetSetDef __pyx_getsets_4lxml_5etree__DTDEntityDecl[] = {
-  {(char *)"name", __pyx_getprop_4lxml_5etree_14_DTDEntityDecl_name, 0, 0, 0},
-  {(char *)"orig", __pyx_getprop_4lxml_5etree_14_DTDEntityDecl_orig, 0, 0, 0},
-  {(char *)"content", __pyx_getprop_4lxml_5etree_14_DTDEntityDecl_content, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__DTDEntityDecl = {
+static PyTypeObject __pyx_type_4lxml_5etree__MemDebug = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._DTDEntityDecl"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__DTDEntityDecl), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree._MemDebug"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree__MemDebug), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__DTDEntityDecl, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree__MemDebug, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -184944,7 +185295,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDEntityDecl = {
   #else
   0, /*reserved*/
   #endif
-  __pyx_pw_4lxml_5etree_14_DTDEntityDecl_1__repr__, /*tp_repr*/
+  0, /*tp_repr*/
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -184954,17 +185305,17 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDEntityDecl = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__DTDEntityDecl, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__DTDEntityDecl, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER, /*tp_flags*/
+  __Pyx_DOCSTR("Debugging support for the memory allocation in libxml2.\n    "), /*tp_doc*/
+  0, /*tp_traverse*/
+  0, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__DTDEntityDecl, /*tp_methods*/
+  __pyx_methods_4lxml_5etree__MemDebug, /*tp_methods*/
   0, /*tp_members*/
-  __pyx_getsets_4lxml_5etree__DTDEntityDecl, /*tp_getset*/
+  0, /*tp_getset*/
   0, /*tp_base*/
   0, /*tp_dict*/
   0, /*tp_descr_get*/
@@ -184972,7 +185323,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDEntityDecl = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__DTDEntityDecl, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree__MemDebug, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -184989,49 +185340,55 @@ static PyTypeObject __pyx_type_4lxml_5etree__DTDEntityDecl = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_4lxml_5etree__AttribIterator(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__AttribIterator *p;
+static struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *__pyx_freelist_4lxml_5etree___pyx_scope_struct__itervalues[8];
+static int __pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct__itervalues(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
   PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__AttribIterator *)o);
-  p->_node = ((struct LxmlElement *)Py_None); Py_INCREF(Py_None);
+  if (likely((__pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues)))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct__itervalues[--__pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
+  } else {
+    o = (*t->tp_alloc)(t, 0);
+    if (unlikely(!o)) return 0;
+  }
   return o;
 }
 
-static void __pyx_tp_dealloc_4lxml_5etree__AttribIterator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__AttribIterator *p = (struct __pyx_obj_4lxml_5etree__AttribIterator *)o;
+static void __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct__itervalues(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *)o;
   PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_node);
-  (*Py_TYPE(o)->tp_free)(o);
+  Py_CLEAR(p->__pyx_v_self);
+  if ((__pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues))) {
+    __pyx_freelist_4lxml_5etree___pyx_scope_struct__itervalues[__pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues++] = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
+  }
 }
 
-static int __pyx_tp_traverse_4lxml_5etree__AttribIterator(PyObject *o, visitproc v, void *a) {
+static int __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct__itervalues(PyObject *o, visitproc v, void *a) {
   int e;
-  struct __pyx_obj_4lxml_5etree__AttribIterator *p = (struct __pyx_obj_4lxml_5etree__AttribIterator *)o;
-  if (p->_node) {
-    e = (*v)(((PyObject*)p->_node), a); if (e) return e;
+  struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *)o;
+  if (p->__pyx_v_self) {
+    e = (*v)(((PyObject*)p->__pyx_v_self), a); if (e) return e;
   }
   return 0;
 }
 
-static int __pyx_tp_clear_4lxml_5etree__AttribIterator(PyObject *o) {
-  struct __pyx_obj_4lxml_5etree__AttribIterator *p = (struct __pyx_obj_4lxml_5etree__AttribIterator *)o;
-  Py_CLEAR(p->_node);
+static int __pyx_tp_clear_4lxml_5etree___pyx_scope_struct__itervalues(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues *)o;
+  Py_CLEAR(p->__pyx_v_self);
   return 0;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__AttribIterator[] = {
-  {__Pyx_NAMESTR("__next__"), (PyCFunction)__pyx_pw_4lxml_5etree_15_AttribIterator_3__next__, METH_NOARGS|METH_COEXIST, __Pyx_DOCSTR(0)},
-  {0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_5etree__AttribIterator = {
+static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct__itervalues = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._AttribIterator"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__AttribIterator), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.__pyx_scope_struct__itervalues"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct__itervalues), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__AttribIterator, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct__itervalues, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -185051,14 +185408,14 @@ static PyTypeObject __pyx_type_4lxml_5etree__AttribIterator = {
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
   Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("Attribute iterator - for internal use only!\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__AttribIterator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__AttribIterator, /*tp_clear*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct__itervalues, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree___pyx_scope_struct__itervalues, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  __pyx_pw_4lxml_5etree_15_AttribIterator_1__iter__, /*tp_iter*/
-  __pyx_pw_4lxml_5etree_15_AttribIterator_3__next__, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__AttribIterator, /*tp_methods*/
+  0, /*tp_iter*/
+  0, /*tp_iternext*/
+  0, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -185068,7 +185425,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__AttribIterator = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__AttribIterator, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree___pyx_scope_struct__itervalues, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -185084,31 +185441,61 @@ static PyTypeObject __pyx_type_4lxml_5etree__AttribIterator = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_PythonElementClassLookup __pyx_vtable_4lxml_5etree_PythonElementClassLookup;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_PythonElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_PythonElementClassLookup *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree_FallbackElementClassLookup(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_PythonElementClassLookup *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree_FallbackElementClassLookup*)__pyx_vtabptr_4lxml_5etree_PythonElementClassLookup;
-  if (unlikely(__pyx_pw_4lxml_5etree_24PythonElementClassLookup_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
+static struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *__pyx_freelist_4lxml_5etree___pyx_scope_struct_1_iterattributes[8];
+static int __pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct_1_iterattributes(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  PyObject *o;
+  if (likely((__pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes)))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct_1_iterattributes[--__pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
+  } else {
+    o = (*t->tp_alloc)(t, 0);
+    if (unlikely(!o)) return 0;
   }
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_PythonElementClassLookup[] = {
-  {__Pyx_NAMESTR("lookup"), (PyCFunction)__pyx_pw_4lxml_5etree_24PythonElementClassLookup_3lookup, METH_VARARGS|METH_KEYWORDS, __Pyx_DOCSTR(__pyx_doc_4lxml_5etree_24PythonElementClassLookup_2lookup)},
-  {0, 0, 0, 0}
-};
+static void __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct_1_iterattributes(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->__pyx_v_node);
+  Py_CLEAR(p->__pyx_v_self);
+  if ((__pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes))) {
+    __pyx_freelist_4lxml_5etree___pyx_scope_struct_1_iterattributes[__pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes++] = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
+  }
+}
 
-static PyTypeObject __pyx_type_4lxml_5etree_PythonElementClassLookup = {
+static int __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct_1_iterattributes(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *)o;
+  if (p->__pyx_v_node) {
+    e = (*v)(((PyObject*)p->__pyx_v_node), a); if (e) return e;
+  }
+  if (p->__pyx_v_self) {
+    e = (*v)(((PyObject*)p->__pyx_v_self), a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree___pyx_scope_struct_1_iterattributes(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes *)o;
+  Py_CLEAR(p->__pyx_v_node);
+  Py_CLEAR(p->__pyx_v_self);
+  return 0;
+}
+
+static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_1_iterattributes = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.PythonElementClassLookup"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_PythonElementClassLookup), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.__pyx_scope_struct_1_iterattributes"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_1_iterattributes), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree_FallbackElementClassLookup, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct_1_iterattributes, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -185127,15 +185514,15 @@ static PyTypeObject __pyx_type_4lxml_5etree_PythonElementClassLookup = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("PythonElementClassLookup(self, fallback=None)\n    Element class lookup based on a subclass method.\n\n    This class lookup scheme allows access to the entire XML tree in\n    read-only mode.  To use it, re-implement the ``lookup(self, doc,\n    root)`` method in a subclass::\n\n        from lxml import etree, pyclasslookup\n\n        class MyElementClass(etree.ElementBase):\n            honkey = True\n\n        class MyLookup(pyclasslookup.PythonElementClassLookup):\n            def lookup(self, doc, root):\n                if root.tag == \"sometag\":\n                    return MyElementClass\n                else:\n                    for child in root:\n                        if child.tag == \"someothertag\":\n                            return MyElementClass\n                # delegate to default\n                return None\n\n    If you return None from this method, the fallback will be called.\n\n    The first argument is the opaque document instance that contains\n    the Element.  The second argument is a lightweight Element proxy\n    implementation that is only valid during the lookup.  Do not try\n    to keep a reference to it.  Once the lookup is done, the proxy\n    will be invalid.\n\n    Also, you cannot wrap such a read-only Element in an ElementTree,\n    and you must take care not to keep a reference to them outside of\n    the `lookup()` method.\n\n    Note that the API of the Element objects is not complete.  It is\n    purely read-only and does not support all features of the normal\n    `lxml.etree` API (such as XPath, extended slicing or some\n    iteration methods).\n\n    See http://codespeak.net/lxml/element_classes.html\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree_FallbackElementClassLookup, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree_FallbackElementClassLookup, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct_1_iterattributes, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree___pyx_scope_struct_1_iterattributes, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
   0, /*tp_iter*/
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree_PythonElementClassLookup, /*tp_methods*/
+  0, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -185143,13 +185530,9 @@ static PyTypeObject __pyx_type_4lxml_5etree_PythonElementClassLookup = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_26FallbackElementClassLookup_3__init__, /*tp_init*/
-  #else
   0, /*tp_init*/
-  #endif
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_PythonElementClassLookup, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree___pyx_scope_struct_1_iterattributes, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -185165,30 +185548,61 @@ static PyTypeObject __pyx_type_4lxml_5etree_PythonElementClassLookup = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree_ElementChildIterator __pyx_vtable_4lxml_5etree_ElementChildIterator;
 
-static PyObject *__pyx_tp_new_4lxml_5etree_ElementChildIterator(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree_ElementChildIterator *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ElementMatchIterator(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree_ElementChildIterator *)o);
-  p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__ElementMatchIterator*)__pyx_vtabptr_4lxml_5etree_ElementChildIterator;
-  if (unlikely(__pyx_pw_4lxml_5etree_20ElementChildIterator_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
+static struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *__pyx_freelist_4lxml_5etree___pyx_scope_struct_2_iterelements[8];
+static int __pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct_2_iterelements(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  PyObject *o;
+  if (likely((__pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements)))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct_2_iterelements[--__pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
+  } else {
+    o = (*t->tp_alloc)(t, 0);
+    if (unlikely(!o)) return 0;
   }
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree_ElementChildIterator[] = {
-  {0, 0, 0, 0}
-};
+static void __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct_2_iterelements(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->__pyx_v_node);
+  Py_CLEAR(p->__pyx_v_self);
+  if ((__pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements))) {
+    __pyx_freelist_4lxml_5etree___pyx_scope_struct_2_iterelements[__pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements++] = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
+  }
+}
 
-static PyTypeObject __pyx_type_4lxml_5etree_ElementChildIterator = {
+static int __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct_2_iterelements(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *)o;
+  if (p->__pyx_v_node) {
+    e = (*v)(((PyObject*)p->__pyx_v_node), a); if (e) return e;
+  }
+  if (p->__pyx_v_self) {
+    e = (*v)(((PyObject*)p->__pyx_v_self), a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree___pyx_scope_struct_2_iterelements(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements *)o;
+  Py_CLEAR(p->__pyx_v_node);
+  Py_CLEAR(p->__pyx_v_self);
+  return 0;
+}
+
+static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_2_iterelements = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree.ElementChildIterator"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree_ElementChildIterator), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.__pyx_scope_struct_2_iterelements"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_2_iterelements), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ElementMatchIterator, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct_2_iterelements, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -185207,23 +185621,15 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementChildIterator = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("ElementChildIterator(self, node, tag=None, reversed=False)\n    Iterates over the children of an element.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ElementMatchIterator, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ElementMatchIterator, /*tp_clear*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct_2_iterelements, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree___pyx_scope_struct_2_iterelements, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_1__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_21_ElementMatchIterator_3__next__, /*tp_iternext*/
-  #else
   0, /*tp_iternext*/
-  #endif
-  __pyx_methods_4lxml_5etree_ElementChildIterator, /*tp_methods*/
+  0, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -185233,7 +185639,7 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementChildIterator = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree_ElementChildIterator, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree___pyx_scope_struct_2_iterelements, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -185249,28 +185655,61 @@ static PyTypeObject __pyx_type_4lxml_5etree_ElementChildIterator = {
   0, /*tp_finalize*/
   #endif
 };
-static struct __pyx_vtabstruct_4lxml_5etree__RotatingErrorLog __pyx_vtable_4lxml_5etree__RotatingErrorLog;
 
-static PyObject *__pyx_tp_new_4lxml_5etree__RotatingErrorLog(PyTypeObject *t, PyObject *a, PyObject *k) {
-  struct __pyx_obj_4lxml_5etree__RotatingErrorLog *p;
-  PyObject *o = __pyx_tp_new_4lxml_5etree__ErrorLog(t, a, k);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_5etree__RotatingErrorLog *)o);
-  p->__pyx_base.__pyx_base.__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_4lxml_5etree__BaseErrorLog*)__pyx_vtabptr_4lxml_5etree__RotatingErrorLog;
+static struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *__pyx_freelist_4lxml_5etree___pyx_scope_struct_3_iterentities[8];
+static int __pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities = 0;
+
+static PyObject *__pyx_tp_new_4lxml_5etree___pyx_scope_struct_3_iterentities(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  PyObject *o;
+  if (likely((__pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities)))) {
+    o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct_3_iterentities[--__pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities];
+    memset(o, 0, sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities));
+    (void) PyObject_INIT(o, t);
+    PyObject_GC_Track(o);
+  } else {
+    o = (*t->tp_alloc)(t, 0);
+    if (unlikely(!o)) return 0;
+  }
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_5etree__RotatingErrorLog[] = {
-  {__Pyx_NAMESTR("receive"), (PyCFunction)__pyx_pw_4lxml_5etree_17_RotatingErrorLog_3receive, METH_O, __Pyx_DOCSTR(0)},
-  {0, 0, 0, 0}
-};
+static void __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct_3_iterentities(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->__pyx_v_node);
+  Py_CLEAR(p->__pyx_v_self);
+  if ((__pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities))) {
+    __pyx_freelist_4lxml_5etree___pyx_scope_struct_3_iterentities[__pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities++] = ((struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *)o);
+  } else {
+    (*Py_TYPE(o)->tp_free)(o);
+  }
+}
 
-static PyTypeObject __pyx_type_4lxml_5etree__RotatingErrorLog = {
+static int __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct_3_iterentities(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *)o;
+  if (p->__pyx_v_node) {
+    e = (*v)(((PyObject*)p->__pyx_v_node), a); if (e) return e;
+  }
+  if (p->__pyx_v_self) {
+    e = (*v)(((PyObject*)p->__pyx_v_self), a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_5etree___pyx_scope_struct_3_iterentities(PyObject *o) {
+  struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *p = (struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities *)o;
+  Py_CLEAR(p->__pyx_v_node);
+  Py_CLEAR(p->__pyx_v_self);
+  return 0;
+}
+
+static PyTypeObject __pyx_type_4lxml_5etree___pyx_scope_struct_3_iterentities = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.etree._RotatingErrorLog"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_5etree__RotatingErrorLog), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.etree.__pyx_scope_struct_3_iterentities"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_5etree___pyx_scope_struct_3_iterentities), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_5etree__ErrorLog, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_5etree___pyx_scope_struct_3_iterentities, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -185279,11 +185718,7 @@ static PyTypeObject __pyx_type_4lxml_5etree__RotatingErrorLog = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_13_ListErrorLog_7__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
@@ -185293,19 +185728,15 @@ static PyTypeObject __pyx_type_4lxml_5etree__RotatingErrorLog = {
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_5etree__ErrorLog, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_5etree__ErrorLog, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_5etree___pyx_scope_struct_3_iterentities, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_5etree___pyx_scope_struct_3_iterentities, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_5etree_9_ErrorLog_11__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_5etree__RotatingErrorLog, /*tp_methods*/
+  0, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -185313,9 +185744,9 @@ static PyTypeObject __pyx_type_4lxml_5etree__RotatingErrorLog = {
   0, /*tp_descr_get*/
   0, /*tp_descr_set*/
   0, /*tp_dictoffset*/
-  __pyx_pw_4lxml_5etree_17_RotatingErrorLog_1__init__, /*tp_init*/
+  0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_5etree__RotatingErrorLog, /*tp_new*/
+  __pyx_tp_new_4lxml_5etree___pyx_scope_struct_3_iterentities, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -185909,6 +186340,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_group, __pyx_k_group, sizeof(__pyx_k_group), 0, 0, 1, 1},
   {&__pyx_n_s_groups, __pyx_k_groups, sizeof(__pyx_k_groups), 0, 0, 1, 1},
   {&__pyx_n_s_gzip, __pyx_k_gzip, sizeof(__pyx_k_gzip), 0, 0, 1, 1},
+  {&__pyx_n_s_has_raised, __pyx_k_has_raised, sizeof(__pyx_k_has_raised), 0, 0, 1, 1},
   {&__pyx_kp_s_home_stefan_source_Python_lxml, __pyx_k_home_stefan_source_Python_lxml, sizeof(__pyx_k_home_stefan_source_Python_lxml), 0, 0, 1, 0},
   {&__pyx_kp_s_home_stefan_source_Python_lxml_10, __pyx_k_home_stefan_source_Python_lxml_10, sizeof(__pyx_k_home_stefan_source_Python_lxml_10), 0, 0, 1, 0},
   {&__pyx_kp_s_home_stefan_source_Python_lxml_11, __pyx_k_home_stefan_source_Python_lxml_11, sizeof(__pyx_k_home_stefan_source_Python_lxml_11), 0, 0, 1, 0},
@@ -186173,6 +186605,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_staticmethod, __pyx_k_staticmethod, sizeof(__pyx_k_staticmethod), 0, 0, 1, 1},
   {&__pyx_n_s_stdout, __pyx_k_stdout, sizeof(__pyx_k_stdout), 0, 0, 1, 1},
   {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1},
+  {&__pyx_n_s_store_exception, __pyx_k_store_exception, sizeof(__pyx_k_store_exception), 0, 0, 1, 1},
   {&__pyx_n_s_str, __pyx_k_str, sizeof(__pyx_k_str), 0, 0, 1, 1},
   {&__pyx_kp_u_string, __pyx_k_string, sizeof(__pyx_k_string), 0, 1, 0, 0},
   {&__pyx_n_s_string_2, __pyx_k_string_2, sizeof(__pyx_k_string_2), 0, 0, 1, 1},
@@ -186283,8 +186716,8 @@ static int __Pyx_InitCachedBuiltins(void) {
   __pyx_builtin_staticmethod = __Pyx_GetBuiltinName(__pyx_n_s_staticmethod); if (!__pyx_builtin_staticmethod) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 163; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_super = __Pyx_GetBuiltinName(__pyx_n_s_super); if (!__pyx_builtin_super) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 246; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 354; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 243; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 351; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 46; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_sorted = __Pyx_GetBuiltinName(__pyx_n_s_sorted); if (!__pyx_builtin_sorted) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -186302,8 +186735,8 @@ static int __Pyx_InitCachedBuiltins(void) {
   __pyx_builtin_NotImplemented = __Pyx_GetBuiltinName(__pyx_n_s_NotImplemented); if (!__pyx_builtin_NotImplemented) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_StopIteration = __Pyx_GetBuiltinName(__pyx_n_s_StopIteration); if (!__pyx_builtin_StopIteration) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2357; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_ReferenceError = __Pyx_GetBuiltinName(__pyx_n_s_ReferenceError); if (!__pyx_builtin_ReferenceError) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_IOError = __Pyx_GetBuiltinName(__pyx_n_s_IOError); if (!__pyx_builtin_IOError) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 619; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_LookupError = __Pyx_GetBuiltinName(__pyx_n_s_LookupError); if (!__pyx_builtin_LookupError) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_IOError = __Pyx_GetBuiltinName(__pyx_n_s_IOError); if (!__pyx_builtin_IOError) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_LookupError = __Pyx_GetBuiltinName(__pyx_n_s_LookupError); if (!__pyx_builtin_LookupError) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 792; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 633; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   #if PY_VERSION_HEX < 0x02050000
@@ -186682,36 +187115,36 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_slice__45);
   __Pyx_GIVEREF(__pyx_slice__45);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1407
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1463
  *         XMLParser.__init__(self, **kwargs)
  *         if events is None:
  *             events = ('end',)             # <<<<<<<<<<<<<<
  *         self._setBaseURL(base_url)
  *         self._collectEvents(events, tag)
  */
-  __pyx_tuple__47 = PyTuple_Pack(1, __pyx_n_s_end); if (unlikely(!__pyx_tuple__47)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1407; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__47 = PyTuple_Pack(1, __pyx_n_s_end); if (unlikely(!__pyx_tuple__47)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__47);
   __Pyx_GIVEREF(__pyx_tuple__47);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1571
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1627
  *         HTMLParser.__init__(self, **kwargs)
  *         if events is None:
  *             events = ('end',)             # <<<<<<<<<<<<<<
  *         self._setBaseURL(base_url)
  *         self._collectEvents(events, tag)
  */
-  __pyx_tuple__48 = PyTuple_Pack(1, __pyx_n_s_end); if (unlikely(!__pyx_tuple__48)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__48 = PyTuple_Pack(1, __pyx_n_s_end); if (unlikely(!__pyx_tuple__48)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__48);
   __Pyx_GIVEREF(__pyx_tuple__48);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1724
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1780
  *     if isinstance(text, unicode):
  *         if _hasEncodingDeclaration(text):
  *             raise ValueError(             # <<<<<<<<<<<<<<
  *                 u"Unicode strings with encoding declaration are not supported. "
  *                 u"Please use bytes input or XML fragments without declaration.")
  */
-  __pyx_tuple__49 = PyTuple_Pack(1, __pyx_kp_u_Unicode_strings_with_encoding_de); if (unlikely(!__pyx_tuple__49)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1724; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__49 = PyTuple_Pack(1, __pyx_kp_u_Unicode_strings_with_encoding_de); if (unlikely(!__pyx_tuple__49)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1780; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__49);
   __Pyx_GIVEREF(__pyx_tuple__49);
 
@@ -187333,10 +187766,10 @@ static int __Pyx_InitCachedConstants(void) {
  *     u"""Element(_tag, attrib=None, nsmap=None, **_extra)
  * 
  */
-  __pyx_tuple__122 = PyTuple_Pack(5, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_extra, __pyx_n_s_extra); if (unlikely(!__pyx_tuple__122)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__122 = PyTuple_Pack(4, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_extra); if (unlikely(!__pyx_tuple__122)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__122);
   __Pyx_GIVEREF(__pyx_tuple__122);
-  __pyx_codeobj__123 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__122, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_Element, 2801, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__123)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__123 = (PyObject*)__Pyx_PyCode_New(3, 0, 4, 0, CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__122, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_Element, 2801, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__123)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2814
  *                         attrib, nsmap, _extra)
@@ -187381,10 +187814,10 @@ static int __Pyx_InitCachedConstants(void) {
  *                attrib=None, nsmap=None, **_extra):
  *     u"""SubElement(_parent, _tag, attrib=None, nsmap=None, **_extra)
  */
-  __pyx_tuple__130 = PyTuple_Pack(6, __pyx_n_s_parent, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_extra, __pyx_n_s_extra); if (unlikely(!__pyx_tuple__130)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__130 = PyTuple_Pack(5, __pyx_n_s_parent, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_extra); if (unlikely(!__pyx_tuple__130)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__130);
   __Pyx_GIVEREF(__pyx_tuple__130);
-  __pyx_codeobj__131 = (PyObject*)__Pyx_PyCode_New(4, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__130, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_SubElement, 2899, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__131)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__131 = (PyObject*)__Pyx_PyCode_New(4, 0, 5, 0, CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__130, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_SubElement, 2899, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__131)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2908
  *     return _makeSubElement(_parent, _tag, None, None, attrib, nsmap, _extra)
@@ -187396,7 +187829,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__132 = PyTuple_Pack(10, __pyx_n_s_element, __pyx_n_s_file, __pyx_n_s_parser, __pyx_n_s_c_next, __pyx_n_s_c_node, __pyx_n_s_c_node_copy, __pyx_n_s_c_doc, __pyx_n_s_etree, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__132)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2908; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__132);
   __Pyx_GIVEREF(__pyx_tuple__132);
-  __pyx_codeobj__133 = (PyObject*)__Pyx_PyCode_New(3, 2, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__132, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_ElementTree, 2908, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__133)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2908; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__133 = (PyObject*)__Pyx_PyCode_New(1, 2, 10, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__132, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_ElementTree, 2908, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__133)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2908; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2933
  *     return _elementTreeFactory(doc, element)
@@ -187408,7 +187841,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__134 = PyTuple_Pack(5, __pyx_n_s_text, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__134)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__134);
   __Pyx_GIVEREF(__pyx_tuple__134);
-  __pyx_codeobj__135 = (PyObject*)__Pyx_PyCode_New(3, 1, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__134, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_HTML, 2933, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__135)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__135 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__134, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_HTML, 2933, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__135)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2933; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2958
  *         return result_container.result
@@ -187420,7 +187853,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__136 = PyTuple_Pack(5, __pyx_n_s_text, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__136)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2958; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__136);
   __Pyx_GIVEREF(__pyx_tuple__136);
-  __pyx_codeobj__137 = (PyObject*)__Pyx_PyCode_New(3, 1, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__136, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_XML, 2958, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__137)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2958; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__137 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__136, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_XML, 2958, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__137)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2958; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":2988
  *         return result_container.result
@@ -187432,7 +187865,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__138 = PyTuple_Pack(5, __pyx_n_s_text, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__138)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2988; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__138);
   __Pyx_GIVEREF(__pyx_tuple__138);
-  __pyx_codeobj__139 = (PyObject*)__Pyx_PyCode_New(3, 1, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__138, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_fromstring, 2988, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__139)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2988; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__139 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__138, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_fromstring, 2988, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__139)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2988; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":3008
  *         return result_container.result
@@ -187468,7 +187901,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__144 = PyTuple_Pack(4, __pyx_n_s_elem, __pyx_n_s_pretty_print, __pyx_n_s_with_tail, __pyx_n_s_xml); if (unlikely(!__pyx_tuple__144)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__144);
   __Pyx_GIVEREF(__pyx_tuple__144);
-  __pyx_codeobj__145 = (PyObject*)__Pyx_PyCode_New(3, 2, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__144, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_dump, 3035, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__145)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__145 = (PyObject*)__Pyx_PyCode_New(1, 2, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__144, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_dump, 3035, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__145)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":3047
  *     sys.stdout.write(xml)
@@ -187480,7 +187913,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__146 = PyTuple_Pack(13, __pyx_n_s_element_or_tree, __pyx_n_s_encoding, __pyx_n_s_method, __pyx_n_s_xml_declaration, __pyx_n_s_pretty_print, __pyx_n_s_with_tail, __pyx_n_s_standalone, __pyx_n_s_doctype, __pyx_n_s_exclusive, __pyx_n_s_with_comments, __pyx_n_s_inclusive_ns_prefixes, __pyx_n_s_write_declaration, __pyx_n_s_is_standalone); if (unlikely(!__pyx_tuple__146)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__146);
   __Pyx_GIVEREF(__pyx_tuple__146);
-  __pyx_codeobj__147 = (PyObject*)__Pyx_PyCode_New(11, 10, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__146, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_tostring, 3047, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__147)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__147 = (PyObject*)__Pyx_PyCode_New(1, 10, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__146, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_tostring, 3047, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__147)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":3139
  *             python._fqtypename(element_or_tree).decode('utf8')
@@ -187489,10 +187922,10 @@ static int __Pyx_InitCachedConstants(void) {
  *     u"""tostringlist(element_or_tree, *args, **kwargs)
  * 
  */
-  __pyx_tuple__148 = PyTuple_Pack(5, __pyx_n_s_element_or_tree, __pyx_n_s_args, __pyx_n_s_kwargs, __pyx_n_s_args, __pyx_n_s_kwargs); if (unlikely(!__pyx_tuple__148)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__148 = PyTuple_Pack(3, __pyx_n_s_element_or_tree, __pyx_n_s_args, __pyx_n_s_kwargs); if (unlikely(!__pyx_tuple__148)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__148);
   __Pyx_GIVEREF(__pyx_tuple__148);
-  __pyx_codeobj__149 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__148, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_tostringlist, 3139, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__149)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__149 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_VARARGS|CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__148, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_tostringlist, 3139, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__149)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":3150
  *     return [tostring(element_or_tree, *args, **kwargs)]
@@ -187504,7 +187937,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__150 = PyTuple_Pack(5, __pyx_n_s_element_or_tree, __pyx_n_s_method, __pyx_n_s_pretty_print, __pyx_n_s_with_tail, __pyx_n_s_doctype); if (unlikely(!__pyx_tuple__150)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__150);
   __Pyx_GIVEREF(__pyx_tuple__150);
-  __pyx_codeobj__151 = (PyObject*)__Pyx_PyCode_New(5, 4, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__150, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_tounicode, 3150, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__151)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__151 = (PyObject*)__Pyx_PyCode_New(1, 4, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__150, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_tounicode, 3150, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__151)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.etree.pyx":3184
  *             type(element_or_tree)
@@ -187516,7 +187949,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__152 = PyTuple_Pack(5, __pyx_n_s_source, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2, __pyx_n_s_result_container); if (unlikely(!__pyx_tuple__152)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__152);
   __Pyx_GIVEREF(__pyx_tuple__152);
-  __pyx_codeobj__153 = (PyObject*)__Pyx_PyCode_New(3, 1, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__152, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_parse, 3184, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__153)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__153 = (PyObject*)__Pyx_PyCode_New(2, 1, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__152, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_parse, 3184, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__153)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/classlookup.pxi":551
  *     LOOKUP_ELEMENT_CLASS = function
@@ -187554,26 +187987,26 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GIVEREF(__pyx_tuple__158);
   __pyx_codeobj__159 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__158, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_5, __pyx_n_s_init, 18, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__159)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 18; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1463
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1519
  * __GLOBAL_PARSER_CONTEXT.setDefaultParser(__DEFAULT_XML_PARSER)
  * 
  * def set_default_parser(_BaseParser parser=None):             # <<<<<<<<<<<<<<
  *     u"""set_default_parser(parser=None)
  * 
  */
-  __pyx_tuple__160 = PyTuple_Pack(1, __pyx_n_s_parser); if (unlikely(!__pyx_tuple__160)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__160 = PyTuple_Pack(1, __pyx_n_s_parser); if (unlikely(!__pyx_tuple__160)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__160);
   __Pyx_GIVEREF(__pyx_tuple__160);
-  __pyx_codeobj__161 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__160, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_5, __pyx_n_s_set_default_parser, 1463, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__161)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__161 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__160, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_5, __pyx_n_s_set_default_parser, 1519, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__161)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1479
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1535
  *     __GLOBAL_PARSER_CONTEXT.setDefaultParser(parser)
  * 
  * def get_default_parser():             # <<<<<<<<<<<<<<
  *     u"get_default_parser()"
  *     return __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  */
-  __pyx_codeobj__162 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_5, __pyx_n_s_get_default_parser, 1479, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__162)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__162 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_5, __pyx_n_s_get_default_parser, 1535, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__162)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":468
  * 
@@ -187608,7 +188041,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__166 = PyTuple_Pack(6, __pyx_n_s_text, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_dic, __pyx_n_s_root, __pyx_n_s_elem); if (unlikely(!__pyx_tuple__166)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__166);
   __Pyx_GIVEREF(__pyx_tuple__166);
-  __pyx_codeobj__167 = (PyObject*)__Pyx_PyCode_New(3, 1, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__166, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_7, __pyx_n_s_XMLID, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__167)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__167 = (PyObject*)__Pyx_PyCode_New(2, 1, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__166, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_7, __pyx_n_s_XMLID, 3, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__167)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlid.pxi":24
  *     return (root, dic)
@@ -187620,7 +188053,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__168 = PyTuple_Pack(4, __pyx_n_s_text, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_root); if (unlikely(!__pyx_tuple__168)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__168);
   __Pyx_GIVEREF(__pyx_tuple__168);
-  __pyx_codeobj__169 = (PyObject*)__Pyx_PyCode_New(3, 1, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__168, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_7, __pyx_n_s_XMLDTDID, 24, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__169)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__169 = (PyObject*)__Pyx_PyCode_New(2, 1, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__168, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_7, __pyx_n_s_XMLDTDID, 24, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__169)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 24; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xmlid.pxi":44
  *         return (root, _IDDict(root))
@@ -187632,7 +188065,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__170 = PyTuple_Pack(4, __pyx_n_s_source, __pyx_n_s_parser, __pyx_n_s_base_url, __pyx_n_s_doc_2); if (unlikely(!__pyx_tuple__170)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__170);
   __Pyx_GIVEREF(__pyx_tuple__170);
-  __pyx_codeobj__171 = (PyObject*)__Pyx_PyCode_New(3, 1, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__170, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_7, __pyx_n_s_parseid, 44, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__171)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__171 = (PyObject*)__Pyx_PyCode_New(2, 1, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__170, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_7, __pyx_n_s_parseid, 44, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__171)) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 44; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/cleanup.pxi":3
  * # functions for tree cleanup and removing elements from subtrees
@@ -187653,10 +188086,10 @@ static int __Pyx_InitCachedConstants(void) {
  *     u"""strip_attributes(tree_or_element, *attribute_names)
  * 
  */
-  __pyx_tuple__174 = PyTuple_Pack(5, __pyx_n_s_tree_or_element, __pyx_n_s_attribute_names, __pyx_n_s_attribute_names, __pyx_n_s_matcher, __pyx_n_s_element); if (unlikely(!__pyx_tuple__174)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__174 = PyTuple_Pack(4, __pyx_n_s_tree_or_element, __pyx_n_s_attribute_names, __pyx_n_s_matcher, __pyx_n_s_element); if (unlikely(!__pyx_tuple__174)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__174);
   __Pyx_GIVEREF(__pyx_tuple__174);
-  __pyx_codeobj__175 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__174, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_8, __pyx_n_s_strip_attributes, 13, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__175)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__175 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__174, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_8, __pyx_n_s_strip_attributes, 13, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__175)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 13; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/cleanup.pxi":54
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_node)
@@ -187665,10 +188098,10 @@ static int __Pyx_InitCachedConstants(void) {
  *     u"""strip_elements(tree_or_element, *tag_names, with_tail=True)
  * 
  */
-  __pyx_tuple__176 = PyTuple_Pack(13, __pyx_n_s_tree_or_element, __pyx_n_s_with_tail, __pyx_n_s_tag_names, __pyx_n_s_tag_names, __pyx_n_s_matcher, __pyx_n_s_element, __pyx_n_s_doc_2, __pyx_n_s_ns_tags, __pyx_n_s_c_ns_tags, __pyx_n_s_c_tag_count, __pyx_n_s_strip_comments, __pyx_n_s_strip_pis, __pyx_n_s_strip_entities); if (unlikely(!__pyx_tuple__176)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__176 = PyTuple_Pack(12, __pyx_n_s_tree_or_element, __pyx_n_s_with_tail, __pyx_n_s_tag_names, __pyx_n_s_matcher, __pyx_n_s_element, __pyx_n_s_doc_2, __pyx_n_s_ns_tags, __pyx_n_s_c_ns_tags, __pyx_n_s_c_tag_count, __pyx_n_s_strip_comments, __pyx_n_s_strip_pis, __pyx_n_s_strip_entities); if (unlikely(!__pyx_tuple__176)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__176);
   __Pyx_GIVEREF(__pyx_tuple__176);
-  __pyx_codeobj__177 = (PyObject*)__Pyx_PyCode_New(2, 1, 13, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__176, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_8, __pyx_n_s_strip_elements, 54, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__177)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__177 = (PyObject*)__Pyx_PyCode_New(1, 1, 12, 0, CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__176, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_8, __pyx_n_s_strip_elements, 54, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__177)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 54; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/cleanup.pxi":132
  * 
@@ -187677,10 +188110,10 @@ static int __Pyx_InitCachedConstants(void) {
  *     u"""strip_tags(tree_or_element, *tag_names)
  * 
  */
-  __pyx_tuple__178 = PyTuple_Pack(12, __pyx_n_s_tree_or_element, __pyx_n_s_tag_names, __pyx_n_s_tag_names, __pyx_n_s_matcher, __pyx_n_s_element, __pyx_n_s_doc_2, __pyx_n_s_ns_tags, __pyx_n_s_strip_comments, __pyx_n_s_strip_pis, __pyx_n_s_strip_entities, __pyx_n_s_c_ns_tags, __pyx_n_s_c_tag_count); if (unlikely(!__pyx_tuple__178)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__178 = PyTuple_Pack(11, __pyx_n_s_tree_or_element, __pyx_n_s_tag_names, __pyx_n_s_matcher, __pyx_n_s_element, __pyx_n_s_doc_2, __pyx_n_s_ns_tags, __pyx_n_s_strip_comments, __pyx_n_s_strip_pis, __pyx_n_s_strip_entities, __pyx_n_s_c_ns_tags, __pyx_n_s_c_tag_count); if (unlikely(!__pyx_tuple__178)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__178);
   __Pyx_GIVEREF(__pyx_tuple__178);
-  __pyx_codeobj__179 = (PyObject*)__Pyx_PyCode_New(1, 0, 12, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__178, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_8, __pyx_n_s_strip_tags, 132, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__179)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__179 = (PyObject*)__Pyx_PyCode_New(1, 0, 11, 0, CO_VARARGS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__178, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_8, __pyx_n_s_strip_tags, 132, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__179)) {__pyx_filename = __pyx_f[17]; __pyx_lineno = 132; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/extensions.pxi":371
  * 
@@ -187703,7 +188136,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__181 = PyTuple_Pack(7, __pyx_n_s_module, __pyx_n_s_function_mapping, __pyx_n_s_ns, __pyx_n_s_functions, __pyx_n_s_function_name, __pyx_n_s_xpath_name, __pyx_n_s_name_2); if (unlikely(!__pyx_tuple__181)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__181);
   __Pyx_GIVEREF(__pyx_tuple__181);
-  __pyx_codeobj__182 = (PyObject*)__Pyx_PyCode_New(3, 1, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__181, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_9, __pyx_n_s_Extension, 426, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__182)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__182 = (PyObject*)__Pyx_PyCode_New(2, 1, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__181, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_9, __pyx_n_s_Extension, 426, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__182)) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 426; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/extensions.pxi":735
  *     # we need to use a Python class here, bytes cannot be C-subclassed
@@ -187727,7 +188160,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__185 = PyTuple_Pack(5, __pyx_n_s_etree_or_element, __pyx_n_s_namespaces, __pyx_n_s_extensions, __pyx_n_s_regexp, __pyx_n_s_smart_strings); if (unlikely(!__pyx_tuple__185)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__185);
   __Pyx_GIVEREF(__pyx_tuple__185);
-  __pyx_codeobj__186 = (PyObject*)__Pyx_PyCode_New(5, 4, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__185, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_10, __pyx_n_s_XPathEvaluator, 380, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__186)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__186 = (PyObject*)__Pyx_PyCode_New(1, 4, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__185, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml_10, __pyx_n_s_XPathEvaluator, 380, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__186)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 380; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/xpath.pxi":478
  * cdef object _replace_strings
@@ -188009,50 +188442,37 @@ PyMODINIT_FUNC PyInit_etree(void)
   if (__Pyx_ExportFunction("initTagMatch", (void (*)(void))initTagMatch, "void (struct LxmlElementTagMatcher *, PyObject *)") < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__Pyx_ExportFunction("findOrBuildNodeNsPrefix", (void (*)(void))findOrBuildNodeNsPrefix, "xmlNs *(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *)") < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   /*--- Type init code ---*/
-  __pyx_vtabptr_4lxml_5etree__BaseParser = &__pyx_vtable_4lxml_5etree__BaseParser;
-  __pyx_vtable_4lxml_5etree__BaseParser._setBaseURL = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *))__pyx_f_4lxml_5etree_11_BaseParser__setBaseURL;
-  __pyx_vtable_4lxml_5etree__BaseParser._collectEvents = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_11_BaseParser__collectEvents;
-  __pyx_vtable_4lxml_5etree__BaseParser._getParserContext = (struct __pyx_obj_4lxml_5etree__ParserContext *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_11_BaseParser__getParserContext;
-  __pyx_vtable_4lxml_5etree__BaseParser._getPushParserContext = (struct __pyx_obj_4lxml_5etree__ParserContext *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_11_BaseParser__getPushParserContext;
-  __pyx_vtable_4lxml_5etree__BaseParser._createContext = (struct __pyx_obj_4lxml_5etree__ParserContext *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_11_BaseParser__createContext;
-  __pyx_vtable_4lxml_5etree__BaseParser._registerHtmlErrorHandler = (int (*)(struct __pyx_obj_4lxml_5etree__BaseParser *, xmlParserCtxt *))__pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler;
-  __pyx_vtable_4lxml_5etree__BaseParser._newParserCtxt = (xmlParserCtxt *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt;
-  __pyx_vtable_4lxml_5etree__BaseParser._newPushParserCtxt = (xmlParserCtxt *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt;
-  __pyx_vtable_4lxml_5etree__BaseParser._copy = (struct __pyx_obj_4lxml_5etree__BaseParser *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_11_BaseParser__copy;
-  __pyx_vtable_4lxml_5etree__BaseParser._parseUnicodeDoc = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, char *))__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc;
-  __pyx_vtable_4lxml_5etree__BaseParser._parseDoc = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, char *, int, char *))__pyx_f_4lxml_5etree_11_BaseParser__parseDoc;
-  __pyx_vtable_4lxml_5etree__BaseParser._parseDocFromFile = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, char *))__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile;
-  __pyx_vtable_4lxml_5etree__BaseParser._parseDocFromFilelike = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__BaseParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__BaseParser.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__BaseParser.tp_dict, __pyx_vtabptr_4lxml_5etree__BaseParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__BaseParser = &__pyx_type_4lxml_5etree__BaseParser;
-  __pyx_vtabptr_4lxml_5etree__FeedParser = &__pyx_vtable_4lxml_5etree__FeedParser;
-  __pyx_vtable_4lxml_5etree__FeedParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree__BaseParser;
-  __pyx_vtable_4lxml_5etree__FeedParser.feed = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__FeedParser *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_11_FeedParser_feed;
-  __pyx_vtable_4lxml_5etree__FeedParser.close = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__FeedParser *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_11_FeedParser_close;
-  __pyx_type_4lxml_5etree__FeedParser.tp_base = __pyx_ptype_4lxml_5etree__BaseParser;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__FeedParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__FeedParser.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__FeedParser.tp_dict, __pyx_vtabptr_4lxml_5etree__FeedParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_FeedParser", (PyObject *)&__pyx_type_4lxml_5etree__FeedParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__FeedParser = &__pyx_type_4lxml_5etree__FeedParser;
-  __pyx_vtabptr_4lxml_5etree_XMLParser = &__pyx_vtable_4lxml_5etree_XMLParser;
-  __pyx_vtable_4lxml_5etree_XMLParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree__FeedParser;
-  __pyx_type_4lxml_5etree_XMLParser.tp_base = __pyx_ptype_4lxml_5etree__FeedParser;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_XMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_XMLParser.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XMLParser.tp_dict, __pyx_vtabptr_4lxml_5etree_XMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "XMLParser", (PyObject *)&__pyx_type_4lxml_5etree_XMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_XMLParser = &__pyx_type_4lxml_5etree_XMLParser;
-  __pyx_vtabptr_4lxml_5etree_ETCompatXMLParser = &__pyx_vtable_4lxml_5etree_ETCompatXMLParser;
-  __pyx_vtable_4lxml_5etree_ETCompatXMLParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree_XMLParser;
-  __pyx_type_4lxml_5etree_ETCompatXMLParser.tp_base = __pyx_ptype_4lxml_5etree_XMLParser;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_ETCompatXMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_ETCompatXMLParser.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ETCompatXMLParser.tp_dict, __pyx_vtabptr_4lxml_5etree_ETCompatXMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "ETCompatXMLParser", (PyObject *)&__pyx_type_4lxml_5etree_ETCompatXMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1415; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_ETCompatXMLParser = &__pyx_type_4lxml_5etree_ETCompatXMLParser;
+  __pyx_vtabptr_4lxml_5etree__TempStore = &__pyx_vtable_4lxml_5etree__TempStore;
+  __pyx_vtable_4lxml_5etree__TempStore.add = (int (*)(struct __pyx_obj_4lxml_5etree__TempStore *, PyObject *))__pyx_f_4lxml_5etree_10_TempStore_add;
+  __pyx_vtable_4lxml_5etree__TempStore.clear = (int (*)(struct __pyx_obj_4lxml_5etree__TempStore *))__pyx_f_4lxml_5etree_10_TempStore_clear;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__TempStore) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__TempStore.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__TempStore.tp_dict, __pyx_vtabptr_4lxml_5etree__TempStore) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__TempStore = &__pyx_type_4lxml_5etree__TempStore;
+  __pyx_vtabptr_4lxml_5etree__ExceptionContext = &__pyx_vtable_4lxml_5etree__ExceptionContext;
+  __pyx_vtable_4lxml_5etree__ExceptionContext.clear = (void (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *))__pyx_f_4lxml_5etree_17_ExceptionContext_clear;
+  __pyx_vtable_4lxml_5etree__ExceptionContext._store_raised = (void (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *))__pyx_f_4lxml_5etree_17_ExceptionContext__store_raised;
+  __pyx_vtable_4lxml_5etree__ExceptionContext._store_exception = (void (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *, PyObject *))__pyx_f_4lxml_5etree_17_ExceptionContext__store_exception;
+  __pyx_vtable_4lxml_5etree__ExceptionContext._has_raised = (int (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *))__pyx_f_4lxml_5etree_17_ExceptionContext__has_raised;
+  __pyx_vtable_4lxml_5etree__ExceptionContext._raise_if_stored = (int (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *))__pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ExceptionContext) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ExceptionContext.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ExceptionContext.tp_dict, __pyx_vtabptr_4lxml_5etree__ExceptionContext) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ExceptionContext = &__pyx_type_4lxml_5etree__ExceptionContext;
+  __pyx_vtabptr_4lxml_5etree__Document = &__pyx_vtable_4lxml_5etree__Document;
+  __pyx_vtable_4lxml_5etree__Document.getroot = (PyObject *(*)(struct LxmlDocument *))__pyx_f_4lxml_5etree_9_Document_getroot;
+  __pyx_vtable_4lxml_5etree__Document.hasdoctype = (int (*)(struct LxmlDocument *))__pyx_f_4lxml_5etree_9_Document_hasdoctype;
+  __pyx_vtable_4lxml_5etree__Document.getdoctype = (PyObject *(*)(struct LxmlDocument *))__pyx_f_4lxml_5etree_9_Document_getdoctype;
+  __pyx_vtable_4lxml_5etree__Document.getxmlinfo = (PyObject *(*)(struct LxmlDocument *))__pyx_f_4lxml_5etree_9_Document_getxmlinfo;
+  __pyx_vtable_4lxml_5etree__Document.isstandalone = (PyObject *(*)(struct LxmlDocument *))__pyx_f_4lxml_5etree_9_Document_isstandalone;
+  __pyx_vtable_4lxml_5etree__Document.buildNewPrefix = (PyObject *(*)(struct LxmlDocument *))__pyx_f_4lxml_5etree_9_Document_buildNewPrefix;
+  __pyx_vtable_4lxml_5etree__Document._findOrBuildNodeNs = (xmlNs *(*)(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *, int))__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs;
+  __pyx_vtable_4lxml_5etree__Document._setNodeNs = (int (*)(struct LxmlDocument *, xmlNode *, const xmlChar *))__pyx_f_4lxml_5etree_9_Document__setNodeNs;
+  if (PyType_Ready(&LxmlDocumentType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  LxmlDocumentType.tp_print = 0;
+  if (__Pyx_SetVtable(LxmlDocumentType.tp_dict, __pyx_vtabptr_4lxml_5etree__Document) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_Document", (PyObject *)&LxmlDocumentType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__Document = &LxmlDocumentType;
   if (PyType_Ready(&LxmlElementType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   LxmlElementType.tp_print = 0;
   #if CYTHON_COMPILING_IN_CPYTHON
@@ -188127,6 +188547,106 @@ PyMODINIT_FUNC PyInit_etree(void)
   #endif
   if (__Pyx_SetAttrString(__pyx_m, "_Element", (PyObject *)&LxmlElementType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 587; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree__Element = &LxmlElementType;
+  __pyx_vtabptr_4lxml_5etree__BaseParser = &__pyx_vtable_4lxml_5etree__BaseParser;
+  __pyx_vtable_4lxml_5etree__BaseParser._setBaseURL = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *))__pyx_f_4lxml_5etree_11_BaseParser__setBaseURL;
+  __pyx_vtable_4lxml_5etree__BaseParser._collectEvents = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_11_BaseParser__collectEvents;
+  __pyx_vtable_4lxml_5etree__BaseParser._getParserContext = (struct __pyx_obj_4lxml_5etree__ParserContext *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_11_BaseParser__getParserContext;
+  __pyx_vtable_4lxml_5etree__BaseParser._getPushParserContext = (struct __pyx_obj_4lxml_5etree__ParserContext *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_11_BaseParser__getPushParserContext;
+  __pyx_vtable_4lxml_5etree__BaseParser._createContext = (struct __pyx_obj_4lxml_5etree__ParserContext *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_11_BaseParser__createContext;
+  __pyx_vtable_4lxml_5etree__BaseParser._registerHtmlErrorHandler = (int (*)(struct __pyx_obj_4lxml_5etree__BaseParser *, xmlParserCtxt *))__pyx_f_4lxml_5etree_11_BaseParser__registerHtmlErrorHandler;
+  __pyx_vtable_4lxml_5etree__BaseParser._newParserCtxt = (xmlParserCtxt *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_11_BaseParser__newParserCtxt;
+  __pyx_vtable_4lxml_5etree__BaseParser._newPushParserCtxt = (xmlParserCtxt *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_11_BaseParser__newPushParserCtxt;
+  __pyx_vtable_4lxml_5etree__BaseParser._copy = (struct __pyx_obj_4lxml_5etree__BaseParser *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_11_BaseParser__copy;
+  __pyx_vtable_4lxml_5etree__BaseParser._parseUnicodeDoc = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, char *))__pyx_f_4lxml_5etree_11_BaseParser__parseUnicodeDoc;
+  __pyx_vtable_4lxml_5etree__BaseParser._parseDoc = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, char *, int, char *))__pyx_f_4lxml_5etree_11_BaseParser__parseDoc;
+  __pyx_vtable_4lxml_5etree__BaseParser._parseDocFromFile = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, char *))__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFile;
+  __pyx_vtable_4lxml_5etree__BaseParser._parseDocFromFilelike = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__BaseParser *, PyObject *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_11_BaseParser__parseDocFromFilelike;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__BaseParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 753; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__BaseParser.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__BaseParser.tp_dict, __pyx_vtabptr_4lxml_5etree__BaseParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 753; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__BaseParser = &__pyx_type_4lxml_5etree__BaseParser;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_QName) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_QName.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "QName", (PyObject *)&__pyx_type_4lxml_5etree_QName) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_QName = &__pyx_type_4lxml_5etree_QName;
+  __pyx_vtabptr_4lxml_5etree__LogEntry = &__pyx_vtable_4lxml_5etree__LogEntry;
+  __pyx_vtable_4lxml_5etree__LogEntry._setError = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__LogEntry *, xmlError *))__pyx_f_4lxml_5etree_9_LogEntry__setError;
+  __pyx_vtable_4lxml_5etree__LogEntry._setGeneric = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__LogEntry *, int, int, int, int, PyObject *, PyObject *))__pyx_f_4lxml_5etree_9_LogEntry__setGeneric;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__LogEntry) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__LogEntry.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__LogEntry.tp_dict, __pyx_vtabptr_4lxml_5etree__LogEntry) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_LogEntry", (PyObject *)&__pyx_type_4lxml_5etree__LogEntry) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__LogEntry = &__pyx_type_4lxml_5etree__LogEntry;
+  __pyx_vtabptr_4lxml_5etree__BaseErrorLog = &__pyx_vtable_4lxml_5etree__BaseErrorLog;
+  __pyx_vtable_4lxml_5etree__BaseErrorLog.copy = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_13_BaseErrorLog_copy;
+  __pyx_vtable_4lxml_5etree__BaseErrorLog.receive = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, struct __pyx_obj_4lxml_5etree__LogEntry *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_13_BaseErrorLog_receive;
+  __pyx_vtable_4lxml_5etree__BaseErrorLog._receive = (void (*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, xmlError *))__pyx_f_4lxml_5etree_13_BaseErrorLog__receive;
+  __pyx_vtable_4lxml_5etree__BaseErrorLog._receiveGeneric = (void (*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, int, int, int, int, PyObject *, PyObject *))__pyx_f_4lxml_5etree_13_BaseErrorLog__receiveGeneric;
+  __pyx_vtable_4lxml_5etree__BaseErrorLog._buildParseException = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_13_BaseErrorLog__buildParseException;
+  __pyx_vtable_4lxml_5etree__BaseErrorLog._buildExceptionMessage = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, PyObject *))__pyx_f_4lxml_5etree_13_BaseErrorLog__buildExceptionMessage;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__BaseErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__BaseErrorLog.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__BaseErrorLog.tp_dict, __pyx_vtabptr_4lxml_5etree__BaseErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_BaseErrorLog", (PyObject *)&__pyx_type_4lxml_5etree__BaseErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__BaseErrorLog = &__pyx_type_4lxml_5etree__BaseErrorLog;
+  __pyx_vtabptr_4lxml_5etree__ListErrorLog = &__pyx_vtable_4lxml_5etree__ListErrorLog;
+  __pyx_vtable_4lxml_5etree__ListErrorLog.__pyx_base = *__pyx_vtabptr_4lxml_5etree__BaseErrorLog;
+  __pyx_vtable_4lxml_5etree__ListErrorLog.__pyx_base.copy = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_13_ListErrorLog_copy;
+  __pyx_type_4lxml_5etree__ListErrorLog.tp_base = __pyx_ptype_4lxml_5etree__BaseErrorLog;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ListErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ListErrorLog.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ListErrorLog.tp_dict, __pyx_vtabptr_4lxml_5etree__ListErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_ListErrorLog", (PyObject *)&__pyx_type_4lxml_5etree__ListErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ListErrorLog = &__pyx_type_4lxml_5etree__ListErrorLog;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ErrorLogContext) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ErrorLogContext.tp_print = 0;
+  __pyx_ptype_4lxml_5etree__ErrorLogContext = &__pyx_type_4lxml_5etree__ErrorLogContext;
+  __pyx_vtabptr_4lxml_5etree__ErrorLog = &__pyx_vtable_4lxml_5etree__ErrorLog;
+  __pyx_vtable_4lxml_5etree__ErrorLog.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ListErrorLog;
+  __pyx_vtable_4lxml_5etree__ErrorLog.__pyx_base.__pyx_base.copy = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_9_ErrorLog_copy;
+  __pyx_vtable_4lxml_5etree__ErrorLog.__pyx_base.__pyx_base.receive = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, struct __pyx_obj_4lxml_5etree__LogEntry *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_9_ErrorLog_receive;
+  __pyx_vtable_4lxml_5etree__ErrorLog.__pyx___enter__ = (int (*)(struct __pyx_obj_4lxml_5etree__ErrorLog *))__pyx_f_4lxml_5etree_9_ErrorLog___enter__;
+  __pyx_vtable_4lxml_5etree__ErrorLog.connect = (int (*)(struct __pyx_obj_4lxml_5etree__ErrorLog *))__pyx_f_4lxml_5etree_9_ErrorLog_connect;
+  __pyx_vtable_4lxml_5etree__ErrorLog.disconnect = (int (*)(struct __pyx_obj_4lxml_5etree__ErrorLog *))__pyx_f_4lxml_5etree_9_ErrorLog_disconnect;
+  __pyx_vtable_4lxml_5etree__ErrorLog.clear = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ErrorLog *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_9_ErrorLog_clear;
+  __pyx_type_4lxml_5etree__ErrorLog.tp_base = __pyx_ptype_4lxml_5etree__ListErrorLog;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ErrorLog.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ErrorLog.tp_dict, __pyx_vtabptr_4lxml_5etree__ErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_ErrorLog", (PyObject *)&__pyx_type_4lxml_5etree__ErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ErrorLog = &__pyx_type_4lxml_5etree__ErrorLog;
+  __pyx_vtabptr_4lxml_5etree__DomainErrorLog = &__pyx_vtable_4lxml_5etree__DomainErrorLog;
+  __pyx_vtable_4lxml_5etree__DomainErrorLog.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ErrorLog;
+  __pyx_vtable_4lxml_5etree__DomainErrorLog.__pyx_base.__pyx_base.__pyx_base.receive = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, struct __pyx_obj_4lxml_5etree__LogEntry *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_15_DomainErrorLog_receive;
+  __pyx_type_4lxml_5etree__DomainErrorLog.tp_base = __pyx_ptype_4lxml_5etree__ErrorLog;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__DomainErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__DomainErrorLog.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__DomainErrorLog.tp_dict, __pyx_vtabptr_4lxml_5etree__DomainErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_DomainErrorLog", (PyObject *)&__pyx_type_4lxml_5etree__DomainErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__DomainErrorLog = &__pyx_type_4lxml_5etree__DomainErrorLog;
+  __pyx_vtabptr_4lxml_5etree__RotatingErrorLog = &__pyx_vtable_4lxml_5etree__RotatingErrorLog;
+  __pyx_vtable_4lxml_5etree__RotatingErrorLog.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ErrorLog;
+  __pyx_vtable_4lxml_5etree__RotatingErrorLog.__pyx_base.__pyx_base.__pyx_base.receive = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, struct __pyx_obj_4lxml_5etree__LogEntry *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_17_RotatingErrorLog_receive;
+  __pyx_type_4lxml_5etree__RotatingErrorLog.tp_base = __pyx_ptype_4lxml_5etree__ErrorLog;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__RotatingErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__RotatingErrorLog.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__RotatingErrorLog.tp_dict, __pyx_vtabptr_4lxml_5etree__RotatingErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_RotatingErrorLog", (PyObject *)&__pyx_type_4lxml_5etree__RotatingErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__RotatingErrorLog = &__pyx_type_4lxml_5etree__RotatingErrorLog;
+  __pyx_vtabptr_4lxml_5etree_PyErrorLog = &__pyx_vtable_4lxml_5etree_PyErrorLog;
+  __pyx_vtable_4lxml_5etree_PyErrorLog.__pyx_base = *__pyx_vtabptr_4lxml_5etree__BaseErrorLog;
+  __pyx_vtable_4lxml_5etree_PyErrorLog.__pyx_base.copy = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_10PyErrorLog_copy;
+  __pyx_vtable_4lxml_5etree_PyErrorLog.__pyx_base.receive = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, struct __pyx_obj_4lxml_5etree__LogEntry *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_10PyErrorLog_receive;
+  __pyx_type_4lxml_5etree_PyErrorLog.tp_base = __pyx_ptype_4lxml_5etree__BaseErrorLog;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_PyErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_PyErrorLog.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_PyErrorLog.tp_dict, __pyx_vtabptr_4lxml_5etree_PyErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "PyErrorLog", (PyObject *)&__pyx_type_4lxml_5etree_PyErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_PyErrorLog = &__pyx_type_4lxml_5etree_PyErrorLog;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_DocInfo) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_DocInfo.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "DocInfo", (PyObject *)&__pyx_type_4lxml_5etree_DocInfo) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_DocInfo = &__pyx_type_4lxml_5etree_DocInfo;
   __pyx_vtabptr_4lxml_5etree___ContentOnlyElement = &__pyx_vtable_4lxml_5etree___ContentOnlyElement;
   __pyx_vtable_4lxml_5etree___ContentOnlyElement._raiseImmutable = (int (*)(struct __pyx_obj_4lxml_5etree___ContentOnlyElement *))__pyx_f_4lxml_5etree_20__ContentOnlyElement__raiseImmutable;
   __pyx_type_4lxml_5etree___ContentOnlyElement.tp_base = __pyx_ptype_4lxml_5etree__Element;
@@ -188164,6 +188684,14 @@ PyMODINIT_FUNC PyInit_etree(void)
   #endif
   if (__Pyx_SetVtable(__pyx_type_4lxml_5etree___ContentOnlyElement.tp_dict, __pyx_vtabptr_4lxml_5etree___ContentOnlyElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree___ContentOnlyElement = &__pyx_type_4lxml_5etree___ContentOnlyElement;
+  __pyx_vtabptr_4lxml_5etree__Comment = &__pyx_vtable_4lxml_5etree__Comment;
+  __pyx_vtable_4lxml_5etree__Comment.__pyx_base = *__pyx_vtabptr_4lxml_5etree___ContentOnlyElement;
+  __pyx_type_4lxml_5etree__Comment.tp_base = __pyx_ptype_4lxml_5etree___ContentOnlyElement;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__Comment) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__Comment.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__Comment.tp_dict, __pyx_vtabptr_4lxml_5etree__Comment) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_Comment", (PyObject *)&__pyx_type_4lxml_5etree__Comment) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__Comment = &__pyx_type_4lxml_5etree__Comment;
   __pyx_vtabptr_4lxml_5etree__ProcessingInstruction = &__pyx_vtable_4lxml_5etree__ProcessingInstruction;
   __pyx_vtable_4lxml_5etree__ProcessingInstruction.__pyx_base = *__pyx_vtabptr_4lxml_5etree___ContentOnlyElement;
   __pyx_type_4lxml_5etree__ProcessingInstruction.tp_base = __pyx_ptype_4lxml_5etree___ContentOnlyElement;
@@ -188172,6 +188700,221 @@ PyMODINIT_FUNC PyInit_etree(void)
   if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ProcessingInstruction.tp_dict, __pyx_vtabptr_4lxml_5etree__ProcessingInstruction) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__Pyx_SetAttrString(__pyx_m, "_ProcessingInstruction", (PyObject *)&__pyx_type_4lxml_5etree__ProcessingInstruction) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1586; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree__ProcessingInstruction = &__pyx_type_4lxml_5etree__ProcessingInstruction;
+  __pyx_vtabptr_4lxml_5etree__Entity = &__pyx_vtable_4lxml_5etree__Entity;
+  __pyx_vtable_4lxml_5etree__Entity.__pyx_base = *__pyx_vtabptr_4lxml_5etree___ContentOnlyElement;
+  __pyx_type_4lxml_5etree__Entity.tp_base = __pyx_ptype_4lxml_5etree___ContentOnlyElement;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__Entity) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__Entity.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__Entity.tp_dict, __pyx_vtabptr_4lxml_5etree__Entity) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_Entity", (PyObject *)&__pyx_type_4lxml_5etree__Entity) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__Entity = &__pyx_type_4lxml_5etree__Entity;
+  __pyx_vtabptr_4lxml_5etree__ElementTree = &__pyx_vtable_4lxml_5etree__ElementTree;
+  __pyx_vtable_4lxml_5etree__ElementTree._assertHasRoot = (int (*)(struct LxmlElementTree *))__pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot;
+  if (PyType_Ready(&LxmlElementTreeType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  LxmlElementTreeType.tp_print = 0;
+  if (__Pyx_SetVtable(LxmlElementTreeType.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementTree) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_ElementTree", (PyObject *)&LxmlElementTreeType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ElementTree = &LxmlElementTreeType;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__Attrib) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__Attrib.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "_Attrib", (PyObject *)&__pyx_type_4lxml_5etree__Attrib) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__Attrib = &__pyx_type_4lxml_5etree__Attrib;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__AttribIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__AttribIterator.tp_print = 0;
+  __pyx_ptype_4lxml_5etree__AttribIterator = &__pyx_type_4lxml_5etree__AttribIterator;
+  __pyx_vtabptr_4lxml_5etree__ElementTagMatcher = &__pyx_vtable_4lxml_5etree__ElementTagMatcher;
+  __pyx_vtable_4lxml_5etree__ElementTagMatcher._initTagMatch = (PyObject *(*)(struct LxmlElementTagMatcher *, PyObject *))__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch;
+  if (PyType_Ready(&LxmlElementTagMatcherType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  LxmlElementTagMatcherType.tp_print = 0;
+  if (__Pyx_SetVtable(LxmlElementTagMatcherType.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementTagMatcher) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_ElementTagMatcher", (PyObject *)&LxmlElementTagMatcherType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ElementTagMatcher = &LxmlElementTagMatcherType;
+  __pyx_vtabptr_4lxml_5etree__ElementIterator = &__pyx_vtable_4lxml_5etree__ElementIterator;
+  __pyx_vtable_4lxml_5etree__ElementIterator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementTagMatcher;
+  __pyx_vtable_4lxml_5etree__ElementIterator._storeNext = (void (*)(struct LxmlElementIterator *, struct LxmlElement *))__pyx_f_4lxml_5etree_16_ElementIterator__storeNext;
+  LxmlElementIteratorType.tp_base = __pyx_ptype_4lxml_5etree__ElementTagMatcher;
+  if (PyType_Ready(&LxmlElementIteratorType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  LxmlElementIteratorType.tp_print = 0;
+  if (__Pyx_SetVtable(LxmlElementIteratorType.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_ElementIterator", (PyObject *)&LxmlElementIteratorType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ElementIterator = &LxmlElementIteratorType;
+  __pyx_vtabptr_4lxml_5etree__MultiTagMatcher = &__pyx_vtable_4lxml_5etree__MultiTagMatcher;
+  __pyx_vtable_4lxml_5etree__MultiTagMatcher.rejectsAll = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAll;
+  __pyx_vtable_4lxml_5etree__MultiTagMatcher.rejectsAllAttributes = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAllAttributes;
+  __pyx_vtable_4lxml_5etree__MultiTagMatcher.matchesType = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, int))__pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesType;
+  __pyx_vtable_4lxml_5etree__MultiTagMatcher._clear = (void (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *))__pyx_f_4lxml_5etree_16_MultiTagMatcher__clear;
+  __pyx_vtable_4lxml_5etree__MultiTagMatcher.initTagMatch = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, PyObject *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch;
+  __pyx_vtable_4lxml_5etree__MultiTagMatcher._storeTags = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags;
+  __pyx_vtable_4lxml_5etree__MultiTagMatcher.cacheTags = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, struct LxmlDocument *, struct __pyx_opt_args_4lxml_5etree_16_MultiTagMatcher_cacheTags *__pyx_optional_args))__pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags;
+  __pyx_vtable_4lxml_5etree__MultiTagMatcher.matches = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlNode *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_matches;
+  __pyx_vtable_4lxml_5etree__MultiTagMatcher.matchesNsTag = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, const xmlChar *, const xmlChar *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag;
+  __pyx_vtable_4lxml_5etree__MultiTagMatcher.matchesAttribute = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlAttr *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesAttribute;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__MultiTagMatcher) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__MultiTagMatcher.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__MultiTagMatcher.tp_dict, __pyx_vtabptr_4lxml_5etree__MultiTagMatcher) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__MultiTagMatcher = &__pyx_type_4lxml_5etree__MultiTagMatcher;
+  __pyx_vtabptr_4lxml_5etree__ElementMatchIterator = &__pyx_vtable_4lxml_5etree__ElementMatchIterator;
+  __pyx_vtable_4lxml_5etree__ElementMatchIterator._initTagMatcher = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, PyObject *))__pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher;
+  __pyx_vtable_4lxml_5etree__ElementMatchIterator._storeNext = (int (*)(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, struct LxmlElement *))__pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ElementMatchIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ElementMatchIterator.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ElementMatchIterator.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementMatchIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_ElementMatchIterator", (PyObject *)&__pyx_type_4lxml_5etree__ElementMatchIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ElementMatchIterator = &__pyx_type_4lxml_5etree__ElementMatchIterator;
+  __pyx_vtabptr_4lxml_5etree_ElementChildIterator = &__pyx_vtable_4lxml_5etree_ElementChildIterator;
+  __pyx_vtable_4lxml_5etree_ElementChildIterator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementMatchIterator;
+  __pyx_type_4lxml_5etree_ElementChildIterator.tp_base = __pyx_ptype_4lxml_5etree__ElementMatchIterator;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementChildIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_ElementChildIterator.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ElementChildIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_ElementChildIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "ElementChildIterator", (PyObject *)&__pyx_type_4lxml_5etree_ElementChildIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_ElementChildIterator = &__pyx_type_4lxml_5etree_ElementChildIterator;
+  __pyx_vtabptr_4lxml_5etree_SiblingsIterator = &__pyx_vtable_4lxml_5etree_SiblingsIterator;
+  __pyx_vtable_4lxml_5etree_SiblingsIterator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementMatchIterator;
+  __pyx_type_4lxml_5etree_SiblingsIterator.tp_base = __pyx_ptype_4lxml_5etree__ElementMatchIterator;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_SiblingsIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_SiblingsIterator.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_SiblingsIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_SiblingsIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "SiblingsIterator", (PyObject *)&__pyx_type_4lxml_5etree_SiblingsIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_SiblingsIterator = &__pyx_type_4lxml_5etree_SiblingsIterator;
+  __pyx_vtabptr_4lxml_5etree_AncestorsIterator = &__pyx_vtable_4lxml_5etree_AncestorsIterator;
+  __pyx_vtable_4lxml_5etree_AncestorsIterator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementMatchIterator;
+  __pyx_type_4lxml_5etree_AncestorsIterator.tp_base = __pyx_ptype_4lxml_5etree__ElementMatchIterator;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_AncestorsIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_AncestorsIterator.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_AncestorsIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_AncestorsIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "AncestorsIterator", (PyObject *)&__pyx_type_4lxml_5etree_AncestorsIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_AncestorsIterator = &__pyx_type_4lxml_5etree_AncestorsIterator;
+  __pyx_vtabptr_4lxml_5etree_ElementDepthFirstIterator = &__pyx_vtable_4lxml_5etree_ElementDepthFirstIterator;
+  __pyx_vtable_4lxml_5etree_ElementDepthFirstIterator._nextNodeAnyTag = (xmlNode *(*)(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *))__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag;
+  __pyx_vtable_4lxml_5etree_ElementDepthFirstIterator._nextNodeMatchTag = (xmlNode *(*)(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *))__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeMatchTag;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementDepthFirstIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_ElementDepthFirstIterator.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ElementDepthFirstIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_ElementDepthFirstIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "ElementDepthFirstIterator", (PyObject *)&__pyx_type_4lxml_5etree_ElementDepthFirstIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_ElementDepthFirstIterator = &__pyx_type_4lxml_5etree_ElementDepthFirstIterator;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementTextIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2744; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_ElementTextIterator.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "ElementTextIterator", (PyObject *)&__pyx_type_4lxml_5etree_ElementTextIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2744; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_ElementTextIterator = &__pyx_type_4lxml_5etree_ElementTextIterator;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_CDATA) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2856; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_CDATA.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "CDATA", (PyObject *)&__pyx_type_4lxml_5etree_CDATA) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2856; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_CDATA = &__pyx_type_4lxml_5etree_CDATA;
+  __pyx_vtabptr_4lxml_5etree__ReadOnlyProxy = &__pyx_vtable_4lxml_5etree__ReadOnlyProxy;
+  __pyx_vtable_4lxml_5etree__ReadOnlyProxy._assertNode = (int (*)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *))__pyx_f_4lxml_5etree_14_ReadOnlyProxy__assertNode;
+  __pyx_vtable_4lxml_5etree__ReadOnlyProxy._raise_unsupported_type = (int (*)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *))__pyx_f_4lxml_5etree_14_ReadOnlyProxy__raise_unsupported_type;
+  __pyx_vtable_4lxml_5etree__ReadOnlyProxy.free_after_use = (void (*)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *))__pyx_f_4lxml_5etree_14_ReadOnlyProxy_free_after_use;
+  __pyx_vtable_4lxml_5etree__ReadOnlyProxy.__pyx___copy__ = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_14_ReadOnlyProxy___copy__;
+  __pyx_vtable_4lxml_5etree__ReadOnlyProxy.getchildren = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_14_ReadOnlyProxy_getchildren;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ReadOnlyProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ReadOnlyProxy.tp_print = 0;
+  #if CYTHON_COMPILING_IN_CPYTHON
+  {
+    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree__ReadOnlyProxy, "__getitem__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
+      __pyx_wrapperbase_4lxml_5etree_14_ReadOnlyProxy_4__getitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
+      __pyx_wrapperbase_4lxml_5etree_14_ReadOnlyProxy_4__getitem__.doc = __pyx_doc_4lxml_5etree_14_ReadOnlyProxy_4__getitem__;
+      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_14_ReadOnlyProxy_4__getitem__;
+    }
+  }
+  #endif
+  #if CYTHON_COMPILING_IN_CPYTHON
+  {
+    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree__ReadOnlyProxy, "__len__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
+      __pyx_wrapperbase_4lxml_5etree_14_ReadOnlyProxy_6__len__ = *((PyWrapperDescrObject *)wrapper)->d_base;
+      __pyx_wrapperbase_4lxml_5etree_14_ReadOnlyProxy_6__len__.doc = __pyx_doc_4lxml_5etree_14_ReadOnlyProxy_6__len__;
+      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_14_ReadOnlyProxy_6__len__;
+    }
+  }
+  #endif
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ReadOnlyProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ReadOnlyProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ReadOnlyProxy = &__pyx_type_4lxml_5etree__ReadOnlyProxy;
+  __pyx_vtabptr_4lxml_5etree__ReadOnlyPIProxy = &__pyx_vtable_4lxml_5etree__ReadOnlyPIProxy;
+  __pyx_vtable_4lxml_5etree__ReadOnlyPIProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ReadOnlyProxy;
+  __pyx_type_4lxml_5etree__ReadOnlyPIProxy.tp_base = __pyx_ptype_4lxml_5etree__ReadOnlyProxy;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ReadOnlyPIProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ReadOnlyPIProxy.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ReadOnlyPIProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ReadOnlyPIProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ReadOnlyPIProxy = &__pyx_type_4lxml_5etree__ReadOnlyPIProxy;
+  __pyx_vtabptr_4lxml_5etree__ReadOnlyEntityProxy = &__pyx_vtable_4lxml_5etree__ReadOnlyEntityProxy;
+  __pyx_vtable_4lxml_5etree__ReadOnlyEntityProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ReadOnlyProxy;
+  __pyx_type_4lxml_5etree__ReadOnlyEntityProxy.tp_base = __pyx_ptype_4lxml_5etree__ReadOnlyProxy;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ReadOnlyEntityProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ReadOnlyEntityProxy.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ReadOnlyEntityProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ReadOnlyEntityProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ReadOnlyEntityProxy = &__pyx_type_4lxml_5etree__ReadOnlyEntityProxy;
+  __pyx_vtabptr_4lxml_5etree__ReadOnlyElementProxy = &__pyx_vtable_4lxml_5etree__ReadOnlyElementProxy;
+  __pyx_vtable_4lxml_5etree__ReadOnlyElementProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ReadOnlyProxy;
+  __pyx_type_4lxml_5etree__ReadOnlyElementProxy.tp_base = __pyx_ptype_4lxml_5etree__ReadOnlyProxy;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ReadOnlyElementProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ReadOnlyElementProxy.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ReadOnlyElementProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ReadOnlyElementProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ReadOnlyElementProxy = &__pyx_type_4lxml_5etree__ReadOnlyElementProxy;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__OpaqueNodeWrapper) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__OpaqueNodeWrapper.tp_print = 0;
+  __pyx_ptype_4lxml_5etree__OpaqueNodeWrapper = &__pyx_type_4lxml_5etree__OpaqueNodeWrapper;
+  __pyx_vtabptr_4lxml_5etree__OpaqueDocumentWrapper = &__pyx_vtable_4lxml_5etree__OpaqueDocumentWrapper;
+  __pyx_vtable_4lxml_5etree__OpaqueDocumentWrapper._assertNode = (int (*)(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *))__pyx_f_4lxml_5etree_22_OpaqueDocumentWrapper__assertNode;
+  __pyx_vtable_4lxml_5etree__OpaqueDocumentWrapper.append = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_22_OpaqueDocumentWrapper_append;
+  __pyx_type_4lxml_5etree__OpaqueDocumentWrapper.tp_base = __pyx_ptype_4lxml_5etree__OpaqueNodeWrapper;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__OpaqueDocumentWrapper) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__OpaqueDocumentWrapper.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__OpaqueDocumentWrapper.tp_dict, __pyx_vtabptr_4lxml_5etree__OpaqueDocumentWrapper) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__OpaqueDocumentWrapper = &__pyx_type_4lxml_5etree__OpaqueDocumentWrapper;
+  __pyx_vtabptr_4lxml_5etree__ModifyContentOnlyProxy = &__pyx_vtable_4lxml_5etree__ModifyContentOnlyProxy;
+  __pyx_vtable_4lxml_5etree__ModifyContentOnlyProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ReadOnlyProxy;
+  __pyx_type_4lxml_5etree__ModifyContentOnlyProxy.tp_base = __pyx_ptype_4lxml_5etree__ReadOnlyProxy;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ModifyContentOnlyProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ModifyContentOnlyProxy.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ModifyContentOnlyProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ModifyContentOnlyProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ModifyContentOnlyProxy = &__pyx_type_4lxml_5etree__ModifyContentOnlyProxy;
+  __pyx_vtabptr_4lxml_5etree__ModifyContentOnlyPIProxy = &__pyx_vtable_4lxml_5etree__ModifyContentOnlyPIProxy;
+  __pyx_vtable_4lxml_5etree__ModifyContentOnlyPIProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyProxy;
+  __pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy.tp_base = __pyx_ptype_4lxml_5etree__ModifyContentOnlyProxy;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ModifyContentOnlyPIProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ModifyContentOnlyPIProxy = &__pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy;
+  __pyx_vtabptr_4lxml_5etree__ModifyContentOnlyEntityProxy = &__pyx_vtable_4lxml_5etree__ModifyContentOnlyEntityProxy;
+  __pyx_vtable_4lxml_5etree__ModifyContentOnlyEntityProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyProxy;
+  __pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy.tp_base = __pyx_ptype_4lxml_5etree__ModifyContentOnlyProxy;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ModifyContentOnlyEntityProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ModifyContentOnlyEntityProxy = &__pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy;
+  __pyx_vtabptr_4lxml_5etree__AppendOnlyElementProxy = &__pyx_vtable_4lxml_5etree__AppendOnlyElementProxy;
+  __pyx_vtable_4lxml_5etree__AppendOnlyElementProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ReadOnlyElementProxy;
+  __pyx_vtable_4lxml_5etree__AppendOnlyElementProxy.append = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_23_AppendOnlyElementProxy_append;
+  __pyx_type_4lxml_5etree__AppendOnlyElementProxy.tp_base = __pyx_ptype_4lxml_5etree__ReadOnlyElementProxy;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__AppendOnlyElementProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__AppendOnlyElementProxy.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__AppendOnlyElementProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__AppendOnlyElementProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__AppendOnlyElementProxy = &__pyx_type_4lxml_5etree__AppendOnlyElementProxy;
+  LxmlElementBaseType.tp_base = __pyx_ptype_4lxml_5etree__Element;
+  if (PyType_Ready(&LxmlElementBaseType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  LxmlElementBaseType.tp_print = 0;
+  #if CYTHON_COMPILING_IN_CPYTHON
+  {
+    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&LxmlElementBaseType, "__init__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
+      __pyx_wrapperbase_4lxml_5etree_11ElementBase___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
+      __pyx_wrapperbase_4lxml_5etree_11ElementBase___init__.doc = __pyx_doc_4lxml_5etree_11ElementBase___init__;
+      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_11ElementBase___init__;
+    }
+  }
+  #endif
+  if (__Pyx_SetAttrString(__pyx_m, "ElementBase", (PyObject *)&LxmlElementBaseType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_ElementBase = &LxmlElementBaseType;
+  __pyx_vtabptr_4lxml_5etree_CommentBase = &__pyx_vtable_4lxml_5etree_CommentBase;
+  __pyx_vtable_4lxml_5etree_CommentBase.__pyx_base = *__pyx_vtabptr_4lxml_5etree__Comment;
+  __pyx_type_4lxml_5etree_CommentBase.tp_base = __pyx_ptype_4lxml_5etree__Comment;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_CommentBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_CommentBase.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_CommentBase.tp_dict, __pyx_vtabptr_4lxml_5etree_CommentBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "CommentBase", (PyObject *)&__pyx_type_4lxml_5etree_CommentBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_CommentBase = &__pyx_type_4lxml_5etree_CommentBase;
   __pyx_vtabptr_4lxml_5etree_PIBase = &__pyx_vtable_4lxml_5etree_PIBase;
   __pyx_vtable_4lxml_5etree_PIBase.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ProcessingInstruction;
   __pyx_type_4lxml_5etree_PIBase.tp_base = __pyx_ptype_4lxml_5etree__ProcessingInstruction;
@@ -188180,25 +188923,63 @@ PyMODINIT_FUNC PyInit_etree(void)
   if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_PIBase.tp_dict, __pyx_vtabptr_4lxml_5etree_PIBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__Pyx_SetAttrString(__pyx_m, "PIBase", (PyObject *)&__pyx_type_4lxml_5etree_PIBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree_PIBase = &__pyx_type_4lxml_5etree_PIBase;
-  __pyx_vtabptr_4lxml_5etree__XSLTProcessingInstruction = &__pyx_vtable_4lxml_5etree__XSLTProcessingInstruction;
-  __pyx_vtable_4lxml_5etree__XSLTProcessingInstruction.__pyx_base = *__pyx_vtabptr_4lxml_5etree_PIBase;
-  __pyx_type_4lxml_5etree__XSLTProcessingInstruction.tp_base = __pyx_ptype_4lxml_5etree_PIBase;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__XSLTProcessingInstruction) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__XSLTProcessingInstruction.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XSLTProcessingInstruction.tp_dict, __pyx_vtabptr_4lxml_5etree__XSLTProcessingInstruction) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_XSLTProcessingInstruction", (PyObject *)&__pyx_type_4lxml_5etree__XSLTProcessingInstruction) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__XSLTProcessingInstruction = &__pyx_type_4lxml_5etree__XSLTProcessingInstruction;
-  __pyx_vtabptr_4lxml_5etree_XMLPullParser = &__pyx_vtable_4lxml_5etree_XMLPullParser;
-  __pyx_vtable_4lxml_5etree_XMLPullParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree_XMLParser;
-  __pyx_type_4lxml_5etree_XMLPullParser.tp_base = __pyx_ptype_4lxml_5etree_XMLParser;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_XMLPullParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_XMLPullParser.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XMLPullParser.tp_dict, __pyx_vtabptr_4lxml_5etree_XMLPullParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "XMLPullParser", (PyObject *)&__pyx_type_4lxml_5etree_XMLPullParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_XMLPullParser = &__pyx_type_4lxml_5etree_XMLPullParser;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct__itervalues) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree___pyx_scope_struct__itervalues.tp_print = 0;
-  __pyx_ptype_4lxml_5etree___pyx_scope_struct__itervalues = &__pyx_type_4lxml_5etree___pyx_scope_struct__itervalues;
+  __pyx_vtabptr_4lxml_5etree_EntityBase = &__pyx_vtable_4lxml_5etree_EntityBase;
+  __pyx_vtable_4lxml_5etree_EntityBase.__pyx_base = *__pyx_vtabptr_4lxml_5etree__Entity;
+  __pyx_type_4lxml_5etree_EntityBase.tp_base = __pyx_ptype_4lxml_5etree__Entity;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_EntityBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_EntityBase.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_EntityBase.tp_dict, __pyx_vtabptr_4lxml_5etree_EntityBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "EntityBase", (PyObject *)&__pyx_type_4lxml_5etree_EntityBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_EntityBase = &__pyx_type_4lxml_5etree_EntityBase;
+  if (PyType_Ready(&LxmlElementClassLookupType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  LxmlElementClassLookupType.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "ElementClassLookup", (PyObject *)&LxmlElementClassLookupType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_ElementClassLookup = &LxmlElementClassLookupType;
+  __pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup = &__pyx_vtable_4lxml_5etree_FallbackElementClassLookup;
+  __pyx_vtable_4lxml_5etree_FallbackElementClassLookup._setFallback = (void (*)(struct LxmlFallbackElementClassLookup *, struct LxmlElementClassLookup *))__pyx_f_4lxml_5etree_26FallbackElementClassLookup__setFallback;
+  LxmlFallbackElementClassLookupType.tp_base = __pyx_ptype_4lxml_5etree_ElementClassLookup;
+  if (PyType_Ready(&LxmlFallbackElementClassLookupType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  LxmlFallbackElementClassLookupType.tp_print = 0;
+  if (__Pyx_SetVtable(LxmlFallbackElementClassLookupType.tp_dict, __pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "FallbackElementClassLookup", (PyObject *)&LxmlFallbackElementClassLookupType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_FallbackElementClassLookup = &LxmlFallbackElementClassLookupType;
+  __pyx_type_4lxml_5etree_ElementDefaultClassLookup.tp_base = __pyx_ptype_4lxml_5etree_ElementClassLookup;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementDefaultClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_ElementDefaultClassLookup.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "ElementDefaultClassLookup", (PyObject *)&__pyx_type_4lxml_5etree_ElementDefaultClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_ElementDefaultClassLookup = &__pyx_type_4lxml_5etree_ElementDefaultClassLookup;
+  __pyx_vtabptr_4lxml_5etree_AttributeBasedElementClassLookup = &__pyx_vtable_4lxml_5etree_AttributeBasedElementClassLookup;
+  __pyx_vtable_4lxml_5etree_AttributeBasedElementClassLookup.__pyx_base = *__pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
+  __pyx_type_4lxml_5etree_AttributeBasedElementClassLookup.tp_base = __pyx_ptype_4lxml_5etree_FallbackElementClassLookup;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_AttributeBasedElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_AttributeBasedElementClassLookup.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_AttributeBasedElementClassLookup.tp_dict, __pyx_vtabptr_4lxml_5etree_AttributeBasedElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "AttributeBasedElementClassLookup", (PyObject *)&__pyx_type_4lxml_5etree_AttributeBasedElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_AttributeBasedElementClassLookup = &__pyx_type_4lxml_5etree_AttributeBasedElementClassLookup;
+  __pyx_vtabptr_4lxml_5etree_ParserBasedElementClassLookup = &__pyx_vtable_4lxml_5etree_ParserBasedElementClassLookup;
+  __pyx_vtable_4lxml_5etree_ParserBasedElementClassLookup.__pyx_base = *__pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
+  __pyx_type_4lxml_5etree_ParserBasedElementClassLookup.tp_base = __pyx_ptype_4lxml_5etree_FallbackElementClassLookup;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_ParserBasedElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_ParserBasedElementClassLookup.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ParserBasedElementClassLookup.tp_dict, __pyx_vtabptr_4lxml_5etree_ParserBasedElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "ParserBasedElementClassLookup", (PyObject *)&__pyx_type_4lxml_5etree_ParserBasedElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_ParserBasedElementClassLookup = &__pyx_type_4lxml_5etree_ParserBasedElementClassLookup;
+  __pyx_vtabptr_4lxml_5etree_CustomElementClassLookup = &__pyx_vtable_4lxml_5etree_CustomElementClassLookup;
+  __pyx_vtable_4lxml_5etree_CustomElementClassLookup.__pyx_base = *__pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
+  __pyx_type_4lxml_5etree_CustomElementClassLookup.tp_base = __pyx_ptype_4lxml_5etree_FallbackElementClassLookup;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_CustomElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_CustomElementClassLookup.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_CustomElementClassLookup.tp_dict, __pyx_vtabptr_4lxml_5etree_CustomElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "CustomElementClassLookup", (PyObject *)&__pyx_type_4lxml_5etree_CustomElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_CustomElementClassLookup = &__pyx_type_4lxml_5etree_CustomElementClassLookup;
+  __pyx_vtabptr_4lxml_5etree_PythonElementClassLookup = &__pyx_vtable_4lxml_5etree_PythonElementClassLookup;
+  __pyx_vtable_4lxml_5etree_PythonElementClassLookup.__pyx_base = *__pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
+  __pyx_type_4lxml_5etree_PythonElementClassLookup.tp_base = __pyx_ptype_4lxml_5etree_FallbackElementClassLookup;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_PythonElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_PythonElementClassLookup.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_PythonElementClassLookup.tp_dict, __pyx_vtabptr_4lxml_5etree_PythonElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "PythonElementClassLookup", (PyObject *)&__pyx_type_4lxml_5etree_PythonElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_PythonElementClassLookup = &__pyx_type_4lxml_5etree_PythonElementClassLookup;
   __pyx_vtabptr_4lxml_5etree__NamespaceRegistry = &__pyx_vtable_4lxml_5etree__NamespaceRegistry;
   __pyx_vtable_4lxml_5etree__NamespaceRegistry._get = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__NamespaceRegistry *, PyObject *))__pyx_f_4lxml_5etree_18_NamespaceRegistry__get;
   __pyx_vtable_4lxml_5etree__NamespaceRegistry._getForString = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__NamespaceRegistry *, char *))__pyx_f_4lxml_5etree_18_NamespaceRegistry__getForString;
@@ -188206,6 +188987,21 @@ PyMODINIT_FUNC PyInit_etree(void)
   __pyx_type_4lxml_5etree__NamespaceRegistry.tp_print = 0;
   if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__NamespaceRegistry.tp_dict, __pyx_vtabptr_4lxml_5etree__NamespaceRegistry) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree__NamespaceRegistry = &__pyx_type_4lxml_5etree__NamespaceRegistry;
+  __pyx_vtabptr_4lxml_5etree__ClassNamespaceRegistry = &__pyx_vtable_4lxml_5etree__ClassNamespaceRegistry;
+  __pyx_vtable_4lxml_5etree__ClassNamespaceRegistry.__pyx_base = *__pyx_vtabptr_4lxml_5etree__NamespaceRegistry;
+  __pyx_type_4lxml_5etree__ClassNamespaceRegistry.tp_base = __pyx_ptype_4lxml_5etree__NamespaceRegistry;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ClassNamespaceRegistry) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ClassNamespaceRegistry.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ClassNamespaceRegistry.tp_dict, __pyx_vtabptr_4lxml_5etree__ClassNamespaceRegistry) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ClassNamespaceRegistry = &__pyx_type_4lxml_5etree__ClassNamespaceRegistry;
+  __pyx_vtabptr_4lxml_5etree_ElementNamespaceClassLookup = &__pyx_vtable_4lxml_5etree_ElementNamespaceClassLookup;
+  __pyx_vtable_4lxml_5etree_ElementNamespaceClassLookup.__pyx_base = *__pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
+  __pyx_type_4lxml_5etree_ElementNamespaceClassLookup.tp_base = __pyx_ptype_4lxml_5etree_FallbackElementClassLookup;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementNamespaceClassLookup) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_ElementNamespaceClassLookup.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ElementNamespaceClassLookup.tp_dict, __pyx_vtabptr_4lxml_5etree_ElementNamespaceClassLookup) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "ElementNamespaceClassLookup", (PyObject *)&__pyx_type_4lxml_5etree_ElementNamespaceClassLookup) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_ElementNamespaceClassLookup = &__pyx_type_4lxml_5etree_ElementNamespaceClassLookup;
   __pyx_vtabptr_4lxml_5etree__FunctionNamespaceRegistry = &__pyx_vtable_4lxml_5etree__FunctionNamespaceRegistry;
   __pyx_vtable_4lxml_5etree__FunctionNamespaceRegistry.__pyx_base = *__pyx_vtabptr_4lxml_5etree__NamespaceRegistry;
   __pyx_type_4lxml_5etree__FunctionNamespaceRegistry.tp_base = __pyx_ptype_4lxml_5etree__NamespaceRegistry;
@@ -188220,6 +189016,124 @@ PyMODINIT_FUNC PyInit_etree(void)
   __pyx_type_4lxml_5etree__XPathFunctionNamespaceRegistry.tp_print = 0;
   if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XPathFunctionNamespaceRegistry.tp_dict, __pyx_vtabptr_4lxml_5etree__XPathFunctionNamespaceRegistry) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree__XPathFunctionNamespaceRegistry = &__pyx_type_4lxml_5etree__XPathFunctionNamespaceRegistry;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__InputDocument) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__InputDocument.tp_print = 0;
+  __pyx_ptype_4lxml_5etree__InputDocument = &__pyx_type_4lxml_5etree__InputDocument;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_Resolver) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_Resolver.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "Resolver", (PyObject *)&__pyx_type_4lxml_5etree_Resolver) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_Resolver = &__pyx_type_4lxml_5etree_Resolver;
+  __pyx_vtabptr_4lxml_5etree__ResolverRegistry = &__pyx_vtable_4lxml_5etree__ResolverRegistry;
+  __pyx_vtable_4lxml_5etree__ResolverRegistry._copy = (struct __pyx_obj_4lxml_5etree__ResolverRegistry *(*)(struct __pyx_obj_4lxml_5etree__ResolverRegistry *))__pyx_f_4lxml_5etree_17_ResolverRegistry__copy;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ResolverRegistry) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ResolverRegistry.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ResolverRegistry.tp_dict, __pyx_vtabptr_4lxml_5etree__ResolverRegistry) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ResolverRegistry = &__pyx_type_4lxml_5etree__ResolverRegistry;
+  __pyx_vtabptr_4lxml_5etree__ResolverContext = &__pyx_vtable_4lxml_5etree__ResolverContext;
+  __pyx_vtable_4lxml_5etree__ResolverContext.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ExceptionContext;
+  __pyx_vtable_4lxml_5etree__ResolverContext.__pyx_base.clear = (void (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *))__pyx_f_4lxml_5etree_16_ResolverContext_clear;
+  __pyx_type_4lxml_5etree__ResolverContext.tp_base = __pyx_ptype_4lxml_5etree__ExceptionContext;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ResolverContext) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ResolverContext.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ResolverContext.tp_dict, __pyx_vtabptr_4lxml_5etree__ResolverContext) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ResolverContext = &__pyx_type_4lxml_5etree__ResolverContext;
+  __pyx_vtabptr_4lxml_5etree__ParserContext = &__pyx_vtable_4lxml_5etree__ParserContext;
+  __pyx_vtable_4lxml_5etree__ParserContext.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ResolverContext;
+  __pyx_vtable_4lxml_5etree__ParserContext._copy = (struct __pyx_obj_4lxml_5etree__ParserContext *(*)(struct __pyx_obj_4lxml_5etree__ParserContext *))__pyx_f_4lxml_5etree_14_ParserContext__copy;
+  __pyx_vtable_4lxml_5etree__ParserContext._initParserContext = (void (*)(struct __pyx_obj_4lxml_5etree__ParserContext *, xmlParserCtxt *))__pyx_f_4lxml_5etree_14_ParserContext__initParserContext;
+  __pyx_vtable_4lxml_5etree__ParserContext._resetParserContext = (void (*)(struct __pyx_obj_4lxml_5etree__ParserContext *))__pyx_f_4lxml_5etree_14_ParserContext__resetParserContext;
+  __pyx_vtable_4lxml_5etree__ParserContext.prepare = (int (*)(struct __pyx_obj_4lxml_5etree__ParserContext *))__pyx_f_4lxml_5etree_14_ParserContext_prepare;
+  __pyx_vtable_4lxml_5etree__ParserContext.cleanup = (int (*)(struct __pyx_obj_4lxml_5etree__ParserContext *))__pyx_f_4lxml_5etree_14_ParserContext_cleanup;
+  __pyx_vtable_4lxml_5etree__ParserContext._handleParseResult = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ParserContext *, struct __pyx_obj_4lxml_5etree__BaseParser *, xmlDoc *, PyObject *))__pyx_f_4lxml_5etree_14_ParserContext__handleParseResult;
+  __pyx_vtable_4lxml_5etree__ParserContext._handleParseResultDoc = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__ParserContext *, struct __pyx_obj_4lxml_5etree__BaseParser *, xmlDoc *, PyObject *))__pyx_f_4lxml_5etree_14_ParserContext__handleParseResultDoc;
+  __pyx_type_4lxml_5etree__ParserContext.tp_base = __pyx_ptype_4lxml_5etree__ResolverContext;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ParserContext) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ParserContext.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ParserContext.tp_dict, __pyx_vtabptr_4lxml_5etree__ParserContext) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ParserContext = &__pyx_type_4lxml_5etree__ParserContext;
+  __pyx_vtabptr_4lxml_5etree__SaxParserContext = &__pyx_vtable_4lxml_5etree__SaxParserContext;
+  __pyx_vtable_4lxml_5etree__SaxParserContext.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ParserContext;
+  __pyx_vtable_4lxml_5etree__SaxParserContext.__pyx_base._initParserContext = (void (*)(struct __pyx_obj_4lxml_5etree__ParserContext *, xmlParserCtxt *))__pyx_f_4lxml_5etree_17_SaxParserContext__initParserContext;
+  __pyx_vtable_4lxml_5etree__SaxParserContext._setSaxParserTarget = (void (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, struct __pyx_obj_4lxml_5etree__SaxParserTarget *))__pyx_f_4lxml_5etree_17_SaxParserContext__setSaxParserTarget;
+  __pyx_vtable_4lxml_5etree__SaxParserContext._connectTarget = (void (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, xmlParserCtxt *))__pyx_f_4lxml_5etree_17_SaxParserContext__connectTarget;
+  __pyx_vtable_4lxml_5etree__SaxParserContext._connectEvents = (void (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, xmlParserCtxt *))__pyx_f_4lxml_5etree_17_SaxParserContext__connectEvents;
+  __pyx_vtable_4lxml_5etree__SaxParserContext._setEventFilter = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_17_SaxParserContext__setEventFilter;
+  __pyx_vtable_4lxml_5etree__SaxParserContext.startDocument = (int (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, xmlDoc *))__pyx_f_4lxml_5etree_17_SaxParserContext_startDocument;
+  __pyx_vtable_4lxml_5etree__SaxParserContext.pushEvent = (int (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, PyObject *, xmlNode *))__pyx_f_4lxml_5etree_17_SaxParserContext_pushEvent;
+  __pyx_vtable_4lxml_5etree__SaxParserContext.flushEvents = (int (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *))__pyx_f_4lxml_5etree_17_SaxParserContext_flushEvents;
+  __pyx_vtable_4lxml_5etree__SaxParserContext._handleSaxException = (void (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, xmlParserCtxt *))__pyx_f_4lxml_5etree_17_SaxParserContext__handleSaxException;
+  __pyx_type_4lxml_5etree__SaxParserContext.tp_base = __pyx_ptype_4lxml_5etree__ParserContext;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__SaxParserContext) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__SaxParserContext.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__SaxParserContext.tp_dict, __pyx_vtabptr_4lxml_5etree__SaxParserContext) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__SaxParserContext = &__pyx_type_4lxml_5etree__SaxParserContext;
+  __pyx_vtabptr_4lxml_5etree__TargetParserContext = &__pyx_vtable_4lxml_5etree__TargetParserContext;
+  __pyx_vtable_4lxml_5etree__TargetParserContext.__pyx_base = *__pyx_vtabptr_4lxml_5etree__SaxParserContext;
+  __pyx_vtable_4lxml_5etree__TargetParserContext.__pyx_base.__pyx_base._copy = (struct __pyx_obj_4lxml_5etree__ParserContext *(*)(struct __pyx_obj_4lxml_5etree__ParserContext *))__pyx_f_4lxml_5etree_20_TargetParserContext__copy;
+  __pyx_vtable_4lxml_5etree__TargetParserContext.__pyx_base.__pyx_base._handleParseResult = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ParserContext *, struct __pyx_obj_4lxml_5etree__BaseParser *, xmlDoc *, PyObject *))__pyx_f_4lxml_5etree_20_TargetParserContext__handleParseResult;
+  __pyx_vtable_4lxml_5etree__TargetParserContext.__pyx_base.__pyx_base._handleParseResultDoc = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__ParserContext *, struct __pyx_obj_4lxml_5etree__BaseParser *, xmlDoc *, PyObject *))__pyx_f_4lxml_5etree_20_TargetParserContext__handleParseResultDoc;
+  __pyx_vtable_4lxml_5etree__TargetParserContext._setTarget = (int (*)(struct __pyx_obj_4lxml_5etree__TargetParserContext *, PyObject *))__pyx_f_4lxml_5etree_20_TargetParserContext__setTarget;
+  __pyx_vtable_4lxml_5etree__TargetParserContext._cleanupTargetParserContext = (void (*)(struct __pyx_obj_4lxml_5etree__TargetParserContext *, xmlDoc *))__pyx_f_4lxml_5etree_20_TargetParserContext__cleanupTargetParserContext;
+  __pyx_type_4lxml_5etree__TargetParserContext.tp_base = __pyx_ptype_4lxml_5etree__SaxParserContext;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__TargetParserContext) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__TargetParserContext.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__TargetParserContext.tp_dict, __pyx_vtabptr_4lxml_5etree__TargetParserContext) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__TargetParserContext = &__pyx_type_4lxml_5etree__TargetParserContext;
+  __pyx_vtabptr_4lxml_5etree__ParserSchemaValidationContext = &__pyx_vtable_4lxml_5etree__ParserSchemaValidationContext;
+  __pyx_vtable_4lxml_5etree__ParserSchemaValidationContext.copy = (struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *(*)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *))__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_copy;
+  __pyx_vtable_4lxml_5etree__ParserSchemaValidationContext.inject_default_attributes = (void (*)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *, xmlDoc *))__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_inject_default_attributes;
+  __pyx_vtable_4lxml_5etree__ParserSchemaValidationContext.connect = (int (*)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *, xmlParserCtxt *, struct __pyx_obj_4lxml_5etree__BaseErrorLog *))__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_connect;
+  __pyx_vtable_4lxml_5etree__ParserSchemaValidationContext.disconnect = (void (*)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *))__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_disconnect;
+  __pyx_vtable_4lxml_5etree__ParserSchemaValidationContext.isvalid = (int (*)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *))__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_isvalid;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ParserSchemaValidationContext) < 0) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ParserSchemaValidationContext.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ParserSchemaValidationContext.tp_dict, __pyx_vtabptr_4lxml_5etree__ParserSchemaValidationContext) < 0) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ParserSchemaValidationContext = &__pyx_type_4lxml_5etree__ParserSchemaValidationContext;
+  __pyx_vtabptr_4lxml_5etree__Validator = &__pyx_vtable_4lxml_5etree__Validator;
+  __pyx_vtable_4lxml_5etree__Validator._append_log_message = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__Validator *, int, int, int, int, PyObject *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_10_Validator__append_log_message;
+  __pyx_vtable_4lxml_5etree__Validator._clear_error_log = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__Validator *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_10_Validator__clear_error_log;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__Validator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__Validator.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__Validator.tp_dict, __pyx_vtabptr_4lxml_5etree__Validator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_Validator", (PyObject *)&__pyx_type_4lxml_5etree__Validator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__Validator = &__pyx_type_4lxml_5etree__Validator;
+  __pyx_vtabptr_4lxml_5etree_XMLSchema = &__pyx_vtable_4lxml_5etree_XMLSchema;
+  __pyx_vtable_4lxml_5etree_XMLSchema.__pyx_base = *__pyx_vtabptr_4lxml_5etree__Validator;
+  __pyx_vtable_4lxml_5etree_XMLSchema._newSaxValidator = (struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *(*)(struct __pyx_obj_4lxml_5etree_XMLSchema *, int))__pyx_f_4lxml_5etree_9XMLSchema__newSaxValidator;
+  __pyx_type_4lxml_5etree_XMLSchema.tp_base = __pyx_ptype_4lxml_5etree__Validator;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_XMLSchema) < 0) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_XMLSchema.tp_print = 0;
+  #if CYTHON_COMPILING_IN_CPYTHON
+  {
+    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_XMLSchema, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
+      __pyx_wrapperbase_4lxml_5etree_9XMLSchema_6__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
+      __pyx_wrapperbase_4lxml_5etree_9XMLSchema_6__call__.doc = __pyx_doc_4lxml_5etree_9XMLSchema_6__call__;
+      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_9XMLSchema_6__call__;
+    }
+  }
+  #endif
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XMLSchema.tp_dict, __pyx_vtabptr_4lxml_5etree_XMLSchema) < 0) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "XMLSchema", (PyObject *)&__pyx_type_4lxml_5etree_XMLSchema) < 0) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_XMLSchema = &__pyx_type_4lxml_5etree_XMLSchema;
+  __pyx_vtabptr_4lxml_5etree__ParserDictionaryContext = &__pyx_vtable_4lxml_5etree__ParserDictionaryContext;
+  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.initMainParserContext = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_initMainParserContext;
+  __pyx_vtable_4lxml_5etree__ParserDictionaryContext._findThreadParserContext = (struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *(*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext__findThreadParserContext;
+  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.setDefaultParser = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_setDefaultParser;
+  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.getDefaultParser = (struct __pyx_obj_4lxml_5etree__BaseParser *(*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser;
+  __pyx_vtable_4lxml_5etree__ParserDictionaryContext._getThreadDict = (xmlDict *(*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDict *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext__getThreadDict;
+  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.initThreadDictRef = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDict **))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_initThreadDictRef;
+  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.initParserDict = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlParserCtxt *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict;
+  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.initXPathParserDict = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlXPathContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_initXPathParserDict;
+  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.initDocDict = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDoc *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict;
+  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.findImpliedContext = (struct __pyx_obj_4lxml_5etree__ParserContext *(*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_findImpliedContext;
+  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.pushImpliedContextFromParser = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContextFromParser;
+  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.pushImpliedContext = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__ParserContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContext;
+  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.popImpliedContext = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_popImpliedContext;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ParserDictionaryContext) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ParserDictionaryContext.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ParserDictionaryContext.tp_dict, __pyx_vtabptr_4lxml_5etree__ParserDictionaryContext) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ParserDictionaryContext = &__pyx_type_4lxml_5etree__ParserDictionaryContext;
   __pyx_vtabptr_4lxml_5etree__FileReaderContext = &__pyx_vtable_4lxml_5etree__FileReaderContext;
   __pyx_vtable_4lxml_5etree__FileReaderContext._close_file = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__FileReaderContext *))__pyx_f_4lxml_5etree_18_FileReaderContext__close_file;
   __pyx_vtable_4lxml_5etree__FileReaderContext._createParserInputBuffer = (xmlParserInputBuffer *(*)(struct __pyx_obj_4lxml_5etree__FileReaderContext *))__pyx_f_4lxml_5etree_18_FileReaderContext__createParserInputBuffer;
@@ -188227,64 +189141,60 @@ PyMODINIT_FUNC PyInit_etree(void)
   __pyx_vtable_4lxml_5etree__FileReaderContext._readDtd = (xmlDtd *(*)(struct __pyx_obj_4lxml_5etree__FileReaderContext *))__pyx_f_4lxml_5etree_18_FileReaderContext__readDtd;
   __pyx_vtable_4lxml_5etree__FileReaderContext._readDoc = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__FileReaderContext *, xmlParserCtxt *, int))__pyx_f_4lxml_5etree_18_FileReaderContext__readDoc;
   __pyx_vtable_4lxml_5etree__FileReaderContext.copyToBuffer = (int (*)(struct __pyx_obj_4lxml_5etree__FileReaderContext *, char *, int))__pyx_f_4lxml_5etree_18_FileReaderContext_copyToBuffer;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__FileReaderContext) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__FileReaderContext) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_type_4lxml_5etree__FileReaderContext.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__FileReaderContext.tp_dict, __pyx_vtabptr_4lxml_5etree__FileReaderContext) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__FileReaderContext.tp_dict, __pyx_vtabptr_4lxml_5etree__FileReaderContext) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree__FileReaderContext = &__pyx_type_4lxml_5etree__FileReaderContext;
-  __pyx_vtabptr_4lxml_5etree__BaseErrorLog = &__pyx_vtable_4lxml_5etree__BaseErrorLog;
-  __pyx_vtable_4lxml_5etree__BaseErrorLog.copy = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_13_BaseErrorLog_copy;
-  __pyx_vtable_4lxml_5etree__BaseErrorLog.receive = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, struct __pyx_obj_4lxml_5etree__LogEntry *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_13_BaseErrorLog_receive;
-  __pyx_vtable_4lxml_5etree__BaseErrorLog._receive = (void (*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, xmlError *))__pyx_f_4lxml_5etree_13_BaseErrorLog__receive;
-  __pyx_vtable_4lxml_5etree__BaseErrorLog._receiveGeneric = (void (*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, int, int, int, int, PyObject *, PyObject *))__pyx_f_4lxml_5etree_13_BaseErrorLog__receiveGeneric;
-  __pyx_vtable_4lxml_5etree__BaseErrorLog._buildParseException = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_13_BaseErrorLog__buildParseException;
-  __pyx_vtable_4lxml_5etree__BaseErrorLog._buildExceptionMessage = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, PyObject *))__pyx_f_4lxml_5etree_13_BaseErrorLog__buildExceptionMessage;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__BaseErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__BaseErrorLog.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__BaseErrorLog.tp_dict, __pyx_vtabptr_4lxml_5etree__BaseErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_BaseErrorLog", (PyObject *)&__pyx_type_4lxml_5etree__BaseErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__BaseErrorLog = &__pyx_type_4lxml_5etree__BaseErrorLog;
-  __pyx_vtabptr_4lxml_5etree__ElementTagMatcher = &__pyx_vtable_4lxml_5etree__ElementTagMatcher;
-  __pyx_vtable_4lxml_5etree__ElementTagMatcher._initTagMatch = (PyObject *(*)(struct LxmlElementTagMatcher *, PyObject *))__pyx_f_4lxml_5etree_18_ElementTagMatcher__initTagMatch;
-  if (PyType_Ready(&LxmlElementTagMatcherType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  LxmlElementTagMatcherType.tp_print = 0;
-  if (__Pyx_SetVtable(LxmlElementTagMatcherType.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementTagMatcher) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_ElementTagMatcher", (PyObject *)&LxmlElementTagMatcherType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2385; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ElementTagMatcher = &LxmlElementTagMatcherType;
-  __pyx_vtabptr_4lxml_5etree_XSLT = &__pyx_vtable_4lxml_5etree_XSLT;
-  __pyx_vtable_4lxml_5etree_XSLT._run_transform = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree_XSLT *, xmlDoc *, const char **, struct __pyx_obj_4lxml_5etree__XSLTContext *, xsltTransformContext *))__pyx_f_4lxml_5etree_4XSLT__run_transform;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_XSLT) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_XSLT.tp_print = 0;
-  #if CYTHON_COMPILING_IN_CPYTHON
-  {
-    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_XSLT, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
-      __pyx_wrapperbase_4lxml_5etree_4XSLT_18__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
-      __pyx_wrapperbase_4lxml_5etree_4XSLT_18__call__.doc = __pyx_doc_4lxml_5etree_4XSLT_18__call__;
-      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_4XSLT_18__call__;
-    }
-  }
-  #endif
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XSLT.tp_dict, __pyx_vtabptr_4lxml_5etree_XSLT) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "XSLT", (PyObject *)&__pyx_type_4lxml_5etree_XSLT) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_XSLT = &__pyx_type_4lxml_5etree_XSLT;
-  __pyx_vtabptr_4lxml_5etree_ElementDepthFirstIterator = &__pyx_vtable_4lxml_5etree_ElementDepthFirstIterator;
-  __pyx_vtable_4lxml_5etree_ElementDepthFirstIterator._nextNodeAnyTag = (xmlNode *(*)(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *))__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeAnyTag;
-  __pyx_vtable_4lxml_5etree_ElementDepthFirstIterator._nextNodeMatchTag = (xmlNode *(*)(struct __pyx_obj_4lxml_5etree_ElementDepthFirstIterator *, xmlNode *))__pyx_f_4lxml_5etree_25ElementDepthFirstIterator__nextNodeMatchTag;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementDepthFirstIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_ElementDepthFirstIterator.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ElementDepthFirstIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_ElementDepthFirstIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "ElementDepthFirstIterator", (PyObject *)&__pyx_type_4lxml_5etree_ElementDepthFirstIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2668; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_ElementDepthFirstIterator = &__pyx_type_4lxml_5etree_ElementDepthFirstIterator;
-  if (PyType_Ready(&LxmlElementClassLookupType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  LxmlElementClassLookupType.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "ElementClassLookup", (PyObject *)&LxmlElementClassLookupType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 214; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_ElementClassLookup = &LxmlElementClassLookupType;
-  __pyx_vtabptr_4lxml_5etree__ResolverRegistry = &__pyx_vtable_4lxml_5etree__ResolverRegistry;
-  __pyx_vtable_4lxml_5etree__ResolverRegistry._copy = (struct __pyx_obj_4lxml_5etree__ResolverRegistry *(*)(struct __pyx_obj_4lxml_5etree__ResolverRegistry *))__pyx_f_4lxml_5etree_17_ResolverRegistry__copy;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ResolverRegistry) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ResolverRegistry.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ResolverRegistry.tp_dict, __pyx_vtabptr_4lxml_5etree__ResolverRegistry) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ResolverRegistry = &__pyx_type_4lxml_5etree__ResolverRegistry;
+  __pyx_vtabptr_4lxml_5etree__FeedParser = &__pyx_vtable_4lxml_5etree__FeedParser;
+  __pyx_vtable_4lxml_5etree__FeedParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree__BaseParser;
+  __pyx_vtable_4lxml_5etree__FeedParser.feed = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__FeedParser *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_11_FeedParser_feed;
+  __pyx_vtable_4lxml_5etree__FeedParser.close = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__FeedParser *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_11_FeedParser_close;
+  __pyx_type_4lxml_5etree__FeedParser.tp_base = __pyx_ptype_4lxml_5etree__BaseParser;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__FeedParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__FeedParser.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__FeedParser.tp_dict, __pyx_vtabptr_4lxml_5etree__FeedParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_FeedParser", (PyObject *)&__pyx_type_4lxml_5etree__FeedParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1143; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__FeedParser = &__pyx_type_4lxml_5etree__FeedParser;
+  __pyx_vtabptr_4lxml_5etree_XMLParser = &__pyx_vtable_4lxml_5etree_XMLParser;
+  __pyx_vtable_4lxml_5etree_XMLParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree__FeedParser;
+  __pyx_type_4lxml_5etree_XMLParser.tp_base = __pyx_ptype_4lxml_5etree__FeedParser;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_XMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_XMLParser.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XMLParser.tp_dict, __pyx_vtabptr_4lxml_5etree_XMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "XMLParser", (PyObject *)&__pyx_type_4lxml_5etree_XMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1359; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_XMLParser = &__pyx_type_4lxml_5etree_XMLParser;
+  __pyx_vtabptr_4lxml_5etree_XMLPullParser = &__pyx_vtable_4lxml_5etree_XMLPullParser;
+  __pyx_vtable_4lxml_5etree_XMLPullParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree_XMLParser;
+  __pyx_type_4lxml_5etree_XMLPullParser.tp_base = __pyx_ptype_4lxml_5etree_XMLParser;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_XMLPullParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_XMLPullParser.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XMLPullParser.tp_dict, __pyx_vtabptr_4lxml_5etree_XMLPullParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "XMLPullParser", (PyObject *)&__pyx_type_4lxml_5etree_XMLPullParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1442; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_XMLPullParser = &__pyx_type_4lxml_5etree_XMLPullParser;
+  __pyx_vtabptr_4lxml_5etree_ETCompatXMLParser = &__pyx_vtable_4lxml_5etree_ETCompatXMLParser;
+  __pyx_vtable_4lxml_5etree_ETCompatXMLParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree_XMLParser;
+  __pyx_type_4lxml_5etree_ETCompatXMLParser.tp_base = __pyx_ptype_4lxml_5etree_XMLParser;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_ETCompatXMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_ETCompatXMLParser.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ETCompatXMLParser.tp_dict, __pyx_vtabptr_4lxml_5etree_ETCompatXMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "ETCompatXMLParser", (PyObject *)&__pyx_type_4lxml_5etree_ETCompatXMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_ETCompatXMLParser = &__pyx_type_4lxml_5etree_ETCompatXMLParser;
+  __pyx_vtabptr_4lxml_5etree_HTMLParser = &__pyx_vtable_4lxml_5etree_HTMLParser;
+  __pyx_vtable_4lxml_5etree_HTMLParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree__FeedParser;
+  __pyx_type_4lxml_5etree_HTMLParser.tp_base = __pyx_ptype_4lxml_5etree__FeedParser;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_HTMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_HTMLParser.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_HTMLParser.tp_dict, __pyx_vtabptr_4lxml_5etree_HTMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "HTMLParser", (PyObject *)&__pyx_type_4lxml_5etree_HTMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_HTMLParser = &__pyx_type_4lxml_5etree_HTMLParser;
+  __pyx_vtabptr_4lxml_5etree_HTMLPullParser = &__pyx_vtable_4lxml_5etree_HTMLPullParser;
+  __pyx_vtable_4lxml_5etree_HTMLPullParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree_HTMLParser;
+  __pyx_type_4lxml_5etree_HTMLPullParser.tp_base = __pyx_ptype_4lxml_5etree_HTMLParser;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_HTMLPullParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_HTMLPullParser.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_HTMLPullParser.tp_dict, __pyx_vtabptr_4lxml_5etree_HTMLPullParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "HTMLPullParser", (PyObject *)&__pyx_type_4lxml_5etree_HTMLPullParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_HTMLPullParser = &__pyx_type_4lxml_5etree_HTMLPullParser;
   __pyx_vtabptr_4lxml_5etree__SaxParserTarget = &__pyx_vtable_4lxml_5etree__SaxParserTarget;
   __pyx_vtable_4lxml_5etree__SaxParserTarget._handleSaxStart = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_16_SaxParserTarget__handleSaxStart;
   __pyx_vtable_4lxml_5etree__SaxParserTarget._handleSaxEnd = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *))__pyx_f_4lxml_5etree_16_SaxParserTarget__handleSaxEnd;
@@ -188297,6 +189207,9 @@ PyMODINIT_FUNC PyInit_etree(void)
   if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__SaxParserTarget.tp_dict, __pyx_vtabptr_4lxml_5etree__SaxParserTarget) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__Pyx_SetAttrString(__pyx_m, "_SaxParserTarget", (PyObject *)&__pyx_type_4lxml_5etree__SaxParserTarget) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 41; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree__SaxParserTarget = &__pyx_type_4lxml_5etree__SaxParserTarget;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ParseEventsIterator) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ParseEventsIterator.tp_print = 0;
+  __pyx_ptype_4lxml_5etree__ParseEventsIterator = &__pyx_type_4lxml_5etree__ParseEventsIterator;
   __pyx_vtabptr_4lxml_5etree_TreeBuilder = &__pyx_vtable_4lxml_5etree_TreeBuilder;
   __pyx_vtable_4lxml_5etree_TreeBuilder.__pyx_base = *__pyx_vtabptr_4lxml_5etree__SaxParserTarget;
   __pyx_vtable_4lxml_5etree_TreeBuilder.__pyx_base._handleSaxStart = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_11TreeBuilder__handleSaxStart;
@@ -188311,124 +189224,31 @@ PyMODINIT_FUNC PyInit_etree(void)
   if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_TreeBuilder.tp_dict, __pyx_vtabptr_4lxml_5etree_TreeBuilder) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__Pyx_SetAttrString(__pyx_m, "TreeBuilder", (PyObject *)&__pyx_type_4lxml_5etree_TreeBuilder) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree_TreeBuilder = &__pyx_type_4lxml_5etree_TreeBuilder;
-  __pyx_vtabptr_4lxml_5etree__XPathEvaluatorBase = &__pyx_vtable_4lxml_5etree__XPathEvaluatorBase;
-  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase.set_context = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *, xmlXPathContext *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase_set_context;
-  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase._checkAbsolutePath = (int (*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *, char *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__checkAbsolutePath;
-  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase._lock = (int (*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__lock;
-  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase._unlock = (void (*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__unlock;
-  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase._raise_parse_error = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__raise_parse_error;
-  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase._raise_eval_error = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__raise_eval_error;
-  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase._handle_result = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *, xmlXPathObject *, struct LxmlDocument *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__handle_result;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__XPathEvaluatorBase) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__XPathEvaluatorBase.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XPathEvaluatorBase.tp_dict, __pyx_vtabptr_4lxml_5etree__XPathEvaluatorBase) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_XPathEvaluatorBase", (PyObject *)&__pyx_type_4lxml_5etree__XPathEvaluatorBase) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__XPathEvaluatorBase = &__pyx_type_4lxml_5etree__XPathEvaluatorBase;
-  __pyx_vtabptr_4lxml_5etree_XPathElementEvaluator = &__pyx_vtable_4lxml_5etree_XPathElementEvaluator;
-  __pyx_vtable_4lxml_5etree_XPathElementEvaluator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__XPathEvaluatorBase;
-  __pyx_type_4lxml_5etree_XPathElementEvaluator.tp_base = __pyx_ptype_4lxml_5etree__XPathEvaluatorBase;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_XPathElementEvaluator) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_XPathElementEvaluator.tp_print = 0;
-  #if CYTHON_COMPILING_IN_CPYTHON
-  {
-    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_XPathElementEvaluator, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
-      __pyx_wrapperbase_4lxml_5etree_21XPathElementEvaluator_6__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
-      __pyx_wrapperbase_4lxml_5etree_21XPathElementEvaluator_6__call__.doc = __pyx_doc_4lxml_5etree_21XPathElementEvaluator_6__call__;
-      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_21XPathElementEvaluator_6__call__;
-    }
-  }
-  #endif
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XPathElementEvaluator.tp_dict, __pyx_vtabptr_4lxml_5etree_XPathElementEvaluator) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "XPathElementEvaluator", (PyObject *)&__pyx_type_4lxml_5etree_XPathElementEvaluator) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_XPathElementEvaluator = &__pyx_type_4lxml_5etree_XPathElementEvaluator;
-  __pyx_vtabptr_4lxml_5etree_XPathDocumentEvaluator = &__pyx_vtable_4lxml_5etree_XPathDocumentEvaluator;
-  __pyx_vtable_4lxml_5etree_XPathDocumentEvaluator.__pyx_base = *__pyx_vtabptr_4lxml_5etree_XPathElementEvaluator;
-  __pyx_type_4lxml_5etree_XPathDocumentEvaluator.tp_base = __pyx_ptype_4lxml_5etree_XPathElementEvaluator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_XPathDocumentEvaluator) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_XPathDocumentEvaluator.tp_print = 0;
-  #if CYTHON_COMPILING_IN_CPYTHON
-  {
-    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_XPathDocumentEvaluator, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
-      __pyx_wrapperbase_4lxml_5etree_22XPathDocumentEvaluator_2__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
-      __pyx_wrapperbase_4lxml_5etree_22XPathDocumentEvaluator_2__call__.doc = __pyx_doc_4lxml_5etree_22XPathDocumentEvaluator_2__call__;
-      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_22XPathDocumentEvaluator_2__call__;
-    }
-  }
-  #endif
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XPathDocumentEvaluator.tp_dict, __pyx_vtabptr_4lxml_5etree_XPathDocumentEvaluator) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "XPathDocumentEvaluator", (PyObject *)&__pyx_type_4lxml_5etree_XPathDocumentEvaluator) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_XPathDocumentEvaluator = &__pyx_type_4lxml_5etree_XPathDocumentEvaluator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_1_iterattributes) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree___pyx_scope_struct_1_iterattributes.tp_print = 0;
-  __pyx_ptype_4lxml_5etree___pyx_scope_struct_1_iterattributes = &__pyx_type_4lxml_5etree___pyx_scope_struct_1_iterattributes;
-  __pyx_vtabptr_4lxml_5etree__Comment = &__pyx_vtable_4lxml_5etree__Comment;
-  __pyx_vtable_4lxml_5etree__Comment.__pyx_base = *__pyx_vtabptr_4lxml_5etree___ContentOnlyElement;
-  __pyx_type_4lxml_5etree__Comment.tp_base = __pyx_ptype_4lxml_5etree___ContentOnlyElement;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__Comment) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__Comment.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__Comment.tp_dict, __pyx_vtabptr_4lxml_5etree__Comment) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_Comment", (PyObject *)&__pyx_type_4lxml_5etree__Comment) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__Comment = &__pyx_type_4lxml_5etree__Comment;
-  __pyx_vtabptr_4lxml_5etree__MultiTagMatcher = &__pyx_vtable_4lxml_5etree__MultiTagMatcher;
-  __pyx_vtable_4lxml_5etree__MultiTagMatcher.rejectsAll = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAll;
-  __pyx_vtable_4lxml_5etree__MultiTagMatcher.rejectsAllAttributes = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_rejectsAllAttributes;
-  __pyx_vtable_4lxml_5etree__MultiTagMatcher.matchesType = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, int))__pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesType;
-  __pyx_vtable_4lxml_5etree__MultiTagMatcher._clear = (void (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *))__pyx_f_4lxml_5etree_16_MultiTagMatcher__clear;
-  __pyx_vtable_4lxml_5etree__MultiTagMatcher.initTagMatch = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, PyObject *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_initTagMatch;
-  __pyx_vtable_4lxml_5etree__MultiTagMatcher._storeTags = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_16_MultiTagMatcher__storeTags;
-  __pyx_vtable_4lxml_5etree__MultiTagMatcher.cacheTags = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, struct LxmlDocument *, struct __pyx_opt_args_4lxml_5etree_16_MultiTagMatcher_cacheTags *__pyx_optional_args))__pyx_f_4lxml_5etree_16_MultiTagMatcher_cacheTags;
-  __pyx_vtable_4lxml_5etree__MultiTagMatcher.matches = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlNode *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_matches;
-  __pyx_vtable_4lxml_5etree__MultiTagMatcher.matchesNsTag = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, const xmlChar *, const xmlChar *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesNsTag;
-  __pyx_vtable_4lxml_5etree__MultiTagMatcher.matchesAttribute = (int (*)(struct __pyx_obj_4lxml_5etree__MultiTagMatcher *, xmlAttr *))__pyx_f_4lxml_5etree_16_MultiTagMatcher_matchesAttribute;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__MultiTagMatcher) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__MultiTagMatcher.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__MultiTagMatcher.tp_dict, __pyx_vtabptr_4lxml_5etree__MultiTagMatcher) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__MultiTagMatcher = &__pyx_type_4lxml_5etree__MultiTagMatcher;
-  __pyx_vtabptr_4lxml_5etree_XPath = &__pyx_vtable_4lxml_5etree_XPath;
-  __pyx_vtable_4lxml_5etree_XPath.__pyx_base = *__pyx_vtabptr_4lxml_5etree__XPathEvaluatorBase;
-  __pyx_type_4lxml_5etree_XPath.tp_base = __pyx_ptype_4lxml_5etree__XPathEvaluatorBase;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_XPath) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_XPath.tp_print = 0;
-  #if CYTHON_COMPILING_IN_CPYTHON
-  {
-    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_XPath, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
-      __pyx_wrapperbase_4lxml_5etree_5XPath_4__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
-      __pyx_wrapperbase_4lxml_5etree_5XPath_4__call__.doc = __pyx_doc_4lxml_5etree_5XPath_4__call__;
-      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_5XPath_4__call__;
-    }
-  }
-  #endif
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XPath.tp_dict, __pyx_vtabptr_4lxml_5etree_XPath) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "XPath", (PyObject *)&__pyx_type_4lxml_5etree_XPath) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_XPath = &__pyx_type_4lxml_5etree_XPath;
-  __pyx_vtabptr_4lxml_5etree_ETXPath = &__pyx_vtable_4lxml_5etree_ETXPath;
-  __pyx_vtable_4lxml_5etree_ETXPath.__pyx_base = *__pyx_vtabptr_4lxml_5etree_XPath;
-  __pyx_vtable_4lxml_5etree_ETXPath._nsextract_path = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_ETXPath *, PyObject *))__pyx_f_4lxml_5etree_7ETXPath__nsextract_path;
-  __pyx_type_4lxml_5etree_ETXPath.tp_base = __pyx_ptype_4lxml_5etree_XPath;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_ETXPath) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_ETXPath.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ETXPath.tp_dict, __pyx_vtabptr_4lxml_5etree_ETXPath) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "ETXPath", (PyObject *)&__pyx_type_4lxml_5etree_ETXPath) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_ETXPath = &__pyx_type_4lxml_5etree_ETXPath;
-  __pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup = &__pyx_vtable_4lxml_5etree_FallbackElementClassLookup;
-  __pyx_vtable_4lxml_5etree_FallbackElementClassLookup._setFallback = (void (*)(struct LxmlFallbackElementClassLookup *, struct LxmlElementClassLookup *))__pyx_f_4lxml_5etree_26FallbackElementClassLookup__setFallback;
-  LxmlFallbackElementClassLookupType.tp_base = __pyx_ptype_4lxml_5etree_ElementClassLookup;
-  if (PyType_Ready(&LxmlFallbackElementClassLookupType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  LxmlFallbackElementClassLookupType.tp_print = 0;
-  if (__Pyx_SetVtable(LxmlFallbackElementClassLookupType.tp_dict, __pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "FallbackElementClassLookup", (PyObject *)&LxmlFallbackElementClassLookupType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_FallbackElementClassLookup = &LxmlFallbackElementClassLookupType;
-  __pyx_vtabptr_4lxml_5etree_CustomElementClassLookup = &__pyx_vtable_4lxml_5etree_CustomElementClassLookup;
-  __pyx_vtable_4lxml_5etree_CustomElementClassLookup.__pyx_base = *__pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
-  __pyx_type_4lxml_5etree_CustomElementClassLookup.tp_base = __pyx_ptype_4lxml_5etree_FallbackElementClassLookup;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_CustomElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_CustomElementClassLookup.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_CustomElementClassLookup.tp_dict, __pyx_vtabptr_4lxml_5etree_CustomElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "CustomElementClassLookup", (PyObject *)&__pyx_type_4lxml_5etree_CustomElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 413; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_CustomElementClassLookup = &__pyx_type_4lxml_5etree_CustomElementClassLookup;
+  __pyx_vtabptr_4lxml_5etree__PythonSaxParserTarget = &__pyx_vtable_4lxml_5etree__PythonSaxParserTarget;
+  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base = *__pyx_vtabptr_4lxml_5etree__SaxParserTarget;
+  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base._handleSaxStart = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxStart;
+  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base._handleSaxEnd = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *))__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxEnd;
+  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base._handleSaxData = (int (*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *))__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxData;
+  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base._handleSaxDoctype = (int (*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxDoctype;
+  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base._handleSaxPi = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxPi;
+  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base._handleSaxComment = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *))__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxComment;
+  __pyx_type_4lxml_5etree__PythonSaxParserTarget.tp_base = __pyx_ptype_4lxml_5etree__SaxParserTarget;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__PythonSaxParserTarget) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__PythonSaxParserTarget.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__PythonSaxParserTarget.tp_dict, __pyx_vtabptr_4lxml_5etree__PythonSaxParserTarget) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__PythonSaxParserTarget = &__pyx_type_4lxml_5etree__PythonSaxParserTarget;
+  __pyx_vtabptr_4lxml_5etree__FilelikeWriter = &__pyx_vtable_4lxml_5etree__FilelikeWriter;
+  __pyx_vtable_4lxml_5etree__FilelikeWriter._createOutputBuffer = (xmlOutputBuffer *(*)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, xmlCharEncodingHandler *))__pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuffer;
+  __pyx_vtable_4lxml_5etree__FilelikeWriter.write = (int (*)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, char *, int))__pyx_f_4lxml_5etree_15_FilelikeWriter_write;
+  __pyx_vtable_4lxml_5etree__FilelikeWriter.close = (int (*)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *))__pyx_f_4lxml_5etree_15_FilelikeWriter_close;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__FilelikeWriter) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__FilelikeWriter.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__FilelikeWriter.tp_dict, __pyx_vtabptr_4lxml_5etree__FilelikeWriter) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__FilelikeWriter = &__pyx_type_4lxml_5etree__FilelikeWriter;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_xmlfile) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_xmlfile.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "xmlfile", (PyObject *)&__pyx_type_4lxml_5etree_xmlfile) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_xmlfile = &__pyx_type_4lxml_5etree_xmlfile;
   __pyx_vtabptr_4lxml_5etree__IncrementalFileWriter = &__pyx_vtable_4lxml_5etree__IncrementalFileWriter;
   __pyx_vtable_4lxml_5etree__IncrementalFileWriter._write_qname = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname;
   __pyx_vtable_4lxml_5etree__IncrementalFileWriter._write_start_element = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *, PyObject *))__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_element;
@@ -188443,54 +189263,55 @@ PyMODINIT_FUNC PyInit_etree(void)
   __pyx_type_4lxml_5etree__IncrementalFileWriter.tp_print = 0;
   if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__IncrementalFileWriter.tp_dict, __pyx_vtabptr_4lxml_5etree__IncrementalFileWriter) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree__IncrementalFileWriter = &__pyx_type_4lxml_5etree__IncrementalFileWriter;
-  __pyx_vtabptr_4lxml_5etree__ReadOnlyProxy = &__pyx_vtable_4lxml_5etree__ReadOnlyProxy;
-  __pyx_vtable_4lxml_5etree__ReadOnlyProxy._assertNode = (int (*)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *))__pyx_f_4lxml_5etree_14_ReadOnlyProxy__assertNode;
-  __pyx_vtable_4lxml_5etree__ReadOnlyProxy._raise_unsupported_type = (int (*)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *))__pyx_f_4lxml_5etree_14_ReadOnlyProxy__raise_unsupported_type;
-  __pyx_vtable_4lxml_5etree__ReadOnlyProxy.free_after_use = (void (*)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *))__pyx_f_4lxml_5etree_14_ReadOnlyProxy_free_after_use;
-  __pyx_vtable_4lxml_5etree__ReadOnlyProxy.__pyx___copy__ = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_14_ReadOnlyProxy___copy__;
-  __pyx_vtable_4lxml_5etree__ReadOnlyProxy.getchildren = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ReadOnlyProxy *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_14_ReadOnlyProxy_getchildren;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ReadOnlyProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ReadOnlyProxy.tp_print = 0;
-  #if CYTHON_COMPILING_IN_CPYTHON
-  {
-    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree__ReadOnlyProxy, "__getitem__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
-      __pyx_wrapperbase_4lxml_5etree_14_ReadOnlyProxy_4__getitem__ = *((PyWrapperDescrObject *)wrapper)->d_base;
-      __pyx_wrapperbase_4lxml_5etree_14_ReadOnlyProxy_4__getitem__.doc = __pyx_doc_4lxml_5etree_14_ReadOnlyProxy_4__getitem__;
-      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_14_ReadOnlyProxy_4__getitem__;
-    }
-  }
-  #endif
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__FileWriterElement) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__FileWriterElement.tp_print = 0;
+  __pyx_ptype_4lxml_5etree__FileWriterElement = &__pyx_type_4lxml_5etree__FileWriterElement;
+  __pyx_vtabptr_4lxml_5etree_iterparse = &__pyx_vtable_4lxml_5etree_iterparse;
+  __pyx_vtable_4lxml_5etree_iterparse._close_source = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_iterparse *))__pyx_f_4lxml_5etree_9iterparse__close_source;
+  __pyx_vtable_4lxml_5etree_iterparse._read_more_events = (int (*)(struct __pyx_obj_4lxml_5etree_iterparse *, struct __pyx_obj_4lxml_5etree__SaxParserContext *))__pyx_f_4lxml_5etree_9iterparse__read_more_events;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_iterparse) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_iterparse.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_iterparse.tp_dict, __pyx_vtabptr_4lxml_5etree_iterparse) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "iterparse", (PyObject *)&__pyx_type_4lxml_5etree_iterparse) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_iterparse = &__pyx_type_4lxml_5etree_iterparse;
+  __pyx_vtabptr_4lxml_5etree_iterwalk = &__pyx_vtable_4lxml_5etree_iterwalk;
+  __pyx_vtable_4lxml_5etree_iterwalk._start_node = (int (*)(struct __pyx_obj_4lxml_5etree_iterwalk *, struct LxmlElement *))__pyx_f_4lxml_5etree_8iterwalk__start_node;
+  __pyx_vtable_4lxml_5etree_iterwalk._end_node = (struct LxmlElement *(*)(struct __pyx_obj_4lxml_5etree_iterwalk *))__pyx_f_4lxml_5etree_8iterwalk__end_node;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_iterwalk) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_iterwalk.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_iterwalk.tp_dict, __pyx_vtabptr_4lxml_5etree_iterwalk) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "iterwalk", (PyObject *)&__pyx_type_4lxml_5etree_iterwalk) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_iterwalk = &__pyx_type_4lxml_5etree_iterwalk;
+  __pyx_vtabptr_4lxml_5etree__IDDict = &__pyx_vtable_4lxml_5etree__IDDict;
+  __pyx_vtable_4lxml_5etree__IDDict._build_keys = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__IDDict *))__pyx_f_4lxml_5etree_7_IDDict__build_keys;
+  __pyx_vtable_4lxml_5etree__IDDict._build_items = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__IDDict *))__pyx_f_4lxml_5etree_7_IDDict__build_items;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__IDDict) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__IDDict.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__IDDict.tp_dict, __pyx_vtabptr_4lxml_5etree__IDDict) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_IDDict", (PyObject *)&__pyx_type_4lxml_5etree__IDDict) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__IDDict = &__pyx_type_4lxml_5etree__IDDict;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_XInclude) < 0) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_XInclude.tp_print = 0;
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree__ReadOnlyProxy, "__len__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_XInclude, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
-      __pyx_wrapperbase_4lxml_5etree_14_ReadOnlyProxy_6__len__ = *((PyWrapperDescrObject *)wrapper)->d_base;
-      __pyx_wrapperbase_4lxml_5etree_14_ReadOnlyProxy_6__len__.doc = __pyx_doc_4lxml_5etree_14_ReadOnlyProxy_6__len__;
-      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_14_ReadOnlyProxy_6__len__;
+      __pyx_wrapperbase_4lxml_5etree_8XInclude_2__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
+      __pyx_wrapperbase_4lxml_5etree_8XInclude_2__call__.doc = __pyx_doc_4lxml_5etree_8XInclude_2__call__;
+      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_8XInclude_2__call__;
     }
   }
   #endif
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ReadOnlyProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ReadOnlyProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ReadOnlyProxy = &__pyx_type_4lxml_5etree__ReadOnlyProxy;
-  __pyx_vtabptr_4lxml_5etree__ReadOnlyElementProxy = &__pyx_vtable_4lxml_5etree__ReadOnlyElementProxy;
-  __pyx_vtable_4lxml_5etree__ReadOnlyElementProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ReadOnlyProxy;
-  __pyx_type_4lxml_5etree__ReadOnlyElementProxy.tp_base = __pyx_ptype_4lxml_5etree__ReadOnlyProxy;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ReadOnlyElementProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ReadOnlyElementProxy.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ReadOnlyElementProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ReadOnlyElementProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 275; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ReadOnlyElementProxy = &__pyx_type_4lxml_5etree__ReadOnlyElementProxy;
-  __pyx_vtabptr_4lxml_5etree_CommentBase = &__pyx_vtable_4lxml_5etree_CommentBase;
-  __pyx_vtable_4lxml_5etree_CommentBase.__pyx_base = *__pyx_vtabptr_4lxml_5etree__Comment;
-  __pyx_type_4lxml_5etree_CommentBase.tp_base = __pyx_ptype_4lxml_5etree__Comment;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_CommentBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_CommentBase.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_CommentBase.tp_dict, __pyx_vtabptr_4lxml_5etree_CommentBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "CommentBase", (PyObject *)&__pyx_type_4lxml_5etree_CommentBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_CommentBase = &__pyx_type_4lxml_5etree_CommentBase;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__XSLTQuotedStringParam) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__XSLTQuotedStringParam.tp_print = 0;
-  __pyx_ptype_4lxml_5etree__XSLTQuotedStringParam = &__pyx_type_4lxml_5etree__XSLTQuotedStringParam;
+  if (__Pyx_SetAttrString(__pyx_m, "XInclude", (PyObject *)&__pyx_type_4lxml_5etree_XInclude) < 0) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_XInclude = &__pyx_type_4lxml_5etree_XInclude;
+  __pyx_vtabptr_4lxml_5etree__ExsltRegExp = &__pyx_vtable_4lxml_5etree__ExsltRegExp;
+  __pyx_vtable_4lxml_5etree__ExsltRegExp._make_string = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, PyObject *))__pyx_f_4lxml_5etree_12_ExsltRegExp__make_string;
+  __pyx_vtable_4lxml_5etree__ExsltRegExp._compile = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_12_ExsltRegExp__compile;
+  __pyx_vtable_4lxml_5etree__ExsltRegExp._register_in_context = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, struct __pyx_obj_4lxml_5etree__BaseContext *))__pyx_f_4lxml_5etree_12_ExsltRegExp__register_in_context;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ExsltRegExp) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ExsltRegExp.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ExsltRegExp.tp_dict, __pyx_vtabptr_4lxml_5etree__ExsltRegExp) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ExsltRegExp = &__pyx_type_4lxml_5etree__ExsltRegExp;
   __pyx_vtabptr_4lxml_5etree__BaseContext = &__pyx_vtable_4lxml_5etree__BaseContext;
   __pyx_vtable_4lxml_5etree__BaseContext._copy = (struct __pyx_obj_4lxml_5etree__BaseContext *(*)(struct __pyx_obj_4lxml_5etree__BaseContext *))__pyx_f_4lxml_5etree_12_BaseContext__copy;
   __pyx_vtable_4lxml_5etree__BaseContext._to_utf = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseContext *, PyObject *))__pyx_f_4lxml_5etree_12_BaseContext__to_utf;
@@ -188517,90 +189338,11 @@ PyMODINIT_FUNC PyInit_etree(void)
   __pyx_type_4lxml_5etree__BaseContext.tp_print = 0;
   if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__BaseContext.tp_dict, __pyx_vtabptr_4lxml_5etree__BaseContext) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 32; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree__BaseContext = &__pyx_type_4lxml_5etree__BaseContext;
-  __pyx_vtabptr_4lxml_5etree__XSLTContext = &__pyx_vtable_4lxml_5etree__XSLTContext;
-  __pyx_vtable_4lxml_5etree__XSLTContext.__pyx_base = *__pyx_vtabptr_4lxml_5etree__BaseContext;
-  __pyx_vtable_4lxml_5etree__XSLTContext.__pyx_base._copy = (struct __pyx_obj_4lxml_5etree__BaseContext *(*)(struct __pyx_obj_4lxml_5etree__BaseContext *))__pyx_f_4lxml_5etree_12_XSLTContext__copy;
-  __pyx_vtable_4lxml_5etree__XSLTContext.register_context = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XSLTContext *, xsltTransformContext *, struct LxmlDocument *))__pyx_f_4lxml_5etree_12_XSLTContext_register_context;
-  __pyx_vtable_4lxml_5etree__XSLTContext.free_context = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XSLTContext *))__pyx_f_4lxml_5etree_12_XSLTContext_free_context;
-  __pyx_type_4lxml_5etree__XSLTContext.tp_base = __pyx_ptype_4lxml_5etree__BaseContext;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__XSLTContext) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__XSLTContext.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XSLTContext.tp_dict, __pyx_vtabptr_4lxml_5etree__XSLTContext) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__XSLTContext = &__pyx_type_4lxml_5etree__XSLTContext;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__DTDElementDecl) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__DTDElementDecl.tp_print = 0;
-  __pyx_ptype_4lxml_5etree__DTDElementDecl = &__pyx_type_4lxml_5etree__DTDElementDecl;
-  __pyx_vtabptr_4lxml_5etree_XSLTExtension = &__pyx_vtable_4lxml_5etree_XSLTExtension;
-  __pyx_vtable_4lxml_5etree_XSLTExtension._collectXSLTResultContent = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_XSLTExtension *, struct __pyx_obj_4lxml_5etree__XSLTContext *, xmlNode *, int, int))__pyx_f_4lxml_5etree_13XSLTExtension__collectXSLTResultContent;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_XSLTExtension) < 0) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_XSLTExtension.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XSLTExtension.tp_dict, __pyx_vtabptr_4lxml_5etree_XSLTExtension) < 0) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "XSLTExtension", (PyObject *)&__pyx_type_4lxml_5etree_XSLTExtension) < 0) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_XSLTExtension = &__pyx_type_4lxml_5etree_XSLTExtension;
-  __pyx_vtabptr_4lxml_5etree__ExceptionContext = &__pyx_vtable_4lxml_5etree__ExceptionContext;
-  __pyx_vtable_4lxml_5etree__ExceptionContext.clear = (void (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *))__pyx_f_4lxml_5etree_17_ExceptionContext_clear;
-  __pyx_vtable_4lxml_5etree__ExceptionContext._store_raised = (void (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *))__pyx_f_4lxml_5etree_17_ExceptionContext__store_raised;
-  __pyx_vtable_4lxml_5etree__ExceptionContext._store_exception = (void (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *, PyObject *))__pyx_f_4lxml_5etree_17_ExceptionContext__store_exception;
-  __pyx_vtable_4lxml_5etree__ExceptionContext._has_raised = (int (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *))__pyx_f_4lxml_5etree_17_ExceptionContext__has_raised;
-  __pyx_vtable_4lxml_5etree__ExceptionContext._raise_if_stored = (int (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *))__pyx_f_4lxml_5etree_17_ExceptionContext__raise_if_stored;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ExceptionContext) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ExceptionContext.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ExceptionContext.tp_dict, __pyx_vtabptr_4lxml_5etree__ExceptionContext) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 272; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ExceptionContext = &__pyx_type_4lxml_5etree__ExceptionContext;
-  __pyx_vtabptr_4lxml_5etree__ResolverContext = &__pyx_vtable_4lxml_5etree__ResolverContext;
-  __pyx_vtable_4lxml_5etree__ResolverContext.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ExceptionContext;
-  __pyx_vtable_4lxml_5etree__ResolverContext.__pyx_base.clear = (void (*)(struct __pyx_obj_4lxml_5etree__ExceptionContext *))__pyx_f_4lxml_5etree_16_ResolverContext_clear;
-  __pyx_type_4lxml_5etree__ResolverContext.tp_base = __pyx_ptype_4lxml_5etree__ExceptionContext;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ResolverContext) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ResolverContext.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ResolverContext.tp_dict, __pyx_vtabptr_4lxml_5etree__ResolverContext) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 161; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ResolverContext = &__pyx_type_4lxml_5etree__ResolverContext;
-  __pyx_vtabptr_4lxml_5etree__ParserContext = &__pyx_vtable_4lxml_5etree__ParserContext;
-  __pyx_vtable_4lxml_5etree__ParserContext.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ResolverContext;
-  __pyx_vtable_4lxml_5etree__ParserContext._copy = (struct __pyx_obj_4lxml_5etree__ParserContext *(*)(struct __pyx_obj_4lxml_5etree__ParserContext *))__pyx_f_4lxml_5etree_14_ParserContext__copy;
-  __pyx_vtable_4lxml_5etree__ParserContext._initParserContext = (void (*)(struct __pyx_obj_4lxml_5etree__ParserContext *, xmlParserCtxt *))__pyx_f_4lxml_5etree_14_ParserContext__initParserContext;
-  __pyx_vtable_4lxml_5etree__ParserContext._resetParserContext = (void (*)(struct __pyx_obj_4lxml_5etree__ParserContext *))__pyx_f_4lxml_5etree_14_ParserContext__resetParserContext;
-  __pyx_vtable_4lxml_5etree__ParserContext.prepare = (int (*)(struct __pyx_obj_4lxml_5etree__ParserContext *))__pyx_f_4lxml_5etree_14_ParserContext_prepare;
-  __pyx_vtable_4lxml_5etree__ParserContext.cleanup = (int (*)(struct __pyx_obj_4lxml_5etree__ParserContext *))__pyx_f_4lxml_5etree_14_ParserContext_cleanup;
-  __pyx_vtable_4lxml_5etree__ParserContext._handleParseResult = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ParserContext *, struct __pyx_obj_4lxml_5etree__BaseParser *, xmlDoc *, PyObject *))__pyx_f_4lxml_5etree_14_ParserContext__handleParseResult;
-  __pyx_vtable_4lxml_5etree__ParserContext._handleParseResultDoc = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__ParserContext *, struct __pyx_obj_4lxml_5etree__BaseParser *, xmlDoc *, PyObject *))__pyx_f_4lxml_5etree_14_ParserContext__handleParseResultDoc;
-  __pyx_type_4lxml_5etree__ParserContext.tp_base = __pyx_ptype_4lxml_5etree__ResolverContext;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ParserContext) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ParserContext.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ParserContext.tp_dict, __pyx_vtabptr_4lxml_5etree__ParserContext) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ParserContext = &__pyx_type_4lxml_5etree__ParserContext;
-  __pyx_vtabptr_4lxml_5etree__SaxParserContext = &__pyx_vtable_4lxml_5etree__SaxParserContext;
-  __pyx_vtable_4lxml_5etree__SaxParserContext.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ParserContext;
-  __pyx_vtable_4lxml_5etree__SaxParserContext.__pyx_base._initParserContext = (void (*)(struct __pyx_obj_4lxml_5etree__ParserContext *, xmlParserCtxt *))__pyx_f_4lxml_5etree_17_SaxParserContext__initParserContext;
-  __pyx_vtable_4lxml_5etree__SaxParserContext._setSaxParserTarget = (void (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, struct __pyx_obj_4lxml_5etree__SaxParserTarget *))__pyx_f_4lxml_5etree_17_SaxParserContext__setSaxParserTarget;
-  __pyx_vtable_4lxml_5etree__SaxParserContext._connectTarget = (void (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, xmlParserCtxt *))__pyx_f_4lxml_5etree_17_SaxParserContext__connectTarget;
-  __pyx_vtable_4lxml_5etree__SaxParserContext._connectEvents = (void (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, xmlParserCtxt *))__pyx_f_4lxml_5etree_17_SaxParserContext__connectEvents;
-  __pyx_vtable_4lxml_5etree__SaxParserContext._setEventFilter = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_17_SaxParserContext__setEventFilter;
-  __pyx_vtable_4lxml_5etree__SaxParserContext.startDocument = (int (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, xmlDoc *))__pyx_f_4lxml_5etree_17_SaxParserContext_startDocument;
-  __pyx_vtable_4lxml_5etree__SaxParserContext.pushEvent = (int (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, PyObject *, xmlNode *))__pyx_f_4lxml_5etree_17_SaxParserContext_pushEvent;
-  __pyx_vtable_4lxml_5etree__SaxParserContext.flushEvents = (int (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *))__pyx_f_4lxml_5etree_17_SaxParserContext_flushEvents;
-  __pyx_vtable_4lxml_5etree__SaxParserContext._handleSaxException = (void (*)(struct __pyx_obj_4lxml_5etree__SaxParserContext *, xmlParserCtxt *))__pyx_f_4lxml_5etree_17_SaxParserContext__handleSaxException;
-  __pyx_type_4lxml_5etree__SaxParserContext.tp_base = __pyx_ptype_4lxml_5etree__ParserContext;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__SaxParserContext) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__SaxParserContext.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__SaxParserContext.tp_dict, __pyx_vtabptr_4lxml_5etree__SaxParserContext) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__SaxParserContext = &__pyx_type_4lxml_5etree__SaxParserContext;
-  __pyx_vtabptr_4lxml_5etree__TargetParserContext = &__pyx_vtable_4lxml_5etree__TargetParserContext;
-  __pyx_vtable_4lxml_5etree__TargetParserContext.__pyx_base = *__pyx_vtabptr_4lxml_5etree__SaxParserContext;
-  __pyx_vtable_4lxml_5etree__TargetParserContext.__pyx_base.__pyx_base._copy = (struct __pyx_obj_4lxml_5etree__ParserContext *(*)(struct __pyx_obj_4lxml_5etree__ParserContext *))__pyx_f_4lxml_5etree_20_TargetParserContext__copy;
-  __pyx_vtable_4lxml_5etree__TargetParserContext.__pyx_base.__pyx_base._handleParseResult = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ParserContext *, struct __pyx_obj_4lxml_5etree__BaseParser *, xmlDoc *, PyObject *))__pyx_f_4lxml_5etree_20_TargetParserContext__handleParseResult;
-  __pyx_vtable_4lxml_5etree__TargetParserContext.__pyx_base.__pyx_base._handleParseResultDoc = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree__ParserContext *, struct __pyx_obj_4lxml_5etree__BaseParser *, xmlDoc *, PyObject *))__pyx_f_4lxml_5etree_20_TargetParserContext__handleParseResultDoc;
-  __pyx_vtable_4lxml_5etree__TargetParserContext._setTarget = (int (*)(struct __pyx_obj_4lxml_5etree__TargetParserContext *, PyObject *))__pyx_f_4lxml_5etree_20_TargetParserContext__setTarget;
-  __pyx_vtable_4lxml_5etree__TargetParserContext._cleanupTargetParserContext = (void (*)(struct __pyx_obj_4lxml_5etree__TargetParserContext *, xmlDoc *))__pyx_f_4lxml_5etree_20_TargetParserContext__cleanupTargetParserContext;
-  __pyx_type_4lxml_5etree__TargetParserContext.tp_base = __pyx_ptype_4lxml_5etree__SaxParserContext;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__TargetParserContext) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__TargetParserContext.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__TargetParserContext.tp_dict, __pyx_vtabptr_4lxml_5etree__TargetParserContext) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__TargetParserContext = &__pyx_type_4lxml_5etree__TargetParserContext;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_Resolver) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_Resolver.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "Resolver", (PyObject *)&__pyx_type_4lxml_5etree_Resolver) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 23; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_Resolver = &__pyx_type_4lxml_5etree_Resolver;
+  __pyx_type_4lxml_5etree__ElementUnicodeResult.tp_base = (&PyUnicode_Type);
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__ElementUnicodeResult) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__ElementUnicodeResult.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "_ElementUnicodeResult", (PyObject *)&__pyx_type_4lxml_5etree__ElementUnicodeResult) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__ElementUnicodeResult = &__pyx_type_4lxml_5etree__ElementUnicodeResult;
   __pyx_vtabptr_4lxml_5etree__XPathContext = &__pyx_vtable_4lxml_5etree__XPathContext;
   __pyx_vtable_4lxml_5etree__XPathContext.__pyx_base = *__pyx_vtabptr_4lxml_5etree__BaseContext;
   __pyx_vtable_4lxml_5etree__XPathContext.set_context = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XPathContext *, xmlXPathContext *))__pyx_f_4lxml_5etree_13_XPathContext_set_context;
@@ -188614,228 +189356,82 @@ PyMODINIT_FUNC PyInit_etree(void)
   __pyx_type_4lxml_5etree__XPathContext.tp_print = 0;
   if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XPathContext.tp_dict, __pyx_vtabptr_4lxml_5etree__XPathContext) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree__XPathContext = &__pyx_type_4lxml_5etree__XPathContext;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ParseEventsIterator) < 0) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ParseEventsIterator.tp_print = 0;
-  __pyx_ptype_4lxml_5etree__ParseEventsIterator = &__pyx_type_4lxml_5etree__ParseEventsIterator;
-  __pyx_vtabptr_4lxml_5etree__Entity = &__pyx_vtable_4lxml_5etree__Entity;
-  __pyx_vtable_4lxml_5etree__Entity.__pyx_base = *__pyx_vtabptr_4lxml_5etree___ContentOnlyElement;
-  __pyx_type_4lxml_5etree__Entity.tp_base = __pyx_ptype_4lxml_5etree___ContentOnlyElement;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__Entity) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__Entity.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__Entity.tp_dict, __pyx_vtabptr_4lxml_5etree__Entity) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_Entity", (PyObject *)&__pyx_type_4lxml_5etree__Entity) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1636; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__Entity = &__pyx_type_4lxml_5etree__Entity;
-  __pyx_vtabptr_4lxml_5etree_EntityBase = &__pyx_vtable_4lxml_5etree_EntityBase;
-  __pyx_vtable_4lxml_5etree_EntityBase.__pyx_base = *__pyx_vtabptr_4lxml_5etree__Entity;
-  __pyx_type_4lxml_5etree_EntityBase.tp_base = __pyx_ptype_4lxml_5etree__Entity;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_EntityBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_EntityBase.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_EntityBase.tp_dict, __pyx_vtabptr_4lxml_5etree_EntityBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "EntityBase", (PyObject *)&__pyx_type_4lxml_5etree_EntityBase) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_EntityBase = &__pyx_type_4lxml_5etree_EntityBase;
-  __pyx_vtabptr_4lxml_5etree__Document = &__pyx_vtable_4lxml_5etree__Document;
-  __pyx_vtable_4lxml_5etree__Document.getroot = (PyObject *(*)(struct LxmlDocument *))__pyx_f_4lxml_5etree_9_Document_getroot;
-  __pyx_vtable_4lxml_5etree__Document.hasdoctype = (int (*)(struct LxmlDocument *))__pyx_f_4lxml_5etree_9_Document_hasdoctype;
-  __pyx_vtable_4lxml_5etree__Document.getdoctype = (PyObject *(*)(struct LxmlDocument *))__pyx_f_4lxml_5etree_9_Document_getdoctype;
-  __pyx_vtable_4lxml_5etree__Document.getxmlinfo = (PyObject *(*)(struct LxmlDocument *))__pyx_f_4lxml_5etree_9_Document_getxmlinfo;
-  __pyx_vtable_4lxml_5etree__Document.isstandalone = (PyObject *(*)(struct LxmlDocument *))__pyx_f_4lxml_5etree_9_Document_isstandalone;
-  __pyx_vtable_4lxml_5etree__Document.buildNewPrefix = (PyObject *(*)(struct LxmlDocument *))__pyx_f_4lxml_5etree_9_Document_buildNewPrefix;
-  __pyx_vtable_4lxml_5etree__Document._findOrBuildNodeNs = (xmlNs *(*)(struct LxmlDocument *, xmlNode *, const xmlChar *, const xmlChar *, int))__pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs;
-  __pyx_vtable_4lxml_5etree__Document._setNodeNs = (int (*)(struct LxmlDocument *, xmlNode *, const xmlChar *))__pyx_f_4lxml_5etree_9_Document__setNodeNs;
-  if (PyType_Ready(&LxmlDocumentType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  LxmlDocumentType.tp_print = 0;
-  if (__Pyx_SetVtable(LxmlDocumentType.tp_dict, __pyx_vtabptr_4lxml_5etree__Document) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_Document", (PyObject *)&LxmlDocumentType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 317; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__Document = &LxmlDocumentType;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__InputDocument) < 0) {__pyx_filename = __pyx_f[11]; __pyx_lineno = 12; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__InputDocument.tp_print = 0;
-  __pyx_ptype_4lxml_5etree__InputDocument = &__pyx_type_4lxml_5etree__InputDocument;
-  __pyx_vtabptr_4lxml_5etree__ElementTree = &__pyx_vtable_4lxml_5etree__ElementTree;
-  __pyx_vtable_4lxml_5etree__ElementTree._assertHasRoot = (int (*)(struct LxmlElementTree *))__pyx_f_4lxml_5etree_12_ElementTree__assertHasRoot;
-  if (PyType_Ready(&LxmlElementTreeType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  LxmlElementTreeType.tp_print = 0;
-  if (__Pyx_SetVtable(LxmlElementTreeType.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementTree) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_ElementTree", (PyObject *)&LxmlElementTreeType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ElementTree = &LxmlElementTreeType;
-  __pyx_vtabptr_4lxml_5etree__ModifyContentOnlyProxy = &__pyx_vtable_4lxml_5etree__ModifyContentOnlyProxy;
-  __pyx_vtable_4lxml_5etree__ModifyContentOnlyProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ReadOnlyProxy;
-  __pyx_type_4lxml_5etree__ModifyContentOnlyProxy.tp_base = __pyx_ptype_4lxml_5etree__ReadOnlyProxy;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ModifyContentOnlyProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ModifyContentOnlyProxy.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ModifyContentOnlyProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ModifyContentOnlyProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ModifyContentOnlyProxy = &__pyx_type_4lxml_5etree__ModifyContentOnlyProxy;
-  __pyx_vtabptr_4lxml_5etree_ParserBasedElementClassLookup = &__pyx_vtable_4lxml_5etree_ParserBasedElementClassLookup;
-  __pyx_vtable_4lxml_5etree_ParserBasedElementClassLookup.__pyx_base = *__pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
-  __pyx_type_4lxml_5etree_ParserBasedElementClassLookup.tp_base = __pyx_ptype_4lxml_5etree_FallbackElementClassLookup;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_ParserBasedElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_ParserBasedElementClassLookup.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ParserBasedElementClassLookup.tp_dict, __pyx_vtabptr_4lxml_5etree_ParserBasedElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "ParserBasedElementClassLookup", (PyObject *)&__pyx_type_4lxml_5etree_ParserBasedElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_ParserBasedElementClassLookup = &__pyx_type_4lxml_5etree_ParserBasedElementClassLookup;
-  __pyx_vtabptr_4lxml_5etree__Validator = &__pyx_vtable_4lxml_5etree__Validator;
-  __pyx_vtable_4lxml_5etree__Validator._append_log_message = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__Validator *, int, int, int, int, PyObject *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_10_Validator__append_log_message;
-  __pyx_vtable_4lxml_5etree__Validator._clear_error_log = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__Validator *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_10_Validator__clear_error_log;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__Validator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__Validator.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__Validator.tp_dict, __pyx_vtabptr_4lxml_5etree__Validator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_Validator", (PyObject *)&__pyx_type_4lxml_5etree__Validator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 3253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__Validator = &__pyx_type_4lxml_5etree__Validator;
-  __pyx_vtabptr_4lxml_5etree_RelaxNG = &__pyx_vtable_4lxml_5etree_RelaxNG;
-  __pyx_vtable_4lxml_5etree_RelaxNG.__pyx_base = *__pyx_vtabptr_4lxml_5etree__Validator;
-  __pyx_type_4lxml_5etree_RelaxNG.tp_base = __pyx_ptype_4lxml_5etree__Validator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_RelaxNG) < 0) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_RelaxNG.tp_print = 0;
+  __pyx_vtabptr_4lxml_5etree__XPathEvaluatorBase = &__pyx_vtable_4lxml_5etree__XPathEvaluatorBase;
+  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase.set_context = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *, xmlXPathContext *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase_set_context;
+  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase._checkAbsolutePath = (int (*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *, char *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__checkAbsolutePath;
+  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase._lock = (int (*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__lock;
+  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase._unlock = (void (*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__unlock;
+  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase._raise_parse_error = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__raise_parse_error;
+  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase._raise_eval_error = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__raise_eval_error;
+  __pyx_vtable_4lxml_5etree__XPathEvaluatorBase._handle_result = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XPathEvaluatorBase *, xmlXPathObject *, struct LxmlDocument *))__pyx_f_4lxml_5etree_19_XPathEvaluatorBase__handle_result;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__XPathEvaluatorBase) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__XPathEvaluatorBase.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XPathEvaluatorBase.tp_dict, __pyx_vtabptr_4lxml_5etree__XPathEvaluatorBase) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_XPathEvaluatorBase", (PyObject *)&__pyx_type_4lxml_5etree__XPathEvaluatorBase) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__XPathEvaluatorBase = &__pyx_type_4lxml_5etree__XPathEvaluatorBase;
+  __pyx_vtabptr_4lxml_5etree_XPathElementEvaluator = &__pyx_vtable_4lxml_5etree_XPathElementEvaluator;
+  __pyx_vtable_4lxml_5etree_XPathElementEvaluator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__XPathEvaluatorBase;
+  __pyx_type_4lxml_5etree_XPathElementEvaluator.tp_base = __pyx_ptype_4lxml_5etree__XPathEvaluatorBase;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_XPathElementEvaluator) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_XPathElementEvaluator.tp_print = 0;
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_RelaxNG, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_XPathElementEvaluator, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
-      __pyx_wrapperbase_4lxml_5etree_7RelaxNG_6__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
-      __pyx_wrapperbase_4lxml_5etree_7RelaxNG_6__call__.doc = __pyx_doc_4lxml_5etree_7RelaxNG_6__call__;
-      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_7RelaxNG_6__call__;
+      __pyx_wrapperbase_4lxml_5etree_21XPathElementEvaluator_6__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
+      __pyx_wrapperbase_4lxml_5etree_21XPathElementEvaluator_6__call__.doc = __pyx_doc_4lxml_5etree_21XPathElementEvaluator_6__call__;
+      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_21XPathElementEvaluator_6__call__;
     }
   }
   #endif
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_RelaxNG.tp_dict, __pyx_vtabptr_4lxml_5etree_RelaxNG) < 0) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "RelaxNG", (PyObject *)&__pyx_type_4lxml_5etree_RelaxNG) < 0) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_RelaxNG = &__pyx_type_4lxml_5etree_RelaxNG;
-  __pyx_vtabptr_4lxml_5etree__LogEntry = &__pyx_vtable_4lxml_5etree__LogEntry;
-  __pyx_vtable_4lxml_5etree__LogEntry._setError = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__LogEntry *, xmlError *))__pyx_f_4lxml_5etree_9_LogEntry__setError;
-  __pyx_vtable_4lxml_5etree__LogEntry._setGeneric = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__LogEntry *, int, int, int, int, PyObject *, PyObject *))__pyx_f_4lxml_5etree_9_LogEntry__setGeneric;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__LogEntry) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__LogEntry.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__LogEntry.tp_dict, __pyx_vtabptr_4lxml_5etree__LogEntry) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_LogEntry", (PyObject *)&__pyx_type_4lxml_5etree__LogEntry) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 39; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__LogEntry = &__pyx_type_4lxml_5etree__LogEntry;
-  __pyx_vtabptr_4lxml_5etree__PythonSaxParserTarget = &__pyx_vtable_4lxml_5etree__PythonSaxParserTarget;
-  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base = *__pyx_vtabptr_4lxml_5etree__SaxParserTarget;
-  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base._handleSaxStart = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxStart;
-  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base._handleSaxEnd = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *))__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxEnd;
-  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base._handleSaxData = (int (*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *))__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxData;
-  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base._handleSaxDoctype = (int (*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxDoctype;
-  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base._handleSaxPi = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxPi;
-  __pyx_vtable_4lxml_5etree__PythonSaxParserTarget.__pyx_base._handleSaxComment = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__SaxParserTarget *, PyObject *))__pyx_f_4lxml_5etree_22_PythonSaxParserTarget__handleSaxComment;
-  __pyx_type_4lxml_5etree__PythonSaxParserTarget.tp_base = __pyx_ptype_4lxml_5etree__SaxParserTarget;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__PythonSaxParserTarget) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__PythonSaxParserTarget.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__PythonSaxParserTarget.tp_dict, __pyx_vtabptr_4lxml_5etree__PythonSaxParserTarget) < 0) {__pyx_filename = __pyx_f[13]; __pyx_lineno = 15; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__PythonSaxParserTarget = &__pyx_type_4lxml_5etree__PythonSaxParserTarget;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_CDATA) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2856; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_CDATA.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "CDATA", (PyObject *)&__pyx_type_4lxml_5etree_CDATA) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2856; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_CDATA = &__pyx_type_4lxml_5etree_CDATA;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_xmlfile) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_xmlfile.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "xmlfile", (PyObject *)&__pyx_type_4lxml_5etree_xmlfile) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 598; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_xmlfile = &__pyx_type_4lxml_5etree_xmlfile;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__DTDElementContentDecl) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__DTDElementContentDecl.tp_print = 0;
-  __pyx_ptype_4lxml_5etree__DTDElementContentDecl = &__pyx_type_4lxml_5etree__DTDElementContentDecl;
-  __pyx_vtabptr_4lxml_5etree__ListErrorLog = &__pyx_vtable_4lxml_5etree__ListErrorLog;
-  __pyx_vtable_4lxml_5etree__ListErrorLog.__pyx_base = *__pyx_vtabptr_4lxml_5etree__BaseErrorLog;
-  __pyx_vtable_4lxml_5etree__ListErrorLog.__pyx_base.copy = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_13_ListErrorLog_copy;
-  __pyx_type_4lxml_5etree__ListErrorLog.tp_base = __pyx_ptype_4lxml_5etree__BaseErrorLog;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ListErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ListErrorLog.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ListErrorLog.tp_dict, __pyx_vtabptr_4lxml_5etree__ListErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_ListErrorLog", (PyObject *)&__pyx_type_4lxml_5etree__ListErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ListErrorLog = &__pyx_type_4lxml_5etree__ListErrorLog;
-  __pyx_vtabptr_4lxml_5etree__ErrorLog = &__pyx_vtable_4lxml_5etree__ErrorLog;
-  __pyx_vtable_4lxml_5etree__ErrorLog.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ListErrorLog;
-  __pyx_vtable_4lxml_5etree__ErrorLog.__pyx_base.__pyx_base.copy = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_9_ErrorLog_copy;
-  __pyx_vtable_4lxml_5etree__ErrorLog.__pyx_base.__pyx_base.receive = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, struct __pyx_obj_4lxml_5etree__LogEntry *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_9_ErrorLog_receive;
-  __pyx_vtable_4lxml_5etree__ErrorLog.__pyx___enter__ = (int (*)(struct __pyx_obj_4lxml_5etree__ErrorLog *))__pyx_f_4lxml_5etree_9_ErrorLog___enter__;
-  __pyx_vtable_4lxml_5etree__ErrorLog.connect = (int (*)(struct __pyx_obj_4lxml_5etree__ErrorLog *))__pyx_f_4lxml_5etree_9_ErrorLog_connect;
-  __pyx_vtable_4lxml_5etree__ErrorLog.disconnect = (int (*)(struct __pyx_obj_4lxml_5etree__ErrorLog *))__pyx_f_4lxml_5etree_9_ErrorLog_disconnect;
-  __pyx_vtable_4lxml_5etree__ErrorLog.clear = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ErrorLog *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_9_ErrorLog_clear;
-  __pyx_type_4lxml_5etree__ErrorLog.tp_base = __pyx_ptype_4lxml_5etree__ListErrorLog;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ErrorLog.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ErrorLog.tp_dict, __pyx_vtabptr_4lxml_5etree__ErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_ErrorLog", (PyObject *)&__pyx_type_4lxml_5etree__ErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ErrorLog = &__pyx_type_4lxml_5etree__ErrorLog;
-  __pyx_vtabptr_4lxml_5etree__ReadOnlyPIProxy = &__pyx_vtable_4lxml_5etree__ReadOnlyPIProxy;
-  __pyx_vtable_4lxml_5etree__ReadOnlyPIProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ReadOnlyProxy;
-  __pyx_type_4lxml_5etree__ReadOnlyPIProxy.tp_base = __pyx_ptype_4lxml_5etree__ReadOnlyProxy;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ReadOnlyPIProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ReadOnlyPIProxy.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ReadOnlyPIProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ReadOnlyPIProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 248; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ReadOnlyPIProxy = &__pyx_type_4lxml_5etree__ReadOnlyPIProxy;
-  __pyx_vtabptr_4lxml_5etree__XSLTResultTree = &__pyx_vtable_4lxml_5etree__XSLTResultTree;
-  __pyx_vtable_4lxml_5etree__XSLTResultTree.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementTree;
-  __pyx_vtable_4lxml_5etree__XSLTResultTree._saveToStringAndSize = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XSLTResultTree *, xmlChar **, int *))__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize;
-  __pyx_type_4lxml_5etree__XSLTResultTree.tp_base = __pyx_ptype_4lxml_5etree__ElementTree;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__XSLTResultTree) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__XSLTResultTree.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XSLTResultTree.tp_dict, __pyx_vtabptr_4lxml_5etree__XSLTResultTree) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_XSLTResultTree", (PyObject *)&__pyx_type_4lxml_5etree__XSLTResultTree) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__XSLTResultTree = &__pyx_type_4lxml_5etree__XSLTResultTree;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementTextIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2744; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_ElementTextIterator.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "ElementTextIterator", (PyObject *)&__pyx_type_4lxml_5etree_ElementTextIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2744; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_ElementTextIterator = &__pyx_type_4lxml_5etree_ElementTextIterator;
-  __pyx_vtabptr_4lxml_5etree__ElementIterator = &__pyx_vtable_4lxml_5etree__ElementIterator;
-  __pyx_vtable_4lxml_5etree__ElementIterator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementTagMatcher;
-  __pyx_vtable_4lxml_5etree__ElementIterator._storeNext = (void (*)(struct LxmlElementIterator *, struct LxmlElement *))__pyx_f_4lxml_5etree_16_ElementIterator__storeNext;
-  LxmlElementIteratorType.tp_base = __pyx_ptype_4lxml_5etree__ElementTagMatcher;
-  if (PyType_Ready(&LxmlElementIteratorType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  LxmlElementIteratorType.tp_print = 0;
-  if (__Pyx_SetVtable(LxmlElementIteratorType.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_ElementIterator", (PyObject *)&LxmlElementIteratorType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2416; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ElementIterator = &LxmlElementIteratorType;
-  LxmlElementBaseType.tp_base = __pyx_ptype_4lxml_5etree__Element;
-  if (PyType_Ready(&LxmlElementBaseType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  LxmlElementBaseType.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XPathElementEvaluator.tp_dict, __pyx_vtabptr_4lxml_5etree_XPathElementEvaluator) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "XPathElementEvaluator", (PyObject *)&__pyx_type_4lxml_5etree_XPathElementEvaluator) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_XPathElementEvaluator = &__pyx_type_4lxml_5etree_XPathElementEvaluator;
+  __pyx_vtabptr_4lxml_5etree_XPathDocumentEvaluator = &__pyx_vtable_4lxml_5etree_XPathDocumentEvaluator;
+  __pyx_vtable_4lxml_5etree_XPathDocumentEvaluator.__pyx_base = *__pyx_vtabptr_4lxml_5etree_XPathElementEvaluator;
+  __pyx_type_4lxml_5etree_XPathDocumentEvaluator.tp_base = __pyx_ptype_4lxml_5etree_XPathElementEvaluator;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_XPathDocumentEvaluator) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_XPathDocumentEvaluator.tp_print = 0;
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&LxmlElementBaseType, "__init__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_XPathDocumentEvaluator, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
-      __pyx_wrapperbase_4lxml_5etree_11ElementBase___init__ = *((PyWrapperDescrObject *)wrapper)->d_base;
-      __pyx_wrapperbase_4lxml_5etree_11ElementBase___init__.doc = __pyx_doc_4lxml_5etree_11ElementBase___init__;
-      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_11ElementBase___init__;
+      __pyx_wrapperbase_4lxml_5etree_22XPathDocumentEvaluator_2__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
+      __pyx_wrapperbase_4lxml_5etree_22XPathDocumentEvaluator_2__call__.doc = __pyx_doc_4lxml_5etree_22XPathDocumentEvaluator_2__call__;
+      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_22XPathDocumentEvaluator_2__call__;
     }
   }
   #endif
-  if (__Pyx_SetAttrString(__pyx_m, "ElementBase", (PyObject *)&LxmlElementBaseType) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 6; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_ElementBase = &LxmlElementBaseType;
-  __pyx_vtabptr_4lxml_5etree_PyErrorLog = &__pyx_vtable_4lxml_5etree_PyErrorLog;
-  __pyx_vtable_4lxml_5etree_PyErrorLog.__pyx_base = *__pyx_vtabptr_4lxml_5etree__BaseErrorLog;
-  __pyx_vtable_4lxml_5etree_PyErrorLog.__pyx_base.copy = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_10PyErrorLog_copy;
-  __pyx_vtable_4lxml_5etree_PyErrorLog.__pyx_base.receive = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, struct __pyx_obj_4lxml_5etree__LogEntry *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_10PyErrorLog_receive;
-  __pyx_type_4lxml_5etree_PyErrorLog.tp_base = __pyx_ptype_4lxml_5etree__BaseErrorLog;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_PyErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_PyErrorLog.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_PyErrorLog.tp_dict, __pyx_vtabptr_4lxml_5etree_PyErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "PyErrorLog", (PyObject *)&__pyx_type_4lxml_5etree_PyErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 466; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_PyErrorLog = &__pyx_type_4lxml_5etree_PyErrorLog;
-  __pyx_vtabptr_4lxml_5etree_DTD = &__pyx_vtable_4lxml_5etree_DTD;
-  __pyx_vtable_4lxml_5etree_DTD.__pyx_base = *__pyx_vtabptr_4lxml_5etree__Validator;
-  __pyx_type_4lxml_5etree_DTD.tp_base = __pyx_ptype_4lxml_5etree__Validator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_DTD) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_DTD.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XPathDocumentEvaluator.tp_dict, __pyx_vtabptr_4lxml_5etree_XPathDocumentEvaluator) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "XPathDocumentEvaluator", (PyObject *)&__pyx_type_4lxml_5etree_XPathDocumentEvaluator) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 326; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_XPathDocumentEvaluator = &__pyx_type_4lxml_5etree_XPathDocumentEvaluator;
+  __pyx_vtabptr_4lxml_5etree_XPath = &__pyx_vtable_4lxml_5etree_XPath;
+  __pyx_vtable_4lxml_5etree_XPath.__pyx_base = *__pyx_vtabptr_4lxml_5etree__XPathEvaluatorBase;
+  __pyx_type_4lxml_5etree_XPath.tp_base = __pyx_ptype_4lxml_5etree__XPathEvaluatorBase;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_XPath) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_XPath.tp_print = 0;
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_DTD, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_XPath, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
-      __pyx_wrapperbase_4lxml_5etree_3DTD_14__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
-      __pyx_wrapperbase_4lxml_5etree_3DTD_14__call__.doc = __pyx_doc_4lxml_5etree_3DTD_14__call__;
-      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_3DTD_14__call__;
+      __pyx_wrapperbase_4lxml_5etree_5XPath_4__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
+      __pyx_wrapperbase_4lxml_5etree_5XPath_4__call__.doc = __pyx_doc_4lxml_5etree_5XPath_4__call__;
+      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_5XPath_4__call__;
     }
   }
   #endif
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_DTD.tp_dict, __pyx_vtabptr_4lxml_5etree_DTD) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "DTD", (PyObject *)&__pyx_type_4lxml_5etree_DTD) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_DTD = &__pyx_type_4lxml_5etree_DTD;
-  __pyx_vtabptr_4lxml_5etree_iterparse = &__pyx_vtable_4lxml_5etree_iterparse;
-  __pyx_vtable_4lxml_5etree_iterparse._close_source = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_iterparse *))__pyx_f_4lxml_5etree_9iterparse__close_source;
-  __pyx_vtable_4lxml_5etree_iterparse._read_more_events = (int (*)(struct __pyx_obj_4lxml_5etree_iterparse *, struct __pyx_obj_4lxml_5etree__SaxParserContext *))__pyx_f_4lxml_5etree_9iterparse__read_more_events;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_iterparse) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_iterparse.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_iterparse.tp_dict, __pyx_vtabptr_4lxml_5etree_iterparse) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "iterparse", (PyObject *)&__pyx_type_4lxml_5etree_iterparse) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 5; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_iterparse = &__pyx_type_4lxml_5etree_iterparse;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_2_iterelements) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree___pyx_scope_struct_2_iterelements.tp_print = 0;
-  __pyx_ptype_4lxml_5etree___pyx_scope_struct_2_iterelements = &__pyx_type_4lxml_5etree___pyx_scope_struct_2_iterelements;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XPath.tp_dict, __pyx_vtabptr_4lxml_5etree_XPath) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "XPath", (PyObject *)&__pyx_type_4lxml_5etree_XPath) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_XPath = &__pyx_type_4lxml_5etree_XPath;
+  __pyx_vtabptr_4lxml_5etree_ETXPath = &__pyx_vtable_4lxml_5etree_ETXPath;
+  __pyx_vtable_4lxml_5etree_ETXPath.__pyx_base = *__pyx_vtabptr_4lxml_5etree_XPath;
+  __pyx_vtable_4lxml_5etree_ETXPath._nsextract_path = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_ETXPath *, PyObject *))__pyx_f_4lxml_5etree_7ETXPath__nsextract_path;
+  __pyx_type_4lxml_5etree_ETXPath.tp_base = __pyx_ptype_4lxml_5etree_XPath;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_ETXPath) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_ETXPath.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ETXPath.tp_dict, __pyx_vtabptr_4lxml_5etree_ETXPath) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "ETXPath", (PyObject *)&__pyx_type_4lxml_5etree_ETXPath) < 0) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_ETXPath = &__pyx_type_4lxml_5etree_ETXPath;
   __pyx_vtabptr_4lxml_5etree__XSLTResolverContext = &__pyx_vtable_4lxml_5etree__XSLTResolverContext;
   __pyx_vtable_4lxml_5etree__XSLTResolverContext.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ResolverContext;
   __pyx_vtable_4lxml_5etree__XSLTResolverContext._copy = (struct __pyx_obj_4lxml_5etree__XSLTResolverContext *(*)(struct __pyx_obj_4lxml_5etree__XSLTResolverContext *))__pyx_f_4lxml_5etree_20_XSLTResolverContext__copy;
@@ -188844,220 +189440,117 @@ PyMODINIT_FUNC PyInit_etree(void)
   __pyx_type_4lxml_5etree__XSLTResolverContext.tp_print = 0;
   if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XSLTResolverContext.tp_dict, __pyx_vtabptr_4lxml_5etree__XSLTResolverContext) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 52; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree__XSLTResolverContext = &__pyx_type_4lxml_5etree__XSLTResolverContext;
-  __pyx_vtabptr_4lxml_5etree__ParserDictionaryContext = &__pyx_vtable_4lxml_5etree__ParserDictionaryContext;
-  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.initMainParserContext = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_initMainParserContext;
-  __pyx_vtable_4lxml_5etree__ParserDictionaryContext._findThreadParserContext = (struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *(*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext__findThreadParserContext;
-  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.setDefaultParser = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_setDefaultParser;
-  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.getDefaultParser = (struct __pyx_obj_4lxml_5etree__BaseParser *(*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_getDefaultParser;
-  __pyx_vtable_4lxml_5etree__ParserDictionaryContext._getThreadDict = (xmlDict *(*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDict *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext__getThreadDict;
-  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.initThreadDictRef = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDict **))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_initThreadDictRef;
-  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.initParserDict = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlParserCtxt *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_initParserDict;
-  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.initXPathParserDict = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlXPathContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_initXPathParserDict;
-  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.initDocDict = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, xmlDoc *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_initDocDict;
-  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.findImpliedContext = (struct __pyx_obj_4lxml_5etree__ParserContext *(*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_findImpliedContext;
-  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.pushImpliedContextFromParser = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__BaseParser *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContextFromParser;
-  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.pushImpliedContext = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *, struct __pyx_obj_4lxml_5etree__ParserContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_pushImpliedContext;
-  __pyx_vtable_4lxml_5etree__ParserDictionaryContext.popImpliedContext = (void (*)(struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *))__pyx_f_4lxml_5etree_24_ParserDictionaryContext_popImpliedContext;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ParserDictionaryContext) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ParserDictionaryContext.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ParserDictionaryContext.tp_dict, __pyx_vtabptr_4lxml_5etree__ParserDictionaryContext) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 42; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ParserDictionaryContext = &__pyx_type_4lxml_5etree__ParserDictionaryContext;
-  __pyx_vtabptr_4lxml_5etree_iterwalk = &__pyx_vtable_4lxml_5etree_iterwalk;
-  __pyx_vtable_4lxml_5etree_iterwalk._start_node = (int (*)(struct __pyx_obj_4lxml_5etree_iterwalk *, struct LxmlElement *))__pyx_f_4lxml_5etree_8iterwalk__start_node;
-  __pyx_vtable_4lxml_5etree_iterwalk._end_node = (struct LxmlElement *(*)(struct __pyx_obj_4lxml_5etree_iterwalk *))__pyx_f_4lxml_5etree_8iterwalk__end_node;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_iterwalk) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_iterwalk.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_iterwalk.tp_dict, __pyx_vtabptr_4lxml_5etree_iterwalk) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "iterwalk", (PyObject *)&__pyx_type_4lxml_5etree_iterwalk) < 0) {__pyx_filename = __pyx_f[14]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_iterwalk = &__pyx_type_4lxml_5etree_iterwalk;
-  __pyx_vtabptr_4lxml_5etree__DomainErrorLog = &__pyx_vtable_4lxml_5etree__DomainErrorLog;
-  __pyx_vtable_4lxml_5etree__DomainErrorLog.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ErrorLog;
-  __pyx_vtable_4lxml_5etree__DomainErrorLog.__pyx_base.__pyx_base.__pyx_base.receive = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, struct __pyx_obj_4lxml_5etree__LogEntry *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_15_DomainErrorLog_receive;
-  __pyx_type_4lxml_5etree__DomainErrorLog.tp_base = __pyx_ptype_4lxml_5etree__ErrorLog;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__DomainErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__DomainErrorLog.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__DomainErrorLog.tp_dict, __pyx_vtabptr_4lxml_5etree__DomainErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_DomainErrorLog", (PyObject *)&__pyx_type_4lxml_5etree__DomainErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__DomainErrorLog = &__pyx_type_4lxml_5etree__DomainErrorLog;
-  __pyx_vtabptr_4lxml_5etree_AttributeBasedElementClassLookup = &__pyx_vtable_4lxml_5etree_AttributeBasedElementClassLookup;
-  __pyx_vtable_4lxml_5etree_AttributeBasedElementClassLookup.__pyx_base = *__pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
-  __pyx_type_4lxml_5etree_AttributeBasedElementClassLookup.tp_base = __pyx_ptype_4lxml_5etree_FallbackElementClassLookup;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_AttributeBasedElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_AttributeBasedElementClassLookup.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_AttributeBasedElementClassLookup.tp_dict, __pyx_vtabptr_4lxml_5etree_AttributeBasedElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "AttributeBasedElementClassLookup", (PyObject *)&__pyx_type_4lxml_5etree_AttributeBasedElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_AttributeBasedElementClassLookup = &__pyx_type_4lxml_5etree_AttributeBasedElementClassLookup;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_DocInfo) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_DocInfo.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "DocInfo", (PyObject *)&__pyx_type_4lxml_5etree_DocInfo) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 488; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_DocInfo = &__pyx_type_4lxml_5etree_DocInfo;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_XInclude) < 0) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_XInclude.tp_print = 0;
+  __pyx_vtabptr_4lxml_5etree_XSLTAccessControl = &__pyx_vtable_4lxml_5etree_XSLTAccessControl;
+  __pyx_vtable_4lxml_5etree_XSLTAccessControl._setAccess = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltSecurityOption, int))__pyx_f_4lxml_5etree_17XSLTAccessControl__setAccess;
+  __pyx_vtable_4lxml_5etree_XSLTAccessControl._register_in_context = (void (*)(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltTransformContext *))__pyx_f_4lxml_5etree_17XSLTAccessControl__register_in_context;
+  __pyx_vtable_4lxml_5etree_XSLTAccessControl._optval = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltSecurityOption))__pyx_f_4lxml_5etree_17XSLTAccessControl__optval;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_XSLTAccessControl) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_XSLTAccessControl.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XSLTAccessControl.tp_dict, __pyx_vtabptr_4lxml_5etree_XSLTAccessControl) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "XSLTAccessControl", (PyObject *)&__pyx_type_4lxml_5etree_XSLTAccessControl) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_XSLTAccessControl = &__pyx_type_4lxml_5etree_XSLTAccessControl;
+  __pyx_vtabptr_4lxml_5etree__XSLTContext = &__pyx_vtable_4lxml_5etree__XSLTContext;
+  __pyx_vtable_4lxml_5etree__XSLTContext.__pyx_base = *__pyx_vtabptr_4lxml_5etree__BaseContext;
+  __pyx_vtable_4lxml_5etree__XSLTContext.__pyx_base._copy = (struct __pyx_obj_4lxml_5etree__BaseContext *(*)(struct __pyx_obj_4lxml_5etree__BaseContext *))__pyx_f_4lxml_5etree_12_XSLTContext__copy;
+  __pyx_vtable_4lxml_5etree__XSLTContext.register_context = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XSLTContext *, xsltTransformContext *, struct LxmlDocument *))__pyx_f_4lxml_5etree_12_XSLTContext_register_context;
+  __pyx_vtable_4lxml_5etree__XSLTContext.free_context = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XSLTContext *))__pyx_f_4lxml_5etree_12_XSLTContext_free_context;
+  __pyx_type_4lxml_5etree__XSLTContext.tp_base = __pyx_ptype_4lxml_5etree__BaseContext;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__XSLTContext) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__XSLTContext.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XSLTContext.tp_dict, __pyx_vtabptr_4lxml_5etree__XSLTContext) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 271; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__XSLTContext = &__pyx_type_4lxml_5etree__XSLTContext;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__XSLTQuotedStringParam) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__XSLTQuotedStringParam.tp_print = 0;
+  __pyx_ptype_4lxml_5etree__XSLTQuotedStringParam = &__pyx_type_4lxml_5etree__XSLTQuotedStringParam;
+  __pyx_vtabptr_4lxml_5etree_XSLT = &__pyx_vtable_4lxml_5etree_XSLT;
+  __pyx_vtable_4lxml_5etree_XSLT._run_transform = (xmlDoc *(*)(struct __pyx_obj_4lxml_5etree_XSLT *, xmlDoc *, const char **, struct __pyx_obj_4lxml_5etree__XSLTContext *, xsltTransformContext *))__pyx_f_4lxml_5etree_4XSLT__run_transform;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_XSLT) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_XSLT.tp_print = 0;
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_XInclude, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_XSLT, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
-      __pyx_wrapperbase_4lxml_5etree_8XInclude_2__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
-      __pyx_wrapperbase_4lxml_5etree_8XInclude_2__call__.doc = __pyx_doc_4lxml_5etree_8XInclude_2__call__;
-      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_8XInclude_2__call__;
+      __pyx_wrapperbase_4lxml_5etree_4XSLT_18__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
+      __pyx_wrapperbase_4lxml_5etree_4XSLT_18__call__.doc = __pyx_doc_4lxml_5etree_4XSLT_18__call__;
+      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_4XSLT_18__call__;
     }
   }
   #endif
-  if (__Pyx_SetAttrString(__pyx_m, "XInclude", (PyObject *)&__pyx_type_4lxml_5etree_XInclude) < 0) {__pyx_filename = __pyx_f[16]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_XInclude = &__pyx_type_4lxml_5etree_XInclude;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XSLT.tp_dict, __pyx_vtabptr_4lxml_5etree_XSLT) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "XSLT", (PyObject *)&__pyx_type_4lxml_5etree_XSLT) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 334; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_XSLT = &__pyx_type_4lxml_5etree_XSLT;
+  __pyx_vtabptr_4lxml_5etree__XSLTResultTree = &__pyx_vtable_4lxml_5etree__XSLTResultTree;
+  __pyx_vtable_4lxml_5etree__XSLTResultTree.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementTree;
+  __pyx_vtable_4lxml_5etree__XSLTResultTree._saveToStringAndSize = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__XSLTResultTree *, xmlChar **, int *))__pyx_f_4lxml_5etree_15_XSLTResultTree__saveToStringAndSize;
+  __pyx_type_4lxml_5etree__XSLTResultTree.tp_base = __pyx_ptype_4lxml_5etree__ElementTree;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__XSLTResultTree) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__XSLTResultTree.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XSLTResultTree.tp_dict, __pyx_vtabptr_4lxml_5etree__XSLTResultTree) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_XSLTResultTree", (PyObject *)&__pyx_type_4lxml_5etree__XSLTResultTree) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 698; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__XSLTResultTree = &__pyx_type_4lxml_5etree__XSLTResultTree;
+  __pyx_vtabptr_4lxml_5etree__XSLTProcessingInstruction = &__pyx_vtable_4lxml_5etree__XSLTProcessingInstruction;
+  __pyx_vtable_4lxml_5etree__XSLTProcessingInstruction.__pyx_base = *__pyx_vtabptr_4lxml_5etree_PIBase;
+  __pyx_type_4lxml_5etree__XSLTProcessingInstruction.tp_base = __pyx_ptype_4lxml_5etree_PIBase;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__XSLTProcessingInstruction) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__XSLTProcessingInstruction.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__XSLTProcessingInstruction.tp_dict, __pyx_vtabptr_4lxml_5etree__XSLTProcessingInstruction) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "_XSLTProcessingInstruction", (PyObject *)&__pyx_type_4lxml_5etree__XSLTProcessingInstruction) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 849; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree__XSLTProcessingInstruction = &__pyx_type_4lxml_5etree__XSLTProcessingInstruction;
+  __pyx_vtabptr_4lxml_5etree_XSLTExtension = &__pyx_vtable_4lxml_5etree_XSLTExtension;
+  __pyx_vtable_4lxml_5etree_XSLTExtension._collectXSLTResultContent = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_XSLTExtension *, struct __pyx_obj_4lxml_5etree__XSLTContext *, xmlNode *, int, int))__pyx_f_4lxml_5etree_13XSLTExtension__collectXSLTResultContent;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_XSLTExtension) < 0) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_XSLTExtension.tp_print = 0;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XSLTExtension.tp_dict, __pyx_vtabptr_4lxml_5etree_XSLTExtension) < 0) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "XSLTExtension", (PyObject *)&__pyx_type_4lxml_5etree_XSLTExtension) < 0) {__pyx_filename = __pyx_f[19]; __pyx_lineno = 3; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_XSLTExtension = &__pyx_type_4lxml_5etree_XSLTExtension;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__DTDElementContentDecl) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__DTDElementContentDecl.tp_print = 0;
+  __pyx_ptype_4lxml_5etree__DTDElementContentDecl = &__pyx_type_4lxml_5etree__DTDElementContentDecl;
   if (PyType_Ready(&__pyx_type_4lxml_5etree__DTDAttributeDecl) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_type_4lxml_5etree__DTDAttributeDecl.tp_print = 0;
   __pyx_ptype_4lxml_5etree__DTDAttributeDecl = &__pyx_type_4lxml_5etree__DTDAttributeDecl;
-  __pyx_vtabptr_4lxml_5etree_XMLSchema = &__pyx_vtable_4lxml_5etree_XMLSchema;
-  __pyx_vtable_4lxml_5etree_XMLSchema.__pyx_base = *__pyx_vtabptr_4lxml_5etree__Validator;
-  __pyx_vtable_4lxml_5etree_XMLSchema._newSaxValidator = (struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *(*)(struct __pyx_obj_4lxml_5etree_XMLSchema *, int))__pyx_f_4lxml_5etree_9XMLSchema__newSaxValidator;
-  __pyx_type_4lxml_5etree_XMLSchema.tp_base = __pyx_ptype_4lxml_5etree__Validator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_XMLSchema) < 0) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_XMLSchema.tp_print = 0;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__DTDElementDecl) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 179; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__DTDElementDecl.tp_print = 0;
+  __pyx_ptype_4lxml_5etree__DTDElementDecl = &__pyx_type_4lxml_5etree__DTDElementDecl;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__DTDEntityDecl) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__DTDEntityDecl.tp_print = 0;
+  __pyx_ptype_4lxml_5etree__DTDEntityDecl = &__pyx_type_4lxml_5etree__DTDEntityDecl;
+  __pyx_vtabptr_4lxml_5etree_DTD = &__pyx_vtable_4lxml_5etree_DTD;
+  __pyx_vtable_4lxml_5etree_DTD.__pyx_base = *__pyx_vtabptr_4lxml_5etree__Validator;
+  __pyx_type_4lxml_5etree_DTD.tp_base = __pyx_ptype_4lxml_5etree__Validator;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_DTD) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_DTD.tp_print = 0;
   #if CYTHON_COMPILING_IN_CPYTHON
   {
-    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_XMLSchema, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_DTD, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
-      __pyx_wrapperbase_4lxml_5etree_9XMLSchema_6__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
-      __pyx_wrapperbase_4lxml_5etree_9XMLSchema_6__call__.doc = __pyx_doc_4lxml_5etree_9XMLSchema_6__call__;
-      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_9XMLSchema_6__call__;
+      __pyx_wrapperbase_4lxml_5etree_3DTD_14__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
+      __pyx_wrapperbase_4lxml_5etree_3DTD_14__call__.doc = __pyx_doc_4lxml_5etree_3DTD_14__call__;
+      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_3DTD_14__call__;
     }
   }
   #endif
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XMLSchema.tp_dict, __pyx_vtabptr_4lxml_5etree_XMLSchema) < 0) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "XMLSchema", (PyObject *)&__pyx_type_4lxml_5etree_XMLSchema) < 0) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 26; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_XMLSchema = &__pyx_type_4lxml_5etree_XMLSchema;
-  __pyx_vtabptr_4lxml_5etree__ElementMatchIterator = &__pyx_vtable_4lxml_5etree__ElementMatchIterator;
-  __pyx_vtable_4lxml_5etree__ElementMatchIterator._initTagMatcher = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, PyObject *))__pyx_f_4lxml_5etree_21_ElementMatchIterator__initTagMatcher;
-  __pyx_vtable_4lxml_5etree__ElementMatchIterator._storeNext = (int (*)(struct __pyx_obj_4lxml_5etree__ElementMatchIterator *, struct LxmlElement *))__pyx_f_4lxml_5etree_21_ElementMatchIterator__storeNext;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ElementMatchIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ElementMatchIterator.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ElementMatchIterator.tp_dict, __pyx_vtabptr_4lxml_5etree__ElementMatchIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_ElementMatchIterator", (PyObject *)&__pyx_type_4lxml_5etree__ElementMatchIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2594; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ElementMatchIterator = &__pyx_type_4lxml_5etree__ElementMatchIterator;
-  __pyx_vtabptr_4lxml_5etree_AncestorsIterator = &__pyx_vtable_4lxml_5etree_AncestorsIterator;
-  __pyx_vtable_4lxml_5etree_AncestorsIterator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementMatchIterator;
-  __pyx_type_4lxml_5etree_AncestorsIterator.tp_base = __pyx_ptype_4lxml_5etree__ElementMatchIterator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_AncestorsIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_AncestorsIterator.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_AncestorsIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_AncestorsIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "AncestorsIterator", (PyObject *)&__pyx_type_4lxml_5etree_AncestorsIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_AncestorsIterator = &__pyx_type_4lxml_5etree_AncestorsIterator;
-  __pyx_vtabptr_4lxml_5etree_HTMLParser = &__pyx_vtable_4lxml_5etree_HTMLParser;
-  __pyx_vtable_4lxml_5etree_HTMLParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree__FeedParser;
-  __pyx_type_4lxml_5etree_HTMLParser.tp_base = __pyx_ptype_4lxml_5etree__FeedParser;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_HTMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_HTMLParser.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_HTMLParser.tp_dict, __pyx_vtabptr_4lxml_5etree_HTMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "HTMLParser", (PyObject *)&__pyx_type_4lxml_5etree_HTMLParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1494; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_HTMLParser = &__pyx_type_4lxml_5etree_HTMLParser;
-  __pyx_vtabptr_4lxml_5etree_HTMLPullParser = &__pyx_vtable_4lxml_5etree_HTMLPullParser;
-  __pyx_vtable_4lxml_5etree_HTMLPullParser.__pyx_base = *__pyx_vtabptr_4lxml_5etree_HTMLParser;
-  __pyx_type_4lxml_5etree_HTMLPullParser.tp_base = __pyx_ptype_4lxml_5etree_HTMLParser;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_HTMLPullParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_HTMLPullParser.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_HTMLPullParser.tp_dict, __pyx_vtabptr_4lxml_5etree_HTMLPullParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "HTMLPullParser", (PyObject *)&__pyx_type_4lxml_5etree_HTMLPullParser) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_HTMLPullParser = &__pyx_type_4lxml_5etree_HTMLPullParser;
-  __pyx_vtabptr_4lxml_5etree__IDDict = &__pyx_vtable_4lxml_5etree__IDDict;
-  __pyx_vtable_4lxml_5etree__IDDict._build_keys = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__IDDict *))__pyx_f_4lxml_5etree_7_IDDict__build_keys;
-  __pyx_vtable_4lxml_5etree__IDDict._build_items = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__IDDict *))__pyx_f_4lxml_5etree_7_IDDict__build_items;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__IDDict) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__IDDict.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__IDDict.tp_dict, __pyx_vtabptr_4lxml_5etree__IDDict) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_IDDict", (PyObject *)&__pyx_type_4lxml_5etree__IDDict) < 0) {__pyx_filename = __pyx_f[15]; __pyx_lineno = 58; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__IDDict = &__pyx_type_4lxml_5etree__IDDict;
-  __pyx_vtabptr_4lxml_5etree_ElementNamespaceClassLookup = &__pyx_vtable_4lxml_5etree_ElementNamespaceClassLookup;
-  __pyx_vtable_4lxml_5etree_ElementNamespaceClassLookup.__pyx_base = *__pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
-  __pyx_type_4lxml_5etree_ElementNamespaceClassLookup.tp_base = __pyx_ptype_4lxml_5etree_FallbackElementClassLookup;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementNamespaceClassLookup) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_ElementNamespaceClassLookup.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ElementNamespaceClassLookup.tp_dict, __pyx_vtabptr_4lxml_5etree_ElementNamespaceClassLookup) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "ElementNamespaceClassLookup", (PyObject *)&__pyx_type_4lxml_5etree_ElementNamespaceClassLookup) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_ElementNamespaceClassLookup = &__pyx_type_4lxml_5etree_ElementNamespaceClassLookup;
-  __pyx_vtabptr_4lxml_5etree__AppendOnlyElementProxy = &__pyx_vtable_4lxml_5etree__AppendOnlyElementProxy;
-  __pyx_vtable_4lxml_5etree__AppendOnlyElementProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ReadOnlyElementProxy;
-  __pyx_vtable_4lxml_5etree__AppendOnlyElementProxy.append = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__AppendOnlyElementProxy *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_23_AppendOnlyElementProxy_append;
-  __pyx_type_4lxml_5etree__AppendOnlyElementProxy.tp_base = __pyx_ptype_4lxml_5etree__ReadOnlyElementProxy;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__AppendOnlyElementProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__AppendOnlyElementProxy.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__AppendOnlyElementProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__AppendOnlyElementProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 472; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__AppendOnlyElementProxy = &__pyx_type_4lxml_5etree__AppendOnlyElementProxy;
-  __pyx_vtabptr_4lxml_5etree__ModifyContentOnlyEntityProxy = &__pyx_vtable_4lxml_5etree__ModifyContentOnlyEntityProxy;
-  __pyx_vtable_4lxml_5etree__ModifyContentOnlyEntityProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyProxy;
-  __pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy.tp_base = __pyx_ptype_4lxml_5etree__ModifyContentOnlyProxy;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ModifyContentOnlyEntityProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ModifyContentOnlyEntityProxy = &__pyx_type_4lxml_5etree__ModifyContentOnlyEntityProxy;
-  __pyx_vtabptr_4lxml_5etree__ReadOnlyEntityProxy = &__pyx_vtable_4lxml_5etree__ReadOnlyEntityProxy;
-  __pyx_vtable_4lxml_5etree__ReadOnlyEntityProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ReadOnlyProxy;
-  __pyx_type_4lxml_5etree__ReadOnlyEntityProxy.tp_base = __pyx_ptype_4lxml_5etree__ReadOnlyProxy;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ReadOnlyEntityProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ReadOnlyEntityProxy.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ReadOnlyEntityProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ReadOnlyEntityProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ReadOnlyEntityProxy = &__pyx_type_4lxml_5etree__ReadOnlyEntityProxy;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__FileWriterElement) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__FileWriterElement.tp_print = 0;
-  __pyx_ptype_4lxml_5etree__FileWriterElement = &__pyx_type_4lxml_5etree__FileWriterElement;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__MemDebug) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__MemDebug.tp_print = 0;
-  __pyx_ptype_4lxml_5etree__MemDebug = &__pyx_type_4lxml_5etree__MemDebug;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__Attrib) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__Attrib.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "_Attrib", (PyObject *)&__pyx_type_4lxml_5etree__Attrib) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__Attrib = &__pyx_type_4lxml_5etree__Attrib;
-  __pyx_type_4lxml_5etree_ElementDefaultClassLookup.tp_base = __pyx_ptype_4lxml_5etree_ElementClassLookup;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementDefaultClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_ElementDefaultClassLookup.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "ElementDefaultClassLookup", (PyObject *)&__pyx_type_4lxml_5etree_ElementDefaultClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_ElementDefaultClassLookup = &__pyx_type_4lxml_5etree_ElementDefaultClassLookup;
-  __pyx_type_4lxml_5etree__ElementUnicodeResult.tp_base = (&PyUnicode_Type);
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ElementUnicodeResult) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ElementUnicodeResult.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "_ElementUnicodeResult", (PyObject *)&__pyx_type_4lxml_5etree__ElementUnicodeResult) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ElementUnicodeResult = &__pyx_type_4lxml_5etree__ElementUnicodeResult;
-  __pyx_vtabptr_4lxml_5etree__ExsltRegExp = &__pyx_vtable_4lxml_5etree__ExsltRegExp;
-  __pyx_vtable_4lxml_5etree__ExsltRegExp._make_string = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, PyObject *))__pyx_f_4lxml_5etree_12_ExsltRegExp__make_string;
-  __pyx_vtable_4lxml_5etree__ExsltRegExp._compile = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, PyObject *, PyObject *))__pyx_f_4lxml_5etree_12_ExsltRegExp__compile;
-  __pyx_vtable_4lxml_5etree__ExsltRegExp._register_in_context = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__ExsltRegExp *, struct __pyx_obj_4lxml_5etree__BaseContext *))__pyx_f_4lxml_5etree_12_ExsltRegExp__register_in_context;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ExsltRegExp) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ExsltRegExp.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ExsltRegExp.tp_dict, __pyx_vtabptr_4lxml_5etree__ExsltRegExp) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ExsltRegExp = &__pyx_type_4lxml_5etree__ExsltRegExp;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_QName) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_QName.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "QName", (PyObject *)&__pyx_type_4lxml_5etree_QName) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1666; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_QName = &__pyx_type_4lxml_5etree_QName;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_3_iterentities) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree___pyx_scope_struct_3_iterentities.tp_print = 0;
-  __pyx_ptype_4lxml_5etree___pyx_scope_struct_3_iterentities = &__pyx_type_4lxml_5etree___pyx_scope_struct_3_iterentities;
-  __pyx_vtabptr_4lxml_5etree__TempStore = &__pyx_vtable_4lxml_5etree__TempStore;
-  __pyx_vtable_4lxml_5etree__TempStore.add = (int (*)(struct __pyx_obj_4lxml_5etree__TempStore *, PyObject *))__pyx_f_4lxml_5etree_10_TempStore_add;
-  __pyx_vtable_4lxml_5etree__TempStore.clear = (int (*)(struct __pyx_obj_4lxml_5etree__TempStore *))__pyx_f_4lxml_5etree_10_TempStore_clear;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__TempStore) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__TempStore.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__TempStore.tp_dict, __pyx_vtabptr_4lxml_5etree__TempStore) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__TempStore = &__pyx_type_4lxml_5etree__TempStore;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__OpaqueNodeWrapper) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 365; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__OpaqueNodeWrapper.tp_print = 0;
-  __pyx_ptype_4lxml_5etree__OpaqueNodeWrapper = &__pyx_type_4lxml_5etree__OpaqueNodeWrapper;
-  __pyx_vtabptr_4lxml_5etree__FilelikeWriter = &__pyx_vtable_4lxml_5etree__FilelikeWriter;
-  __pyx_vtable_4lxml_5etree__FilelikeWriter._createOutputBuffer = (xmlOutputBuffer *(*)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, xmlCharEncodingHandler *))__pyx_f_4lxml_5etree_15_FilelikeWriter__createOutputBuffer;
-  __pyx_vtable_4lxml_5etree__FilelikeWriter.write = (int (*)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *, char *, int))__pyx_f_4lxml_5etree_15_FilelikeWriter_write;
-  __pyx_vtable_4lxml_5etree__FilelikeWriter.close = (int (*)(struct __pyx_obj_4lxml_5etree__FilelikeWriter *))__pyx_f_4lxml_5etree_15_FilelikeWriter_close;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__FilelikeWriter) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__FilelikeWriter.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__FilelikeWriter.tp_dict, __pyx_vtabptr_4lxml_5etree__FilelikeWriter) < 0) {__pyx_filename = __pyx_f[7]; __pyx_lineno = 369; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__FilelikeWriter = &__pyx_type_4lxml_5etree__FilelikeWriter;
-  __pyx_vtabptr_4lxml_5etree__OpaqueDocumentWrapper = &__pyx_vtable_4lxml_5etree__OpaqueDocumentWrapper;
-  __pyx_vtable_4lxml_5etree__OpaqueDocumentWrapper._assertNode = (int (*)(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *))__pyx_f_4lxml_5etree_22_OpaqueDocumentWrapper__assertNode;
-  __pyx_vtable_4lxml_5etree__OpaqueDocumentWrapper.append = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__OpaqueDocumentWrapper *, PyObject *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_22_OpaqueDocumentWrapper_append;
-  __pyx_type_4lxml_5etree__OpaqueDocumentWrapper.tp_base = __pyx_ptype_4lxml_5etree__OpaqueNodeWrapper;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__OpaqueDocumentWrapper) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__OpaqueDocumentWrapper.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__OpaqueDocumentWrapper.tp_dict, __pyx_vtabptr_4lxml_5etree__OpaqueDocumentWrapper) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 372; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__OpaqueDocumentWrapper = &__pyx_type_4lxml_5etree__OpaqueDocumentWrapper;
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_DTD.tp_dict, __pyx_vtabptr_4lxml_5etree_DTD) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "DTD", (PyObject *)&__pyx_type_4lxml_5etree_DTD) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 267; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_DTD = &__pyx_type_4lxml_5etree_DTD;
+  __pyx_vtabptr_4lxml_5etree_RelaxNG = &__pyx_vtable_4lxml_5etree_RelaxNG;
+  __pyx_vtable_4lxml_5etree_RelaxNG.__pyx_base = *__pyx_vtabptr_4lxml_5etree__Validator;
+  __pyx_type_4lxml_5etree_RelaxNG.tp_base = __pyx_ptype_4lxml_5etree__Validator;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree_RelaxNG) < 0) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree_RelaxNG.tp_print = 0;
+  #if CYTHON_COMPILING_IN_CPYTHON
+  {
+    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_5etree_RelaxNG, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
+      __pyx_wrapperbase_4lxml_5etree_7RelaxNG_6__call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
+      __pyx_wrapperbase_4lxml_5etree_7RelaxNG_6__call__.doc = __pyx_doc_4lxml_5etree_7RelaxNG_6__call__;
+      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_5etree_7RelaxNG_6__call__;
+    }
+  }
+  #endif
+  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_RelaxNG.tp_dict, __pyx_vtabptr_4lxml_5etree_RelaxNG) < 0) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (__Pyx_SetAttrString(__pyx_m, "RelaxNG", (PyObject *)&__pyx_type_4lxml_5etree_RelaxNG) < 0) {__pyx_filename = __pyx_f[21]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_5etree_RelaxNG = &__pyx_type_4lxml_5etree_RelaxNG;
   __pyx_vtabptr_4lxml_5etree_Schematron = &__pyx_vtable_4lxml_5etree_Schematron;
   __pyx_vtable_4lxml_5etree_Schematron.__pyx_base = *__pyx_vtabptr_4lxml_5etree__Validator;
   __pyx_type_4lxml_5etree_Schematron.tp_base = __pyx_ptype_4lxml_5etree__Validator;
@@ -189076,81 +189569,21 @@ PyMODINIT_FUNC PyInit_etree(void)
   if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_Schematron.tp_dict, __pyx_vtabptr_4lxml_5etree_Schematron) < 0) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__Pyx_SetAttrString(__pyx_m, "Schematron", (PyObject *)&__pyx_type_4lxml_5etree_Schematron) < 0) {__pyx_filename = __pyx_f[23]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_5etree_Schematron = &__pyx_type_4lxml_5etree_Schematron;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ErrorLogContext) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 373; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ErrorLogContext.tp_print = 0;
-  __pyx_ptype_4lxml_5etree__ErrorLogContext = &__pyx_type_4lxml_5etree__ErrorLogContext;
-  __pyx_vtabptr_4lxml_5etree_XSLTAccessControl = &__pyx_vtable_4lxml_5etree_XSLTAccessControl;
-  __pyx_vtable_4lxml_5etree_XSLTAccessControl._setAccess = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltSecurityOption, int))__pyx_f_4lxml_5etree_17XSLTAccessControl__setAccess;
-  __pyx_vtable_4lxml_5etree_XSLTAccessControl._register_in_context = (void (*)(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltTransformContext *))__pyx_f_4lxml_5etree_17XSLTAccessControl__register_in_context;
-  __pyx_vtable_4lxml_5etree_XSLTAccessControl._optval = (PyObject *(*)(struct __pyx_obj_4lxml_5etree_XSLTAccessControl *, xsltSecurityOption))__pyx_f_4lxml_5etree_17XSLTAccessControl__optval;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_XSLTAccessControl) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_XSLTAccessControl.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_XSLTAccessControl.tp_dict, __pyx_vtabptr_4lxml_5etree_XSLTAccessControl) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "XSLTAccessControl", (PyObject *)&__pyx_type_4lxml_5etree_XSLTAccessControl) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 168; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_XSLTAccessControl = &__pyx_type_4lxml_5etree_XSLTAccessControl;
-  __pyx_vtabptr_4lxml_5etree_SiblingsIterator = &__pyx_vtable_4lxml_5etree_SiblingsIterator;
-  __pyx_vtable_4lxml_5etree_SiblingsIterator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementMatchIterator;
-  __pyx_type_4lxml_5etree_SiblingsIterator.tp_base = __pyx_ptype_4lxml_5etree__ElementMatchIterator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_SiblingsIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_SiblingsIterator.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_SiblingsIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_SiblingsIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "SiblingsIterator", (PyObject *)&__pyx_type_4lxml_5etree_SiblingsIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2643; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_SiblingsIterator = &__pyx_type_4lxml_5etree_SiblingsIterator;
-  __pyx_vtabptr_4lxml_5etree__ModifyContentOnlyPIProxy = &__pyx_vtable_4lxml_5etree__ModifyContentOnlyPIProxy;
-  __pyx_vtable_4lxml_5etree__ModifyContentOnlyPIProxy.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ModifyContentOnlyProxy;
-  __pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy.tp_base = __pyx_ptype_4lxml_5etree__ModifyContentOnlyProxy;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ModifyContentOnlyPIProxy) < 0) {__pyx_filename = __pyx_f[5]; __pyx_lineno = 439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ModifyContentOnlyPIProxy = &__pyx_type_4lxml_5etree__ModifyContentOnlyPIProxy;
-  __pyx_vtabptr_4lxml_5etree__ClassNamespaceRegistry = &__pyx_vtable_4lxml_5etree__ClassNamespaceRegistry;
-  __pyx_vtable_4lxml_5etree__ClassNamespaceRegistry.__pyx_base = *__pyx_vtabptr_4lxml_5etree__NamespaceRegistry;
-  __pyx_type_4lxml_5etree__ClassNamespaceRegistry.tp_base = __pyx_ptype_4lxml_5etree__NamespaceRegistry;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ClassNamespaceRegistry) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ClassNamespaceRegistry.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ClassNamespaceRegistry.tp_dict, __pyx_vtabptr_4lxml_5etree__ClassNamespaceRegistry) < 0) {__pyx_filename = __pyx_f[10]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ClassNamespaceRegistry = &__pyx_type_4lxml_5etree__ClassNamespaceRegistry;
-  __pyx_vtabptr_4lxml_5etree__ParserSchemaValidationContext = &__pyx_vtable_4lxml_5etree__ParserSchemaValidationContext;
-  __pyx_vtable_4lxml_5etree__ParserSchemaValidationContext.copy = (struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *(*)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *))__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_copy;
-  __pyx_vtable_4lxml_5etree__ParserSchemaValidationContext.inject_default_attributes = (void (*)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *, xmlDoc *))__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_inject_default_attributes;
-  __pyx_vtable_4lxml_5etree__ParserSchemaValidationContext.connect = (int (*)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *, xmlParserCtxt *, struct __pyx_obj_4lxml_5etree__BaseErrorLog *))__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_connect;
-  __pyx_vtable_4lxml_5etree__ParserSchemaValidationContext.disconnect = (void (*)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *))__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_disconnect;
-  __pyx_vtable_4lxml_5etree__ParserSchemaValidationContext.isvalid = (int (*)(struct __pyx_obj_4lxml_5etree__ParserSchemaValidationContext *))__pyx_f_4lxml_5etree_30_ParserSchemaValidationContext_isvalid;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__ParserSchemaValidationContext) < 0) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__ParserSchemaValidationContext.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ParserSchemaValidationContext.tp_dict, __pyx_vtabptr_4lxml_5etree__ParserSchemaValidationContext) < 0) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__ParserSchemaValidationContext = &__pyx_type_4lxml_5etree__ParserSchemaValidationContext;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__DTDEntityDecl) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__DTDEntityDecl.tp_print = 0;
-  __pyx_ptype_4lxml_5etree__DTDEntityDecl = &__pyx_type_4lxml_5etree__DTDEntityDecl;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__AttribIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__AttribIterator.tp_print = 0;
-  __pyx_ptype_4lxml_5etree__AttribIterator = &__pyx_type_4lxml_5etree__AttribIterator;
-  __pyx_vtabptr_4lxml_5etree_PythonElementClassLookup = &__pyx_vtable_4lxml_5etree_PythonElementClassLookup;
-  __pyx_vtable_4lxml_5etree_PythonElementClassLookup.__pyx_base = *__pyx_vtabptr_4lxml_5etree_FallbackElementClassLookup;
-  __pyx_type_4lxml_5etree_PythonElementClassLookup.tp_base = __pyx_ptype_4lxml_5etree_FallbackElementClassLookup;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_PythonElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_PythonElementClassLookup.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_PythonElementClassLookup.tp_dict, __pyx_vtabptr_4lxml_5etree_PythonElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "PythonElementClassLookup", (PyObject *)&__pyx_type_4lxml_5etree_PythonElementClassLookup) < 0) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 468; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_PythonElementClassLookup = &__pyx_type_4lxml_5etree_PythonElementClassLookup;
-  __pyx_vtabptr_4lxml_5etree_ElementChildIterator = &__pyx_vtable_4lxml_5etree_ElementChildIterator;
-  __pyx_vtable_4lxml_5etree_ElementChildIterator.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ElementMatchIterator;
-  __pyx_type_4lxml_5etree_ElementChildIterator.tp_base = __pyx_ptype_4lxml_5etree__ElementMatchIterator;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree_ElementChildIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree_ElementChildIterator.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree_ElementChildIterator.tp_dict, __pyx_vtabptr_4lxml_5etree_ElementChildIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "ElementChildIterator", (PyObject *)&__pyx_type_4lxml_5etree_ElementChildIterator) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 2623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree_ElementChildIterator = &__pyx_type_4lxml_5etree_ElementChildIterator;
-  __pyx_vtabptr_4lxml_5etree__RotatingErrorLog = &__pyx_vtable_4lxml_5etree__RotatingErrorLog;
-  __pyx_vtable_4lxml_5etree__RotatingErrorLog.__pyx_base = *__pyx_vtabptr_4lxml_5etree__ErrorLog;
-  __pyx_vtable_4lxml_5etree__RotatingErrorLog.__pyx_base.__pyx_base.__pyx_base.receive = (PyObject *(*)(struct __pyx_obj_4lxml_5etree__BaseErrorLog *, struct __pyx_obj_4lxml_5etree__LogEntry *, int __pyx_skip_dispatch))__pyx_f_4lxml_5etree_17_RotatingErrorLog_receive;
-  __pyx_type_4lxml_5etree__RotatingErrorLog.tp_base = __pyx_ptype_4lxml_5etree__ErrorLog;
-  if (PyType_Ready(&__pyx_type_4lxml_5etree__RotatingErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_5etree__RotatingErrorLog.tp_print = 0;
-  if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__RotatingErrorLog.tp_dict, __pyx_vtabptr_4lxml_5etree__RotatingErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (__Pyx_SetAttrString(__pyx_m, "_RotatingErrorLog", (PyObject *)&__pyx_type_4lxml_5etree__RotatingErrorLog) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_5etree__RotatingErrorLog = &__pyx_type_4lxml_5etree__RotatingErrorLog;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__MemDebug) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 4; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree__MemDebug.tp_print = 0;
+  __pyx_ptype_4lxml_5etree__MemDebug = &__pyx_type_4lxml_5etree__MemDebug;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct__itervalues) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree___pyx_scope_struct__itervalues.tp_print = 0;
+  __pyx_ptype_4lxml_5etree___pyx_scope_struct__itervalues = &__pyx_type_4lxml_5etree___pyx_scope_struct__itervalues;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_1_iterattributes) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree___pyx_scope_struct_1_iterattributes.tp_print = 0;
+  __pyx_ptype_4lxml_5etree___pyx_scope_struct_1_iterattributes = &__pyx_type_4lxml_5etree___pyx_scope_struct_1_iterattributes;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_2_iterelements) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree___pyx_scope_struct_2_iterelements.tp_print = 0;
+  __pyx_ptype_4lxml_5etree___pyx_scope_struct_2_iterelements = &__pyx_type_4lxml_5etree___pyx_scope_struct_2_iterelements;
+  if (PyType_Ready(&__pyx_type_4lxml_5etree___pyx_scope_struct_3_iterentities) < 0) {__pyx_filename = __pyx_f[20]; __pyx_lineno = 323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_5etree___pyx_scope_struct_3_iterentities.tp_print = 0;
+  __pyx_ptype_4lxml_5etree___pyx_scope_struct_3_iterentities = &__pyx_type_4lxml_5etree___pyx_scope_struct_3_iterentities;
   /*--- Type import code ---*/
   /*--- Variable import code ---*/
   /*--- Function import code ---*/
@@ -190002,7 +190435,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  */
   __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_getfilesystemencoding); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
-  __pyx_t_6 = PyObject_Call(__pyx_t_7, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -190010,7 +190443,7 @@ PyMODINIT_FUNC PyInit_etree(void)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_sys, __pyx_n_s_getdefaultencoding); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_1 = PyObject_Call(__pyx_t_7, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_10 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -190031,7 +190464,7 @@ PyMODINIT_FUNC PyInit_etree(void)
   __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_encode); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_6, __pyx_tuple__106, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__106, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 134; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -190084,7 +190517,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_6 = PyObject_Call(__pyx_t_1, __pyx_tuple__107, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__107, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_match); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -190313,14 +190746,14 @@ PyMODINIT_FUNC PyInit_etree(void)
       PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_7);
       __Pyx_GIVEREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = PyObject_Call(__pyx_t_6, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L32_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L32_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_group); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L32_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __pyx_t_7 = PyObject_Call(__pyx_t_1, __pyx_tuple__113, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L32_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__113, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L32_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
@@ -190582,7 +191015,7 @@ PyMODINIT_FUNC PyInit_etree(void)
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_7);
   __Pyx_GIVEREF(__pyx_t_7);
   __pyx_t_7 = 0;
-  __pyx_t_7 = PyObject_Call(__pyx_t_6, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -190638,7 +191071,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  * 
  * cdef _BaseErrorLog _getGlobalErrorLog():
  */
-  __pyx_t_7 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__RotatingErrorLog)), __pyx_tuple__115, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__RotatingErrorLog)), __pyx_tuple__115, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 544; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree___GLOBAL_ERROR_LOG));
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___GLOBAL_ERROR_LOG, ((struct __pyx_obj_4lxml_5etree__BaseErrorLog *)__pyx_t_7));
@@ -190843,7 +191276,7 @@ PyMODINIT_FUNC PyInit_etree(void)
   PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_7, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1634; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -191078,7 +191511,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  * 
  * set_element_class_lookup(DEFAULT_ELEMENT_CLASS_LOOKUP)
  */
-  __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ParserBasedElementClassLookup)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ParserBasedElementClassLookup)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree_DEFAULT_ELEMENT_CLASS_LOOKUP));
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree_DEFAULT_ELEMENT_CLASS_LOOKUP, ((struct __pyx_obj_4lxml_5etree_ParserBasedElementClassLookup *)__pyx_t_6));
@@ -191097,7 +191530,7 @@ PyMODINIT_FUNC PyInit_etree(void)
   __Pyx_INCREF(((PyObject *)__pyx_v_4lxml_5etree_DEFAULT_ELEMENT_CLASS_LOOKUP));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_4lxml_5etree_DEFAULT_ELEMENT_CLASS_LOOKUP));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_4lxml_5etree_DEFAULT_ELEMENT_CLASS_LOOKUP));
-  __pyx_t_7 = PyObject_Call(__pyx_t_6, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[9]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -191307,21 +191740,21 @@ PyMODINIT_FUNC PyInit_etree(void)
   __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":185
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":186
  * 
  * cdef _ParserDictionaryContext __GLOBAL_PARSER_CONTEXT
  * __GLOBAL_PARSER_CONTEXT = _ParserDictionaryContext()             # <<<<<<<<<<<<<<
  * __GLOBAL_PARSER_CONTEXT.initMainParserContext()
  * 
  */
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ParserDictionaryContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__ParserDictionaryContext)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT));
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, ((struct __pyx_obj_4lxml_5etree__ParserDictionaryContext *)__pyx_t_1));
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":186
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":187
  * cdef _ParserDictionaryContext __GLOBAL_PARSER_CONTEXT
  * __GLOBAL_PARSER_CONTEXT = _ParserDictionaryContext()
  * __GLOBAL_PARSER_CONTEXT.initMainParserContext()             # <<<<<<<<<<<<<<
@@ -191330,7 +191763,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  */
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_initMainParserContext(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":193
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":194
  * 
  * # name of Python unicode encoding as known to libxml2
  * cdef const_char* _UNICODE_ENCODING = NULL             # <<<<<<<<<<<<<<
@@ -191339,16 +191772,16 @@ PyMODINIT_FUNC PyInit_etree(void)
  */
   __pyx_v_4lxml_5etree__UNICODE_ENCODING = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":244
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":245
  *         return tree.xmlGetCharEncodingName(enc)
  * 
  * _setupPythonUnicode()             # <<<<<<<<<<<<<<
  * 
  * ############################################################
  */
-  __pyx_t_5 = __pyx_f_4lxml_5etree__setupPythonUnicode(); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 244; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree__setupPythonUnicode(); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 245; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":494
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":495
  * 
  * cdef xmlparser.xmlExternalEntityLoader __DEFAULT_ENTITY_LOADER
  * __DEFAULT_ENTITY_LOADER = xmlparser.xmlGetExternalEntityLoader()             # <<<<<<<<<<<<<<
@@ -191357,7 +191790,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  */
   __pyx_v_4lxml_5etree___DEFAULT_ENTITY_LOADER = xmlGetExternalEntityLoader();
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":496
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":497
  * __DEFAULT_ENTITY_LOADER = xmlparser.xmlGetExternalEntityLoader()
  * 
  * xmlparser.xmlSetExternalEntityLoader(<xmlparser.xmlExternalEntityLoader>_local_resolver)             # <<<<<<<<<<<<<<
@@ -191366,7 +191799,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  */
   xmlSetExternalEntityLoader(((xmlExternalEntityLoader)__pyx_f_4lxml_5etree__local_resolver));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1299
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1355
  *     xmlparser.XML_PARSE_NOENT   |
  *     xmlparser.XML_PARSE_NOCDATA |
  *     xmlparser.XML_PARSE_NONET   |             # <<<<<<<<<<<<<<
@@ -191375,30 +191808,30 @@ PyMODINIT_FUNC PyInit_etree(void)
  */
   __pyx_v_4lxml_5etree__XML_DEFAULT_PARSE_OPTIONS = (((XML_PARSE_NOENT | XML_PARSE_NOCDATA) | XML_PARSE_NONET) | XML_PARSE_COMPACT);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1455
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1511
  * 
  * # ET 1.2 compatible name
  * XMLTreeBuilder = ETCompatXMLParser             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_XMLTreeBuilder, ((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ETCompatXMLParser))) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_XMLTreeBuilder, ((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_ETCompatXMLParser))) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1511; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1459
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1515
  * 
  * cdef XMLParser __DEFAULT_XML_PARSER
  * __DEFAULT_XML_PARSER = XMLParser()             # <<<<<<<<<<<<<<
  * 
  * __GLOBAL_PARSER_CONTEXT.setDefaultParser(__DEFAULT_XML_PARSER)
  */
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XMLParser)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1459; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XMLParser)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree___DEFAULT_XML_PARSER));
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___DEFAULT_XML_PARSER, ((struct __pyx_obj_4lxml_5etree_XMLParser *)__pyx_t_1));
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1461
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1517
  * __DEFAULT_XML_PARSER = XMLParser()
  * 
  * __GLOBAL_PARSER_CONTEXT.setDefaultParser(__DEFAULT_XML_PARSER)             # <<<<<<<<<<<<<<
@@ -191410,31 +191843,31 @@ PyMODINIT_FUNC PyInit_etree(void)
   __pyx_f_4lxml_5etree_24_ParserDictionaryContext_setDefaultParser(__pyx_v_4lxml_5etree___GLOBAL_PARSER_CONTEXT, ((struct __pyx_obj_4lxml_5etree__BaseParser *)__pyx_t_1));
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1463
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1519
  * __GLOBAL_PARSER_CONTEXT.setDefaultParser(__DEFAULT_XML_PARSER)
  * 
  * def set_default_parser(_BaseParser parser=None):             # <<<<<<<<<<<<<<
  *     u"""set_default_parser(parser=None)
  * 
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4lxml_5etree_43set_default_parser, NULL, __pyx_n_s_lxml_etree); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4lxml_5etree_43set_default_parser, NULL, __pyx_n_s_lxml_etree); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_default_parser, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1463; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_set_default_parser, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1479
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1535
  *     __GLOBAL_PARSER_CONTEXT.setDefaultParser(parser)
  * 
  * def get_default_parser():             # <<<<<<<<<<<<<<
  *     u"get_default_parser()"
  *     return __GLOBAL_PARSER_CONTEXT.getDefaultParser()
  */
-  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4lxml_5etree_45get_default_parser, NULL, __pyx_n_s_lxml_etree); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_4lxml_5etree_45get_default_parser, NULL, __pyx_n_s_lxml_etree); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_default_parser, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_default_parser, __pyx_t_1) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1490
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1546
  * _HTML_DEFAULT_PARSE_OPTIONS = (
  *     htmlparser.HTML_PARSE_RECOVER |
  *     htmlparser.HTML_PARSE_NONET   |             # <<<<<<<<<<<<<<
@@ -191443,14 +191876,14 @@ PyMODINIT_FUNC PyInit_etree(void)
  */
   __pyx_v_4lxml_5etree__HTML_DEFAULT_PARSE_OPTIONS = ((HTML_PARSE_RECOVER | HTML_PARSE_NONET) | HTML_PARSE_COMPACT);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1547
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/parser.pxi":1603
  * 
  * cdef HTMLParser __DEFAULT_HTML_PARSER
  * __DEFAULT_HTML_PARSER = HTMLParser()             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_HTMLParser)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1547; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_HTMLParser)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 1603; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree___DEFAULT_HTML_PARSER));
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___DEFAULT_HTML_PARSER, ((struct __pyx_obj_4lxml_5etree_HTMLParser *)__pyx_t_1));
@@ -192164,7 +192597,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  */
   __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_15);
-  __pyx_t_14 = PyObject_Call(__pyx_t_15, __pyx_tuple__188, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_tuple__188, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_14);
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_sub); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 478; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -192184,7 +192617,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  */
   __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_15);
-  __pyx_t_14 = PyObject_Call(__pyx_t_15, __pyx_tuple__190, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_tuple__190, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_14);
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_findall); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[18]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -192405,7 +192838,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  *         read_file=False, write_file=False, create_dir=False,
  *         read_network=False, write_network=False)
  */
-  __pyx_t_15 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XSLTAccessControl)), __pyx_empty_tuple, __pyx_t_14); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_15 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XSLTAccessControl)), __pyx_empty_tuple, __pyx_t_14); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_15);
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLTAccessControl->tp_dict, __pyx_n_s_DENY_ALL, __pyx_t_15) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -192450,7 +192883,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  *         read_file=True, write_file=False, create_dir=False,
  *         read_network=True, write_network=False)
  */
-  __pyx_t_14 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XSLTAccessControl)), __pyx_empty_tuple, __pyx_t_15); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_14 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XSLTAccessControl)), __pyx_empty_tuple, __pyx_t_15); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_14);
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLTAccessControl->tp_dict, __pyx_n_s_DENY_WRITE, __pyx_t_14) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 207; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -192493,7 +192926,7 @@ PyMODINIT_FUNC PyInit_etree(void)
   PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_14);
   __Pyx_GIVEREF(__pyx_t_14);
   __pyx_t_14 = 0;
-  __pyx_t_14 = PyObject_Call(__pyx_builtin_staticmethod, __pyx_t_15, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_14 = __Pyx_PyObject_Call(__pyx_builtin_staticmethod, __pyx_t_15, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_14);
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_strparam, __pyx_t_14) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -192522,7 +192955,7 @@ PyMODINIT_FUNC PyInit_etree(void)
   PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_14);
   __Pyx_GIVEREF(__pyx_t_14);
   __pyx_t_14 = 0;
-  __pyx_t_14 = PyObject_Call(__pyx_builtin_staticmethod, __pyx_t_15, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_14 = __Pyx_PyObject_Call(__pyx_builtin_staticmethod, __pyx_t_15, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 434; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_14);
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_strparam, __pyx_t_14) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 435; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -192551,7 +192984,7 @@ PyMODINIT_FUNC PyInit_etree(void)
   PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_14);
   __Pyx_GIVEREF(__pyx_t_14);
   __pyx_t_14 = 0;
-  __pyx_t_14 = PyObject_Call(__pyx_builtin_staticmethod, __pyx_t_15, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_14 = __Pyx_PyObject_Call(__pyx_builtin_staticmethod, __pyx_t_15, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_14);
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_set_global_max_depth, __pyx_t_14) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -192580,7 +193013,7 @@ PyMODINIT_FUNC PyInit_etree(void)
   PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_14);
   __Pyx_GIVEREF(__pyx_t_14);
   __pyx_t_14 = 0;
-  __pyx_t_14 = PyObject_Call(__pyx_builtin_staticmethod, __pyx_t_15, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_14 = __Pyx_PyObject_Call(__pyx_builtin_staticmethod, __pyx_t_15, NULL); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 448; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_14);
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   if (PyDict_SetItem((PyObject *)__pyx_ptype_4lxml_5etree_XSLT->tp_dict, __pyx_n_s_set_global_max_depth, __pyx_t_14) < 0) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 449; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -192614,7 +193047,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  */
   __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_14);
-  __pyx_t_15 = PyObject_Call(__pyx_t_14, __pyx_tuple__195, NULL); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_tuple__195, NULL); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_15);
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree__RE_PI_HREF);
@@ -192952,7 +193385,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  *     u"boolean(//xs:attribute[@default or @fixed][1])",
  *     namespaces={u'xs': u'http://www.w3.org/2001/XMLSchema'})
  */
-  __pyx_t_14 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPath)), __pyx_tuple__196, __pyx_t_15); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_14 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree_XPath)), __pyx_tuple__196, __pyx_t_15); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[22]; __pyx_lineno = 22; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_14);
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_5etree__check_for_default_attributes));
@@ -193043,7 +193476,7 @@ PyMODINIT_FUNC PyInit_etree(void)
  * 
  * memory_debugger = _MemDebug()             # <<<<<<<<<<<<<<
  */
-  __pyx_t_15 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MemDebug)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_15 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__MemDebug)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_15)) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_15);
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_memory_debugger, __pyx_t_15) < 0) {__pyx_filename = __pyx_f[25]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
@@ -193360,76 +193793,76 @@ static void __pyx_module_cleanup(CYTHON_UNUSED PyObject *self) {
   Py_CLEAR(__pyx_builtin_AssertionError);
   /*--- Intern cleanup code ---*/
   Py_CLEAR(__pyx_empty_tuple);
-  while (__pyx_freecount_4lxml_5etree__Element > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__Element[--__pyx_freecount_4lxml_5etree__Element];
-    (*Py_TYPE(o)->tp_free)(o);
-  }
-  while (__pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct__itervalues[--__pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues];
+  while (__pyx_freecount_4lxml_5etree__Document > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__Document[--__pyx_freecount_4lxml_5etree__Document];
     (*Py_TYPE(o)->tp_free)(o);
   }
-  while (__pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct_1_iterattributes[--__pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes];
+  while (__pyx_freecount_4lxml_5etree__Element > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__Element[--__pyx_freecount_4lxml_5etree__Element];
     (*Py_TYPE(o)->tp_free)(o);
   }
-  while (__pyx_freecount_4lxml_5etree__XSLTQuotedStringParam > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__XSLTQuotedStringParam[--__pyx_freecount_4lxml_5etree__XSLTQuotedStringParam];
+  while (__pyx_freecount_4lxml_5etree_QName > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree_QName[--__pyx_freecount_4lxml_5etree_QName];
     (*Py_TYPE(o)->tp_free)(o);
   }
-  while (__pyx_freecount_4lxml_5etree__DTDElementDecl > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDElementDecl[--__pyx_freecount_4lxml_5etree__DTDElementDecl];
+  while (__pyx_freecount_4lxml_5etree__LogEntry > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__LogEntry[--__pyx_freecount_4lxml_5etree__LogEntry];
     (*Py_TYPE(o)->tp_free)(o);
   }
-  while (__pyx_freecount_4lxml_5etree__Document > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__Document[--__pyx_freecount_4lxml_5etree__Document];
+  while (__pyx_freecount_4lxml_5etree_DocInfo > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree_DocInfo[--__pyx_freecount_4lxml_5etree_DocInfo];
     (*Py_TYPE(o)->tp_free)(o);
   }
   while (__pyx_freecount_4lxml_5etree__ElementTree > 0) {
     PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__ElementTree[--__pyx_freecount_4lxml_5etree__ElementTree];
     (*Py_TYPE(o)->tp_free)(o);
   }
-  while (__pyx_freecount_4lxml_5etree__LogEntry > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__LogEntry[--__pyx_freecount_4lxml_5etree__LogEntry];
+  while (__pyx_freecount_4lxml_5etree__Attrib > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__Attrib[--__pyx_freecount_4lxml_5etree__Attrib];
     (*Py_TYPE(o)->tp_free)(o);
   }
   while (__pyx_freecount_4lxml_5etree_CDATA > 0) {
     PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree_CDATA[--__pyx_freecount_4lxml_5etree_CDATA];
     (*Py_TYPE(o)->tp_free)(o);
   }
-  while (__pyx_freecount_4lxml_5etree__DTDElementContentDecl > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDElementContentDecl[--__pyx_freecount_4lxml_5etree__DTDElementContentDecl];
+  while (__pyx_freecount_4lxml_5etree__FileWriterElement > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__FileWriterElement[--__pyx_freecount_4lxml_5etree__FileWriterElement];
     (*Py_TYPE(o)->tp_free)(o);
   }
-  while (__pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct_2_iterelements[--__pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements];
+  while (__pyx_freecount_4lxml_5etree__XSLTQuotedStringParam > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__XSLTQuotedStringParam[--__pyx_freecount_4lxml_5etree__XSLTQuotedStringParam];
     (*Py_TYPE(o)->tp_free)(o);
   }
-  while (__pyx_freecount_4lxml_5etree_DocInfo > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree_DocInfo[--__pyx_freecount_4lxml_5etree_DocInfo];
+  while (__pyx_freecount_4lxml_5etree__DTDElementContentDecl > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDElementContentDecl[--__pyx_freecount_4lxml_5etree__DTDElementContentDecl];
     (*Py_TYPE(o)->tp_free)(o);
   }
   while (__pyx_freecount_4lxml_5etree__DTDAttributeDecl > 0) {
     PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDAttributeDecl[--__pyx_freecount_4lxml_5etree__DTDAttributeDecl];
     (*Py_TYPE(o)->tp_free)(o);
   }
-  while (__pyx_freecount_4lxml_5etree__FileWriterElement > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__FileWriterElement[--__pyx_freecount_4lxml_5etree__FileWriterElement];
+  while (__pyx_freecount_4lxml_5etree__DTDElementDecl > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDElementDecl[--__pyx_freecount_4lxml_5etree__DTDElementDecl];
     (*Py_TYPE(o)->tp_free)(o);
   }
-  while (__pyx_freecount_4lxml_5etree__Attrib > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__Attrib[--__pyx_freecount_4lxml_5etree__Attrib];
+  while (__pyx_freecount_4lxml_5etree__DTDEntityDecl > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDEntityDecl[--__pyx_freecount_4lxml_5etree__DTDEntityDecl];
     (*Py_TYPE(o)->tp_free)(o);
   }
-  while (__pyx_freecount_4lxml_5etree_QName > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree_QName[--__pyx_freecount_4lxml_5etree_QName];
+  while (__pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct__itervalues[--__pyx_freecount_4lxml_5etree___pyx_scope_struct__itervalues];
     (*Py_TYPE(o)->tp_free)(o);
   }
-  while (__pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct_3_iterentities[--__pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities];
+  while (__pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct_1_iterattributes[--__pyx_freecount_4lxml_5etree___pyx_scope_struct_1_iterattributes];
     (*Py_TYPE(o)->tp_free)(o);
   }
-  while (__pyx_freecount_4lxml_5etree__DTDEntityDecl > 0) {
-    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree__DTDEntityDecl[--__pyx_freecount_4lxml_5etree__DTDEntityDecl];
+  while (__pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct_2_iterelements[--__pyx_freecount_4lxml_5etree___pyx_scope_struct_2_iterelements];
+    (*Py_TYPE(o)->tp_free)(o);
+  }
+  while (__pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities > 0) {
+    PyObject* o = (PyObject*)__pyx_freelist_4lxml_5etree___pyx_scope_struct_3_iterentities[--__pyx_freecount_4lxml_5etree___pyx_scope_struct_3_iterentities];
     (*Py_TYPE(o)->tp_free)(o);
   }
   #if CYTHON_COMPILING_IN_PYPY
@@ -193607,6 +194040,29 @@ bad:
     return -1;
 }
 
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+    PyObject *result;
+    ternaryfunc call = func->ob_type->tp_call;
+    if (unlikely(!call))
+        return PyObject_Call(func, arg, kw);
+#if PY_VERSION_HEX >= 0x02060000
+    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
+        return NULL;
+#endif
+    result = (*call)(func, arg, kw);
+#if PY_VERSION_HEX >= 0x02060000
+    Py_LeaveRecursiveCall();
+#endif
+    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
+        PyErr_SetString(
+            PyExc_SystemError,
+            "NULL result without error in PyObject_Call");
+    }
+    return result;
+}
+#endif
+
 static CYTHON_INLINE void __Pyx_ErrRestore(PyObject *type, PyObject *value, PyObject *tb) {
 #if CYTHON_COMPILING_IN_CPYTHON
     PyObject *tmp_type, *tmp_value, *tmp_tb;
@@ -196008,10 +196464,15 @@ static int __Pyx_Print(PyObject* f, PyObject *arg_tuple, int newline) {
         if (PyString_Check(v)) {
             char *s = PyString_AsString(v);
             Py_ssize_t len = PyString_Size(v);
-            if (len > 0 &&
-                isspace(Py_CHARMASK(s[len-1])) &&
-                s[len-1] != ' ')
-                    PyFile_SoftSpace(f, 0);
+            if (len > 0) {
+                switch (s[len-1]) {
+                    case ' ': break;
+                    case '\f': case '\r': case '\n': case '\t': case '\v':
+                        PyFile_SoftSpace(f, 0);
+                        break;
+                    default:  break;
+                }
+            }
         }
     }
     if (newline) {
@@ -197291,12 +197752,14 @@ static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_
 #endif /* PY_VERSION_HEX < 0x03030000 */
     } else
 #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII  || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */
+#if !CYTHON_COMPILING_IN_PYPY
 #if PY_VERSION_HEX >= 0x02060000
     if (PyByteArray_Check(o)) {
         *length = PyByteArray_GET_SIZE(o);
         return PyByteArray_AS_STRING(o);
     } else
 #endif
+#endif
     {
         char* result;
         int r = PyBytes_AsStringAndSize(o, &result, length);
index 88535ac..c60a104 100644 (file)
@@ -148,14 +148,14 @@ struct LxmlFallbackElementClassLookup {
   #endif
 #endif
 
-__PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementType;
-__PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementTagMatcherType;
-__PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementClassLookupType;
-__PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlFallbackElementClassLookupType;
 __PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlDocumentType;
+__PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementType;
 __PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementTreeType;
+__PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementTagMatcherType;
 __PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementIteratorType;
 __PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementBaseType;
+__PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlElementClassLookupType;
+__PYX_EXTERN_C DL_IMPORT(PyTypeObject) LxmlFallbackElementClassLookupType;
 
 __PYX_EXTERN_C DL_IMPORT(struct LxmlElement) *deepcopyNodeToDocument(struct LxmlDocument *, xmlNode *);
 __PYX_EXTERN_C DL_IMPORT(struct LxmlElementTree) *elementTreeFactory(struct LxmlElement *);
index ce5d9b9..2449956 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.20 on Sun Jan 26 08:01:29 2014 */
+/* Generated by Cython 0.20.1 on Wed Feb 12 09:46:47 2014 */
 
 #define PY_SSIZE_T_CLEAN
 #ifndef CYTHON_USE_PYLONG_INTERNALS
@@ -19,7 +19,7 @@
 #elif PY_VERSION_HEX < 0x02040000
     #error Cython requires Python 2.4+.
 #else
-#define CYTHON_ABI "0_20"
+#define CYTHON_ABI "0_20_1"
 #include <stddef.h> /* For offsetof */
 #ifndef offsetof
 #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
 #if PY_MAJOR_VERSION < 3
   #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
   #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos) \
-          PyCode_New(a, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+          PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
   #define __Pyx_DefaultClassType PyClass_Type
 #else
   #define __Pyx_BUILTIN_MODULE_NAME "builtins"
   #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
   #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
 #endif
+#if CYTHON_COMPILING_IN_PYPY
+  #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
+  #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
+#else
+  #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
+  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \
+      PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
+#endif
 #define __Pyx_PyString_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
 #define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None)) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
-#define __Pyx_PyUnicode_Concat(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ? \
-    PyNumber_Add(a, b) : PyUnicode_Concat(a, b))
 #if PY_MAJOR_VERSION >= 3
   #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)
 #else
 #if PY_MAJOR_VERSION >= 3
   #define PyBoolObject                 PyLongObject
 #endif
-#if PY_VERSION_HEX < 0x03020000
+#if PY_VERSION_HEX < 0x030200A4
   typedef long Py_hash_t;
   #define __Pyx_PyInt_FromHash_t PyInt_FromLong
   #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
@@ -545,20 +551,20 @@ static const char *__pyx_f[] = {
 };
 
 /*--- Type declarations ---*/
-struct __pyx_obj_4lxml_9objectify_PyType;
-struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller;
 struct __pyx_obj_4lxml_9objectify_ObjectifiedElement;
 struct __pyx_obj_4lxml_9objectify_ObjectifiedDataElement;
 struct __pyx_obj_4lxml_9objectify_NumberElement;
-struct __pyx_obj_4lxml_9objectify_FloatElement;
 struct __pyx_obj_4lxml_9objectify_IntElement;
-struct __pyx_obj_4lxml_9objectify_BoolElement;
 struct __pyx_obj_4lxml_9objectify_LongElement;
+struct __pyx_obj_4lxml_9objectify_FloatElement;
+struct __pyx_obj_4lxml_9objectify_StringElement;
+struct __pyx_obj_4lxml_9objectify_NoneElement;
+struct __pyx_obj_4lxml_9objectify_BoolElement;
+struct __pyx_obj_4lxml_9objectify_PyType;
+struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller;
 struct __pyx_obj_4lxml_9objectify_ElementMaker;
 struct __pyx_obj_4lxml_9objectify_ObjectifyElementClassLookup;
-struct __pyx_obj_4lxml_9objectify_NoneElement;
 struct __pyx_obj_4lxml_9objectify_ObjectPath;
-struct __pyx_obj_4lxml_9objectify_StringElement;
 struct __pyx_t_4lxml_9objectify__ObjectPath;
 typedef struct __pyx_t_4lxml_9objectify__ObjectPath __pyx_t_4lxml_9objectify__ObjectPath;
 
@@ -575,39 +581,6 @@ struct __pyx_t_4lxml_9objectify__ObjectPath {
   Py_ssize_t index;
 };
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":115
- * 
- * # Forward declaration
- * cdef class PyType             # <<<<<<<<<<<<<<
- * 
- * ################################################################################
- */
-struct __pyx_obj_4lxml_9objectify_PyType {
-  PyObject_HEAD
-  PyObject *name;
-  PyObject *type_check;
-  PyObject *stringify;
-  PyObject *_type;
-  PyObject *_schema_types;
-};
-
-
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":1115
- * @cython.final
- * @cython.internal
- * cdef class _ObjectifyElementMakerCaller:             # <<<<<<<<<<<<<<
- *     cdef object _tag
- *     cdef object _nsmap
- */
-struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller {
-  PyObject_HEAD
-  PyObject *_tag;
-  PyObject *_nsmap;
-  PyObject *_element_factory;
-  int _annotate;
-};
-
-
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":120
  * # Element class for the main API
  * 
@@ -645,6 +618,30 @@ struct __pyx_obj_4lxml_9objectify_NumberElement {
 };
 
 
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":703
+ *         return _numericValueOf(self) ^ _numericValueOf(other)
+ * 
+ * cdef class IntElement(NumberElement):             # <<<<<<<<<<<<<<
+ *     def _init(self):
+ *         self._parse_value = int
+ */
+struct __pyx_obj_4lxml_9objectify_IntElement {
+  struct __pyx_obj_4lxml_9objectify_NumberElement __pyx_base;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":707
+ *         self._parse_value = int
+ * 
+ * cdef class LongElement(NumberElement):             # <<<<<<<<<<<<<<
+ *     def _init(self):
+ *         self._parse_value = long
+ */
+struct __pyx_obj_4lxml_9objectify_LongElement {
+  struct __pyx_obj_4lxml_9objectify_NumberElement __pyx_base;
+};
+
+
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":711
  *         self._parse_value = long
  * 
@@ -657,15 +654,27 @@ struct __pyx_obj_4lxml_9objectify_FloatElement {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":703
- *         return _numericValueOf(self) ^ _numericValueOf(other)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":715
+ *         self._parse_value = float
+ * 
+ * cdef class StringElement(ObjectifiedDataElement):             # <<<<<<<<<<<<<<
+ *     u"""String data class.
  * 
- * cdef class IntElement(NumberElement):             # <<<<<<<<<<<<<<
- *     def _init(self):
- *         self._parse_value = int
  */
-struct __pyx_obj_4lxml_9objectify_IntElement {
-  struct __pyx_obj_4lxml_9objectify_NumberElement __pyx_base;
+struct __pyx_obj_4lxml_9objectify_StringElement {
+  struct __pyx_obj_4lxml_9objectify_ObjectifiedDataElement __pyx_base;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":777
+ *         return complex(textOf(self._c_node))
+ * 
+ * cdef class NoneElement(ObjectifiedDataElement):             # <<<<<<<<<<<<<<
+ *     def __str__(self):
+ *         return u"None"
+ */
+struct __pyx_obj_4lxml_9objectify_NoneElement {
+  struct __pyx_obj_4lxml_9objectify_ObjectifiedDataElement __pyx_base;
 };
 
 
@@ -681,15 +690,36 @@ struct __pyx_obj_4lxml_9objectify_BoolElement {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":707
- *         self._parse_value = int
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":115
  * 
- * cdef class LongElement(NumberElement):             # <<<<<<<<<<<<<<
- *     def _init(self):
- *         self._parse_value = long
+ * # Forward declaration
+ * cdef class PyType             # <<<<<<<<<<<<<<
+ * 
+ * ################################################################################
  */
-struct __pyx_obj_4lxml_9objectify_LongElement {
-  struct __pyx_obj_4lxml_9objectify_NumberElement __pyx_base;
+struct __pyx_obj_4lxml_9objectify_PyType {
+  PyObject_HEAD
+  PyObject *name;
+  PyObject *type_check;
+  PyObject *stringify;
+  PyObject *_type;
+  PyObject *_schema_types;
+};
+
+
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":1115
+ * @cython.final
+ * @cython.internal
+ * cdef class _ObjectifyElementMakerCaller:             # <<<<<<<<<<<<<<
+ *     cdef object _tag
+ *     cdef object _nsmap
+ */
+struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller {
+  PyObject_HEAD
+  PyObject *_tag;
+  PyObject *_nsmap;
+  PyObject *_element_factory;
+  int _annotate;
 };
 
 
@@ -725,18 +755,6 @@ struct __pyx_obj_4lxml_9objectify_ObjectifyElementClassLookup {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":777
- *         return complex(textOf(self._c_node))
- * 
- * cdef class NoneElement(ObjectifiedDataElement):             # <<<<<<<<<<<<<<
- *     def __str__(self):
- *         return u"None"
- */
-struct __pyx_obj_4lxml_9objectify_NoneElement {
-  struct __pyx_obj_4lxml_9objectify_ObjectifiedDataElement __pyx_base;
-};
-
-
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/objectpath.pxi":10
  * 
  * 
@@ -754,18 +772,6 @@ struct __pyx_obj_4lxml_9objectify_ObjectPath {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":715
- *         self._parse_value = float
- * 
- * cdef class StringElement(ObjectifiedDataElement):             # <<<<<<<<<<<<<<
- *     u"""String data class.
- * 
- */
-struct __pyx_obj_4lxml_9objectify_StringElement {
-  struct __pyx_obj_4lxml_9objectify_ObjectifiedDataElement __pyx_base;
-};
-
-
 
 /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":1205
  *         cetree.setNodeText(elem._c_node, text)
@@ -888,6 +894,12 @@ static CYTHON_INLINE PyObject* __Pyx_decode_bytes(
         start, stop, encoding, errors, decode_func);
 }
 
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw); /*proto*/
+#else
+#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
+#endif
+
 static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name); /*proto*/
 
 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type); /*proto*/
@@ -1011,7 +1023,7 @@ static PyObject* __Pyx_PyObject_CallMethodTuple(PyObject* obj, PyObject* method_
     if (unlikely(!args)) return NULL;
     method = __Pyx_PyObject_GetAttrStr(obj, method_name);
     if (unlikely(!method)) goto bad;
-    result = PyObject_Call(method, args, NULL);
+    result = __Pyx_PyObject_Call(method, args, NULL);
     Py_DECREF(method);
 bad:
     Py_DECREF(args);
@@ -1178,19 +1190,19 @@ static PyTypeObject *__pyx_ptype_4lxml_8includes_11etreepublic__ElementIterator
 
 /* Module declarations from 'lxml.objectify' */
 static PyTypeObject *__pyx_ptype_4lxml_9objectify_PyType = 0;
-static PyTypeObject *__pyx_ptype_4lxml_9objectify__ObjectifyElementMakerCaller = 0;
 static PyTypeObject *__pyx_ptype_4lxml_9objectify_ObjectifiedElement = 0;
 static PyTypeObject *__pyx_ptype_4lxml_9objectify_ObjectifiedDataElement = 0;
 static PyTypeObject *__pyx_ptype_4lxml_9objectify_NumberElement = 0;
-static PyTypeObject *__pyx_ptype_4lxml_9objectify_FloatElement = 0;
 static PyTypeObject *__pyx_ptype_4lxml_9objectify_IntElement = 0;
-static PyTypeObject *__pyx_ptype_4lxml_9objectify_BoolElement = 0;
 static PyTypeObject *__pyx_ptype_4lxml_9objectify_LongElement = 0;
+static PyTypeObject *__pyx_ptype_4lxml_9objectify_FloatElement = 0;
+static PyTypeObject *__pyx_ptype_4lxml_9objectify_StringElement = 0;
+static PyTypeObject *__pyx_ptype_4lxml_9objectify_NoneElement = 0;
+static PyTypeObject *__pyx_ptype_4lxml_9objectify_BoolElement = 0;
+static PyTypeObject *__pyx_ptype_4lxml_9objectify__ObjectifyElementMakerCaller = 0;
 static PyTypeObject *__pyx_ptype_4lxml_9objectify_ElementMaker = 0;
 static PyTypeObject *__pyx_ptype_4lxml_9objectify_ObjectifyElementClassLookup = 0;
-static PyTypeObject *__pyx_ptype_4lxml_9objectify_NoneElement = 0;
 static PyTypeObject *__pyx_ptype_4lxml_9objectify_ObjectPath = 0;
-static PyTypeObject *__pyx_ptype_4lxml_9objectify_StringElement = 0;
 static PyObject *__pyx_v_4lxml_9objectify_etree = 0;
 static PyObject *__pyx_v_4lxml_9objectify_re = 0;
 static PyObject *__pyx_v_4lxml_9objectify_IGNORABLE_ERRORS = 0;
@@ -1407,19 +1419,19 @@ static PyObject *__pyx_pf_4lxml_9objectify_10ObjectPath_10setattr(struct __pyx_o
 static PyObject *__pyx_pf_4lxml_9objectify_10ObjectPath_12addattr(struct __pyx_obj_4lxml_9objectify_ObjectPath *__pyx_v_self, struct LxmlElement *__pyx_v_root, PyObject *__pyx_v_value); /* proto */
 static PyObject *__pyx_pf_4lxml_9objectify_10ObjectPath_4find___get__(struct __pyx_obj_4lxml_9objectify_ObjectPath *__pyx_v_self); /* proto */
 static PyObject *__pyx_tp_new_4lxml_9objectify_PyType(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_9objectify__ObjectifyElementMakerCaller(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_9objectify_ObjectifiedElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_9objectify_ObjectifiedDataElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_9objectify_NumberElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_9objectify_FloatElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_9objectify_IntElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_9objectify_BoolElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_9objectify_LongElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_9objectify_FloatElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_9objectify_StringElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_9objectify_NoneElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_9objectify_BoolElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_4lxml_9objectify__ObjectifyElementMakerCaller(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_9objectify_ElementMaker(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_9objectify_ObjectifyElementClassLookup(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_9objectify_NoneElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static PyObject *__pyx_tp_new_4lxml_9objectify_ObjectPath(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
-static PyObject *__pyx_tp_new_4lxml_9objectify_StringElement(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
 static char __pyx_k_[] = "";
 static char __pyx_k_0[] = "0";
 static char __pyx_k_1[] = "1";
@@ -2532,7 +2544,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_18ObjectifiedElement___iter__(struct
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getparent); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_parent = __pyx_t_2;
@@ -2591,7 +2603,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_18ObjectifiedElement___iter__(struct
   __Pyx_GOTREF(__pyx_t_6);
   if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_tag, __pyx_t_6) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-  __pyx_t_6 = PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, __pyx_t_5); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -2775,7 +2787,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_18ObjectifiedElement_4__reduce__(stru
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-  __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -2984,7 +2996,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_18ObjectifiedElement_8__dict_____get_
   __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_tag, __pyx_v_tag) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -3506,7 +3518,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_18ObjectifiedElement_12__getattr__(st
   __Pyx_INCREF(__pyx_v_tag);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_tag);
   __Pyx_GIVEREF(__pyx_v_tag);
-  __pyx_t_2 = PyObject_Call(__pyx_v_4lxml_9objectify_is_special_method, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify_is_special_method, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -3531,7 +3543,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_18ObjectifiedElement_12__getattr__(st
     __Pyx_INCREF(__pyx_v_tag);
     PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
-    __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -3726,7 +3738,7 @@ static int __pyx_pf_4lxml_9objectify_18ObjectifiedElement_14__setattr__(struct _
     __Pyx_INCREF(__pyx_v_value);
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_value);
     __Pyx_GIVEREF(__pyx_v_value);
-    __pyx_t_7 = PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 235; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -3773,7 +3785,7 @@ static int __pyx_pf_4lxml_9objectify_18ObjectifiedElement_14__setattr__(struct _
     __Pyx_INCREF(__pyx_v_value);
     PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_value);
     __Pyx_GIVEREF(__pyx_v_value);
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -3936,7 +3948,7 @@ static int __pyx_pf_4lxml_9objectify_18ObjectifiedElement_16__delattr__(struct _
   __Pyx_INCREF(__pyx_v_child);
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_child);
   __Pyx_GIVEREF(__pyx_v_child);
-  __pyx_t_3 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 249; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -4173,7 +4185,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_18ObjectifiedElement_20__getitem__(st
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_2 = PyObject_GetItem(__pyx_t_4, __pyx_v_key); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 279; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
@@ -4260,7 +4272,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_18ObjectifiedElement_20__getitem__(st
       __Pyx_INCREF(__pyx_v_key);
       PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key);
       __Pyx_GIVEREF(__pyx_v_key);
-      __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 288; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_Raise(__pyx_builtin_IndexError, __pyx_t_4, 0, 0);
@@ -4335,7 +4347,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_18ObjectifiedElement_20__getitem__(st
     __Pyx_INCREF(__pyx_v_key);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_key);
     __Pyx_GIVEREF(__pyx_v_key);
-    __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 296; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_builtin_IndexError, __pyx_t_2, 0, 0);
@@ -4629,7 +4641,7 @@ static int __pyx_pf_4lxml_9objectify_18ObjectifiedElement_22__setitem__(struct _
       __Pyx_INCREF(__pyx_v_key);
       PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_key);
       __Pyx_GIVEREF(__pyx_v_key);
-      __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __Pyx_Raise(__pyx_builtin_IndexError, __pyx_t_6, 0, 0);
@@ -4738,7 +4750,7 @@ static int __pyx_pf_4lxml_9objectify_18ObjectifiedElement_24__delitem__(struct _
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getparent); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_parent = __pyx_t_2;
@@ -4789,7 +4801,7 @@ static int __pyx_pf_4lxml_9objectify_18ObjectifiedElement_24__delitem__(struct _
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v_self));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
-    __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_2 = PyObject_GetItem(__pyx_t_1, __pyx_v_key); if (unlikely(__pyx_t_2 == NULL)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 349; __pyx_clineno = __LINE__; goto __pyx_L1_error;};
@@ -4867,7 +4879,7 @@ static int __pyx_pf_4lxml_9objectify_18ObjectifiedElement_24__delitem__(struct _
       __Pyx_INCREF(__pyx_v_el);
       PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_el);
       __Pyx_GIVEREF(__pyx_v_el);
-      __pyx_t_7 = PyObject_Call(__pyx_v_remove, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_remove, __pyx_t_1, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 352; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -4891,7 +4903,7 @@ static int __pyx_pf_4lxml_9objectify_18ObjectifiedElement_24__delitem__(struct _
     __Pyx_INCREF(__pyx_v_key);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_key);
     __Pyx_GIVEREF(__pyx_v_key);
-    __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 355; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -4912,7 +4924,7 @@ static int __pyx_pf_4lxml_9objectify_18ObjectifiedElement_24__delitem__(struct _
     __Pyx_INCREF(__pyx_v_sibling);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_sibling);
     __Pyx_GIVEREF(__pyx_v_sibling);
-    __pyx_t_2 = PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 356; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -6099,16 +6111,13 @@ static PyObject *__pyx_f_4lxml_9objectify__replaceElement(struct LxmlElement *__
  *         element[:] = value
  *         return
  */
-  __Pyx_INCREF(__pyx_v_value);
-  __pyx_t_4 = __pyx_v_value;
-  __pyx_t_2 = PyList_Check(__pyx_t_4); 
+  __pyx_t_2 = PyList_Check(__pyx_v_value); 
   if (!__pyx_t_2) {
-    __pyx_t_1 = PyTuple_Check(__pyx_t_4); 
+    __pyx_t_1 = PyTuple_Check(__pyx_v_value); 
     __pyx_t_5 = __pyx_t_1;
   } else {
     __pyx_t_5 = __pyx_t_2;
   }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_2 = (__pyx_t_5 != 0);
   if (__pyx_t_2) {
 
@@ -6150,7 +6159,7 @@ static PyObject *__pyx_f_4lxml_9objectify__replaceElement(struct LxmlElement *__
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 458; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -6180,7 +6189,7 @@ static PyObject *__pyx_f_4lxml_9objectify__replaceElement(struct LxmlElement *__
  */
   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_getparent); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_6 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_replace); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -6194,7 +6203,7 @@ static PyObject *__pyx_f_4lxml_9objectify__replaceElement(struct LxmlElement *__
   __Pyx_INCREF(((PyObject *)__pyx_v_new_element));
   PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_new_element));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_new_element));
-  __pyx_t_4 = PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 460; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -6311,16 +6320,13 @@ static PyObject *__pyx_f_4lxml_9objectify__appendValue(struct LxmlElement *__pyx
  *         for item in value:
  *             _appendValue(parent, tag, item)
  */
-  __Pyx_INCREF(__pyx_v_value);
-  __pyx_t_4 = __pyx_v_value;
-  __pyx_t_2 = PyList_Check(__pyx_t_4); 
+  __pyx_t_2 = PyList_Check(__pyx_v_value); 
   if (!__pyx_t_2) {
-    __pyx_t_1 = PyTuple_Check(__pyx_t_4); 
+    __pyx_t_1 = PyTuple_Check(__pyx_v_value); 
     __pyx_t_6 = __pyx_t_1;
   } else {
     __pyx_t_6 = __pyx_t_2;
   }
-  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_2 = (__pyx_t_6 != 0);
   if (__pyx_t_2) {
 
@@ -6636,7 +6642,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setElementValue(struct LxmlElement *_
         __Pyx_INCREF(__pyx_v_value);
         PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_value);
         __Pyx_GIVEREF(__pyx_v_value);
-        __pyx_t_5 = PyObject_Call(((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_v__pytype)->stringify, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_Call(((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_v__pytype)->stringify, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_5);
@@ -6657,7 +6663,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setElementValue(struct LxmlElement *_
         __Pyx_INCREF(__pyx_v_value);
         PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_value);
         __Pyx_GIVEREF(__pyx_v_value);
-        __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 499; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_3);
@@ -7100,7 +7106,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setSlice(PyObject *__pyx_v_sliceobjec
  */
   __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_target), __pyx_n_s_getparent); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_4lxml_8includes_11etreepublic__Element))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 546; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -7163,7 +7169,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setSlice(PyObject *__pyx_v_sliceobjec
     __Pyx_GIVEREF(__pyx_t_6);
     __pyx_t_7 = 0;
     __pyx_t_6 = 0;
-    __pyx_t_6 = PyObject_Call(__pyx_v_replace, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_replace, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -7225,7 +7231,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setSlice(PyObject *__pyx_v_sliceobjec
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
       __Pyx_GIVEREF(__pyx_t_6);
       __pyx_t_6 = 0;
-      __pyx_t_6 = PyObject_Call(__pyx_v_remove, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_remove, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 556; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -7457,7 +7463,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setSlice(PyObject *__pyx_v_sliceobjec
       __Pyx_INCREF(__pyx_v_item);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_item);
       __Pyx_GIVEREF(__pyx_v_item);
-      __pyx_t_6 = PyObject_Call(__pyx_v_add, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_add, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -8015,7 +8021,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_4__long__(struct __py
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyLong_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyLong_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 623; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
@@ -8157,7 +8163,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_8__complex__(struct _
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyComplex_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyComplex_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 629; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
@@ -8230,7 +8236,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_10__str__(struct __py
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 632; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
@@ -8374,7 +8380,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_14__oct__(struct __py
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_builtin_oct, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_oct, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 638; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
@@ -8451,7 +8457,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13NumberElement_16__hex__(struct __py
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_builtin_hex, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_hex, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 641; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
@@ -10938,7 +10944,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_18__long__(struct __p
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyLong_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyLong_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
@@ -11080,7 +11086,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_13StringElement_22__complex__(struct
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyComplex_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyComplex_Type))), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
@@ -11812,7 +11818,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_11BoolElement_8__str__(struct __pyx_o
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_1;
@@ -12396,7 +12402,7 @@ static PyObject *__pyx_f_4lxml_9objectify__parseNumber(struct __pyx_obj_4lxml_9o
   PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_v_element->_parse_value, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_element->_parse_value, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_r = __pyx_t_1;
@@ -12538,7 +12544,7 @@ static PyObject *__pyx_f_4lxml_9objectify__strValueOf(PyObject *__pyx_v_obj) {
   __Pyx_INCREF(__pyx_v_obj);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_obj);
   __Pyx_GIVEREF(__pyx_v_obj);
-  __pyx_t_3 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 867; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 867; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_r = __pyx_t_3;
@@ -13388,7 +13394,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_4register(struct __pyx_obj_4l
         __Pyx_INCREF(__pyx_v_item);
         PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_item);
         __Pyx_GIVEREF(__pyx_v_item);
-        __pyx_t_7 = PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 947; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 947; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -13909,7 +13915,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 977; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
@@ -14064,7 +14070,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_6PyType_6unregister(struct __pyx_obj_
       PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_1);
       __Pyx_GIVEREF(__pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_1 = PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L10_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 983; __pyx_clineno = __LINE__; goto __pyx_L10_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -14234,7 +14240,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType_14xmlSchemaTypes_2__set__(struct __
   __Pyx_INCREF(__pyx_v_types);
   PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_types);
   __Pyx_GIVEREF(__pyx_v_types);
-  __pyx_t_2 = PyObject_Call(__pyx_builtin_map, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -14242,7 +14248,7 @@ static int __pyx_pf_4lxml_9objectify_6PyType_14xmlSchemaTypes_2__set__(struct __
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 995; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_GIVEREF(__pyx_t_2);
@@ -14616,7 +14622,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_IntElement)));
   PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_IntElement)));
   __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_IntElement)));
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1016; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1016; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_pytype = ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_2);
@@ -14640,7 +14646,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1021; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1021; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1021; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -14663,7 +14669,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_IntElement)));
   PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_IntElement)));
   __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_IntElement)));
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_2));
@@ -14678,7 +14684,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1025; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1025; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1025; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -14701,7 +14707,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_FloatElement)));
   PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_FloatElement)));
   __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_FloatElement)));
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1027; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_2));
@@ -14725,7 +14731,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1029; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1029; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1029; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -14755,7 +14761,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_1 = 0;
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1031; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_2));
@@ -14779,7 +14785,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -14802,7 +14808,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_StringElement)));
   PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_StringElement)));
   __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_StringElement)));
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1035; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_2));
@@ -14826,7 +14832,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1039; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -14849,7 +14855,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_NoneElement)));
   PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_NoneElement)));
   __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_NoneElement)));
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1042; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_2));
@@ -14864,7 +14870,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1043; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -14887,7 +14893,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
   __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_NoneElement)));
   PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_NoneElement)));
   __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_NoneElement)));
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1046; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1046; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF_SET(__pyx_v_pytype, ((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_t_2));
@@ -14902,7 +14908,7 @@ static PyObject *__pyx_f_4lxml_9objectify__registerPyTypes(void) {
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_pytype), __pyx_n_s_register); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1047; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -15415,7 +15421,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__guess
         __Pyx_INCREF(__pyx_v_value);
         PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_value);
         __Pyx_GIVEREF(__pyx_v_value);
-        __pyx_t_7 = PyObject_Call(__pyx_v_type_check, __pyx_t_5, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1088; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_type_check, __pyx_t_5, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1088; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -15706,7 +15712,7 @@ static PyObject *__pyx_f_4lxml_9objectify__guessElementClass(xmlNode *__pyx_v_c_
         __Pyx_INCREF(__pyx_v_value);
         PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_value);
         __Pyx_GIVEREF(__pyx_v_value);
-        __pyx_t_7 = PyObject_Call(__pyx_v_type_check, __pyx_t_5, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
+        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_type_check, __pyx_t_5, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1104; __pyx_clineno = __LINE__; goto __pyx_L9_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -15923,7 +15929,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
     __Pyx_INCREF(__pyx_v_self->_nsmap);
     PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_self->_nsmap);
     __Pyx_GIVEREF(__pyx_v_self->_nsmap);
-    __pyx_t_4 = PyObject_Call(__pyx_v_self->_element_factory, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_self->_element_factory, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_4lxml_8includes_11etreepublic__Element))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1131; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -16158,7 +16164,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
         __Pyx_INCREF(__pyx_v_elementMaker->_tag);
         PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_elementMaker->_tag);
         __Pyx_GIVEREF(__pyx_v_elementMaker->_tag);
-        __pyx_t_5 = PyObject_Call(__pyx_v_elementMaker->_element_factory, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_elementMaker->_element_factory, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_4lxml_8includes_11etreepublic__Element))))) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -16207,7 +16213,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
  */
       __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_child, __pyx_n_s_items); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_3 = PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       if (PyList_CheckExact(__pyx_t_3) || PyTuple_CheckExact(__pyx_t_3)) {
@@ -16364,7 +16370,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
           __Pyx_INCREF(__pyx_v_value);
           PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_value);
           __Pyx_GIVEREF(__pyx_v_value);
-          __pyx_t_3 = PyObject_Call(((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_v_pytype)->stringify, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_3 = __Pyx_PyObject_Call(((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_v_pytype)->stringify, __pyx_t_11, NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_3);
           __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
           __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_3);
@@ -16394,7 +16400,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
           __Pyx_INCREF(__pyx_v_value);
           PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_value);
           __Pyx_GIVEREF(__pyx_v_value);
-          __pyx_t_11 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_11 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_11);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_11);
@@ -16495,7 +16501,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
         __Pyx_INCREF(__pyx_v_child);
         PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_child);
         __Pyx_GIVEREF(__pyx_v_child);
-        __pyx_t_5 = PyObject_Call(((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_v_pytype)->stringify, __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_Call(((struct __pyx_obj_4lxml_9objectify_PyType *)__pyx_v_pytype)->stringify, __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         __pyx_t_11 = __pyx_f_4lxml_9objectify__add_text(__pyx_v_element, __pyx_t_5); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -16527,7 +16533,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_28_ObjectifyElementMakerCaller___call
         __Pyx_INCREF(__pyx_v_child);
         PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_v_child);
         __Pyx_GIVEREF(__pyx_v_child);
-        __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyUnicode_Type))), __pyx_t_11, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1178; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
         __Pyx_DECREF_SET(__pyx_v_child, __pyx_t_5);
@@ -17382,7 +17388,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
     __Pyx_INCREF(__pyx_v_tag);
     PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_tag);
     __Pyx_GIVEREF(__pyx_v_tag);
-    __pyx_t_4 = PyObject_Call(__pyx_v_4lxml_9objectify_is_special_method, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify_is_special_method, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -17407,7 +17413,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_2__getattr__(struct __
       __Pyx_INCREF(__pyx_v_tag);
       PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_tag);
       __Pyx_GIVEREF(__pyx_v_tag);
-      __pyx_t_5 = PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -17613,7 +17619,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_12ElementMaker_4__call__(struct __pyx
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_4 = __pyx_v_kwargs;
   __Pyx_INCREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_Call(__pyx_v_element_maker, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_element_maker, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1278; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -17929,7 +17935,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
  */
       __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_strip); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
       __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -18204,7 +18210,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
           __Pyx_INCREF(__pyx_kp_u_py);
           PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_kp_u_py);
           __Pyx_GIVEREF(__pyx_kp_u_py);
-          __pyx_t_1 = PyObject_Call(__pyx_t_8, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_1);
           __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -18232,7 +18238,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
       __Pyx_INCREF(__pyx_kp_u_xsi);
       PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_kp_u_xsi);
       __Pyx_GIVEREF(__pyx_kp_u_xsi);
-      __pyx_t_8 = PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -18263,10 +18269,10 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
     __pyx_t_2 = PyUnicode_Format(__pyx_kp_u_s_s_r, __pyx_t_8); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
-    __pyx_t_8 = PyUnicode_Concat(__pyx_v_result, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyUnicode_ConcatSafe(__pyx_v_result, __pyx_t_2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __Pyx_DECREF_SET(__pyx_v_result, ((PyObject*)__pyx_t_8));
+    __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_8);
     __pyx_t_8 = 0;
     __pyx_L6_continue:;
   }
@@ -18290,7 +18296,7 @@ static PyObject *__pyx_f_4lxml_9objectify__dump(struct LxmlElement *__pyx_v_elem
  */
   __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s_iterchildren); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_8 = PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1327; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   if (PyList_CheckExact(__pyx_t_8) || PyTuple_CheckExact(__pyx_t_8)) {
@@ -18470,7 +18476,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_16__unpickleElementTree(CYTHON_UNUSED
   __Pyx_INCREF(__pyx_v_data);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_data);
   __Pyx_GIVEREF(__pyx_v_data);
-  __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -18479,7 +18485,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_16__unpickleElementTree(CYTHON_UNUSED
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -18610,7 +18616,7 @@ static PyObject *__pyx_f_4lxml_9objectify__setupPickle(PyObject *__pyx_v_element
   __Pyx_GIVEREF(__pyx_t_4);
   __pyx_t_3 = 0;
   __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1346; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -18692,7 +18698,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_18pickleReduceElementTree(CYTHON_UNUS
   __Pyx_INCREF(__pyx_v_obj);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_obj);
   __Pyx_GIVEREF(__pyx_v_obj);
-  __pyx_t_4 = PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -19156,7 +19162,7 @@ static PyObject *__pyx_f_4lxml_9objectify__lookupElementClass(PyObject *__pyx_v_
  */
       __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_value, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_5 = PyObject_Call(__pyx_t_1, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1412; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
@@ -19445,7 +19451,7 @@ static struct __pyx_obj_4lxml_9objectify_PyType *__pyx_f_4lxml_9objectify__check
       __Pyx_INCREF(__pyx_v_value);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_value);
       __Pyx_GIVEREF(__pyx_v_value);
-      __pyx_t_7 = PyObject_Call(__pyx_v_pytype->type_check, __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_pytype->type_check, __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
@@ -20537,7 +20543,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
         __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_typename, __pyx_n_s_split); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_5 = PyObject_Call(__pyx_t_1, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1595; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
@@ -21192,7 +21198,7 @@ static int __pyx_f_4lxml_9objectify__annotate_element(xmlNode *__pyx_v_c_node, s
  */
           __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_typename_utf8, __pyx_n_s_split); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_6);
-          __pyx_t_5 = PyObject_Call(__pyx_t_6, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1670; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_5);
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
           if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
@@ -21743,7 +21749,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_v_4lxml_9objectify__strip_attributes, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify__strip_attributes, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -21770,7 +21776,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_26deannotate(CYTHON_UNUSED PyObject *
     __Pyx_INCREF(__pyx_v_element_or_tree);
     PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_element_or_tree);
     __Pyx_GIVEREF(__pyx_v_element_or_tree);
-    __pyx_t_5 = PyObject_Call(__pyx_v_4lxml_9objectify__cleanup_namespaces, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify__cleanup_namespaces, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -22046,7 +22052,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_30makeparser(CYTHON_UNUSED PyObject *
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = __pyx_v_kw;
   __Pyx_INCREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1773; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1773; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -22062,14 +22068,14 @@ static PyObject *__pyx_pf_4lxml_9objectify_30makeparser(CYTHON_UNUSED PyObject *
  */
   __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_parser, __pyx_n_s_set_element_class_lookup); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_ObjectifyElementClassLookup)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_ObjectifyElementClassLookup)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_4);
   __pyx_t_4 = 0;
-  __pyx_t_4 = PyObject_Call(__pyx_t_5, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -22303,7 +22309,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_32fromstring(CYTHON_UNUSED PyObject *
   __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_base_url, __pyx_v_base_url) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = PyObject_Call(__pyx_v_4lxml_9objectify__fromstring, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify__fromstring, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -22472,7 +22478,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_34XML(CYTHON_UNUSED PyObject *__pyx_s
   __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1818; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_base_url, __pyx_v_base_url) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1818; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = PyObject_Call(__pyx_v_4lxml_9objectify__fromstring, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1818; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify__fromstring, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1818; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -22641,7 +22647,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_36parse(CYTHON_UNUSED PyObject *__pyx
   __pyx_t_4 = PyDict_New(); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_base_url, __pyx_v_base_url) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = PyObject_Call(__pyx_v_4lxml_9objectify__parse, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify__parse, __pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -22818,7 +22824,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
       __Pyx_INCREF(__pyx_v_attrib);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_attrib);
       __Pyx_GIVEREF(__pyx_v_attrib);
-      __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1856; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1856; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __Pyx_DECREF_SET(__pyx_v_attrib, __pyx_t_4);
@@ -22838,7 +22844,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_38Element(CYTHON_UNUSED PyObject *__p
       __Pyx_INCREF(__pyx_v__attributes);
       PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v__attributes);
       __Pyx_GIVEREF(__pyx_v__attributes);
-      __pyx_t_5 = PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1857; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_3, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1857; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -23156,7 +23162,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v_attrib);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_attrib);
       __Pyx_GIVEREF(__pyx_v_attrib);
-      __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1886; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF_SET(__pyx_v_attrib, __pyx_t_5);
@@ -23176,7 +23182,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v__attributes);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v__attributes);
       __Pyx_GIVEREF(__pyx_v__attributes);
-      __pyx_t_6 = PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -23253,7 +23259,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
         __Pyx_XDECREF(__pyx_r);
         __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v__value, __pyx_n_s_copy); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_4 = PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1893; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __pyx_r = __pyx_t_4;
@@ -23318,7 +23324,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v_temp);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_temp);
       __Pyx_GIVEREF(__pyx_v_temp);
-      __pyx_t_6 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1898; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1898; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_6);
@@ -23338,7 +23344,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v_nsmap);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_nsmap);
       __Pyx_GIVEREF(__pyx_v_nsmap);
-      __pyx_t_5 = PyObject_Call(__pyx_t_6, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1899; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -23397,7 +23403,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v_temp);
       PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_temp);
       __Pyx_GIVEREF(__pyx_v_temp);
-      __pyx_t_4 = PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1904; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)(&PyDict_Type))), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1904; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF_SET(__pyx_v_temp, __pyx_t_4);
@@ -23417,7 +23423,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v__attributes);
       PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v__attributes);
       __Pyx_GIVEREF(__pyx_v__attributes);
-      __pyx_t_6 = PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1905; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1905; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -23571,7 +23577,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
       __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v__xsi, __pyx_n_s_split); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_5 = PyObject_Call(__pyx_t_6, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1920; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
@@ -23643,7 +23649,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
       __Pyx_INCREF(__pyx_v_prefix);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_prefix);
       __Pyx_GIVEREF(__pyx_v_prefix);
-      __pyx_t_6 = PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_4, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1921; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -23730,7 +23736,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
  */
       __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_nsmap, __pyx_n_s_items); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1929; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_4 = PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1929; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1929; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) {
@@ -24190,7 +24196,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
     __Pyx_INCREF(__pyx_v__value);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v__value);
     __Pyx_GIVEREF(__pyx_v__value);
-    __pyx_t_8 = PyObject_Call(__pyx_v_stringify, __pyx_t_6, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1963; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_stringify, __pyx_t_6, NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1963; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_v_strval = __pyx_t_8;
@@ -24304,7 +24310,7 @@ static PyObject *__pyx_pf_4lxml_9objectify_40DataElement(CYTHON_UNUSED PyObject
           __Pyx_INCREF(__pyx_v_strval);
           PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_strval);
           __Pyx_GIVEREF(__pyx_v_strval);
-          __pyx_t_6 = PyObject_Call(__pyx_v_type_check, __pyx_t_8, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1975; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_type_check, __pyx_t_8, NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1975; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_6);
           __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
           __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -25427,7 +25433,7 @@ static PyObject *__pyx_f_4lxml_9objectify__parseObjectPathString(PyObject *__pyx
  */
   __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_path, __pyx_n_s_strip); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 98; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF_SET(__pyx_v_path, __pyx_t_4);
@@ -25497,7 +25503,7 @@ static PyObject *__pyx_f_4lxml_9objectify__parseObjectPathString(PyObject *__pyx
     __Pyx_INCREF(__pyx_v_path_pos);
     PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_path_pos);
     __Pyx_GIVEREF(__pyx_v_path_pos);
-    __pyx_t_1 = PyObject_Call(__pyx_v_4lxml_9objectify___MATCH_PATH_SEGMENT, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_v_4lxml_9objectify___MATCH_PATH_SEGMENT, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_XDECREF_SET(__pyx_v_match, __pyx_t_1);
@@ -25533,7 +25539,7 @@ static PyObject *__pyx_f_4lxml_9objectify__parseObjectPathString(PyObject *__pyx
  */
     __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_match, __pyx_n_s_groups); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
@@ -25814,7 +25820,7 @@ static PyObject *__pyx_f_4lxml_9objectify__parseObjectPathString(PyObject *__pyx
  */
     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_match, __pyx_n_s_end); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_7 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 126; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_path_pos, __pyx_t_7);
@@ -26006,7 +26012,7 @@ static PyObject *__pyx_f_4lxml_9objectify__parseObjectPathList(PyObject *__pyx_v
  */
     __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_item, __pyx_n_s_strip); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_item, __pyx_t_5);
@@ -28205,113 +28211,6 @@ static PyTypeObject __pyx_type_4lxml_9objectify_PyType = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_4lxml_9objectify__ObjectifyElementMakerCaller(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
-  struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *p;
-  PyObject *o;
-  o = (*t->tp_alloc)(t, 0);
-  if (unlikely(!o)) return 0;
-  p = ((struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *)o);
-  p->_tag = Py_None; Py_INCREF(Py_None);
-  p->_nsmap = Py_None; Py_INCREF(Py_None);
-  p->_element_factory = Py_None; Py_INCREF(Py_None);
-  return o;
-}
-
-static void __pyx_tp_dealloc_4lxml_9objectify__ObjectifyElementMakerCaller(PyObject *o) {
-  struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *p = (struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *)o;
-  PyObject_GC_UnTrack(o);
-  Py_CLEAR(p->_tag);
-  Py_CLEAR(p->_nsmap);
-  Py_CLEAR(p->_element_factory);
-  (*Py_TYPE(o)->tp_free)(o);
-}
-
-static int __pyx_tp_traverse_4lxml_9objectify__ObjectifyElementMakerCaller(PyObject *o, visitproc v, void *a) {
-  int e;
-  struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *p = (struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *)o;
-  if (p->_tag) {
-    e = (*v)(p->_tag, a); if (e) return e;
-  }
-  if (p->_nsmap) {
-    e = (*v)(p->_nsmap, a); if (e) return e;
-  }
-  if (p->_element_factory) {
-    e = (*v)(p->_element_factory, a); if (e) return e;
-  }
-  return 0;
-}
-
-static int __pyx_tp_clear_4lxml_9objectify__ObjectifyElementMakerCaller(PyObject *o) {
-  struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *p = (struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *)o;
-  Py_CLEAR(p->_tag);
-  Py_CLEAR(p->_nsmap);
-  Py_CLEAR(p->_element_factory);
-  return 0;
-}
-
-static PyMethodDef __pyx_methods_4lxml_9objectify__ObjectifyElementMakerCaller[] = {
-  {0, 0, 0, 0}
-};
-
-static PyTypeObject __pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.objectify._ObjectifyElementMakerCaller"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_9objectify__ObjectifyElementMakerCaller, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*tp_repr*/
-  0, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  0, /*tp_hash*/
-  __pyx_pw_4lxml_9objectify_28_ObjectifyElementMakerCaller_1__call__, /*tp_call*/
-  0, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_9objectify__ObjectifyElementMakerCaller, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_9objectify__ObjectifyElementMakerCaller, /*tp_clear*/
-  0, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  0, /*tp_iter*/
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_9objectify__ObjectifyElementMakerCaller, /*tp_methods*/
-  0, /*tp_members*/
-  0, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_9objectify__ObjectifyElementMakerCaller, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
-  #endif
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-
 static PyObject *__pyx_tp_new_4lxml_9objectify_ObjectifiedElement(PyTypeObject *t, PyObject *a, PyObject *k) {
   PyObject *o = __pyx_ptype_4lxml_8includes_11etreepublic_ElementBase->tp_new(t, a, k);
   if (unlikely(!o)) return 0;
@@ -28734,21 +28633,21 @@ static PyTypeObject __pyx_type_4lxml_9objectify_NumberElement = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_4lxml_9objectify_FloatElement(PyTypeObject *t, PyObject *a, PyObject *k) {
+static PyObject *__pyx_tp_new_4lxml_9objectify_IntElement(PyTypeObject *t, PyObject *a, PyObject *k) {
   PyObject *o = __pyx_tp_new_4lxml_9objectify_NumberElement(t, a, k);
   if (unlikely(!o)) return 0;
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_9objectify_FloatElement[] = {
-  {__Pyx_NAMESTR("_init"), (PyCFunction)__pyx_pw_4lxml_9objectify_12FloatElement_1_init, METH_NOARGS, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_9objectify_IntElement[] = {
+  {__Pyx_NAMESTR("_init"), (PyCFunction)__pyx_pw_4lxml_9objectify_10IntElement_1_init, METH_NOARGS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_9objectify_FloatElement = {
+static PyTypeObject __pyx_type_4lxml_9objectify_IntElement = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.objectify.FloatElement"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_9objectify_FloatElement), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.objectify.IntElement"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_9objectify_IntElement), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_4lxml_9objectify_NumberElement, /*tp_dealloc*/
   0, /*tp_print*/
@@ -28789,7 +28688,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_FloatElement = {
   0, /*tp_iter*/
   #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_9objectify_FloatElement, /*tp_methods*/
+  __pyx_methods_4lxml_9objectify_IntElement, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -28799,7 +28698,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_FloatElement = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_9objectify_FloatElement, /*tp_new*/
+  __pyx_tp_new_4lxml_9objectify_IntElement, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -28816,21 +28715,21 @@ static PyTypeObject __pyx_type_4lxml_9objectify_FloatElement = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_4lxml_9objectify_IntElement(PyTypeObject *t, PyObject *a, PyObject *k) {
+static PyObject *__pyx_tp_new_4lxml_9objectify_LongElement(PyTypeObject *t, PyObject *a, PyObject *k) {
   PyObject *o = __pyx_tp_new_4lxml_9objectify_NumberElement(t, a, k);
   if (unlikely(!o)) return 0;
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_9objectify_IntElement[] = {
-  {__Pyx_NAMESTR("_init"), (PyCFunction)__pyx_pw_4lxml_9objectify_10IntElement_1_init, METH_NOARGS, __Pyx_DOCSTR(0)},
+static PyMethodDef __pyx_methods_4lxml_9objectify_LongElement[] = {
+  {__Pyx_NAMESTR("_init"), (PyCFunction)__pyx_pw_4lxml_9objectify_11LongElement_1_init, METH_NOARGS, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_9objectify_IntElement = {
+static PyTypeObject __pyx_type_4lxml_9objectify_LongElement = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.objectify.IntElement"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_9objectify_IntElement), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.objectify.LongElement"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_9objectify_LongElement), /*tp_basicsize*/
   0, /*tp_itemsize*/
   __pyx_tp_dealloc_4lxml_9objectify_NumberElement, /*tp_dealloc*/
   0, /*tp_print*/
@@ -28871,7 +28770,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_IntElement = {
   0, /*tp_iter*/
   #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_9objectify_IntElement, /*tp_methods*/
+  __pyx_methods_4lxml_9objectify_LongElement, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -28881,7 +28780,375 @@ static PyTypeObject __pyx_type_4lxml_9objectify_IntElement = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_9objectify_IntElement, /*tp_new*/
+  __pyx_tp_new_4lxml_9objectify_LongElement, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+
+static PyObject *__pyx_tp_new_4lxml_9objectify_FloatElement(PyTypeObject *t, PyObject *a, PyObject *k) {
+  PyObject *o = __pyx_tp_new_4lxml_9objectify_NumberElement(t, a, k);
+  if (unlikely(!o)) return 0;
+  return o;
+}
+
+static PyMethodDef __pyx_methods_4lxml_9objectify_FloatElement[] = {
+  {__Pyx_NAMESTR("_init"), (PyCFunction)__pyx_pw_4lxml_9objectify_12FloatElement_1_init, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type_4lxml_9objectify_FloatElement = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("lxml.objectify.FloatElement"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_9objectify_FloatElement), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_4lxml_9objectify_NumberElement, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_9objectify_13NumberElement_13__repr__, /*tp_repr*/
+  #else
+  0, /*tp_repr*/
+  #endif
+  0, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  0, /*tp_hash*/
+  0, /*tp_call*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_9objectify_13NumberElement_11__str__, /*tp_str*/
+  #else
+  0, /*tp_str*/
+  #endif
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_9objectify_NumberElement, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_9objectify_NumberElement, /*tp_clear*/
+  0, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_9objectify_18ObjectifiedElement_1__iter__, /*tp_iter*/
+  #else
+  0, /*tp_iter*/
+  #endif
+  0, /*tp_iternext*/
+  __pyx_methods_4lxml_9objectify_FloatElement, /*tp_methods*/
+  0, /*tp_members*/
+  0, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_4lxml_9objectify_FloatElement, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+
+static PyObject *__pyx_tp_new_4lxml_9objectify_StringElement(PyTypeObject *t, PyObject *a, PyObject *k) {
+  PyObject *o = __pyx_tp_new_4lxml_9objectify_ObjectifiedDataElement(t, a, k);
+  if (unlikely(!o)) return 0;
+  return o;
+}
+
+static PyObject *__pyx_getprop_4lxml_9objectify_13StringElement_pyval(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_9objectify_13StringElement_5pyval_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_9objectify_StringElement[] = {
+  {__Pyx_NAMESTR("strlen"), (PyCFunction)__pyx_pw_4lxml_9objectify_13StringElement_3strlen, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {__Pyx_NAMESTR("__complex__"), (PyCFunction)__pyx_pw_4lxml_9objectify_13StringElement_23__complex__, METH_NOARGS, __Pyx_DOCSTR(0)},
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_4lxml_9objectify_StringElement[] = {
+  {(char *)"pyval", __pyx_getprop_4lxml_9objectify_13StringElement_pyval, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_StringElement = {
+  __pyx_pw_4lxml_9objectify_13StringElement_11__add__, /*nb_add*/
+  0, /*nb_subtract*/
+  __pyx_pw_4lxml_9objectify_13StringElement_13__mul__, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  __pyx_pw_4lxml_9objectify_13StringElement_15__mod__, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  __pyx_pw_4lxml_9objectify_13StringElement_5__nonzero__, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  __pyx_pw_4lxml_9objectify_13StringElement_17__int__, /*nb_int*/
+  #if PY_MAJOR_VERSION < 3
+  __pyx_pw_4lxml_9objectify_13StringElement_19__long__, /*nb_long*/
+  #else
+  0, /*reserved*/
+  #endif
+  __pyx_pw_4lxml_9objectify_13StringElement_21__float__, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if PY_VERSION_HEX >= 0x02050000
+  0, /*nb_index*/
+  #endif
+};
+
+static PyTypeObject __pyx_type_4lxml_9objectify_StringElement = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("lxml.objectify.StringElement"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_9objectify_StringElement), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_4lxml_9objectify_ObjectifiedElement, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  __pyx_pw_4lxml_9objectify_13StringElement_1__repr__, /*tp_repr*/
+  &__pyx_tp_as_number_StringElement, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  __pyx_pw_4lxml_9objectify_13StringElement_9__hash__, /*tp_hash*/
+  0, /*tp_call*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_9objectify_22ObjectifiedDataElement_1__str__, /*tp_str*/
+  #else
+  0, /*tp_str*/
+  #endif
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  __Pyx_DOCSTR("String data class.\n\n    Note that this class does *not* support the sequence protocol of strings:\n    len(), iter(), str_attr[0], str_attr[0:1], etc. are *not* supported.\n    Instead, use the .text attribute to get a 'real' string.\n    "), /*tp_doc*/
+  __pyx_tp_traverse_4lxml_9objectify_ObjectifiedElement, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_9objectify_ObjectifiedElement, /*tp_clear*/
+  __pyx_pw_4lxml_9objectify_13StringElement_7__richcmp__, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_9objectify_18ObjectifiedElement_1__iter__, /*tp_iter*/
+  #else
+  0, /*tp_iter*/
+  #endif
+  0, /*tp_iternext*/
+  __pyx_methods_4lxml_9objectify_StringElement, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_4lxml_9objectify_StringElement, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_4lxml_9objectify_StringElement, /*tp_new*/
+  0, /*tp_free*/
+  0, /*tp_is_gc*/
+  0, /*tp_bases*/
+  0, /*tp_mro*/
+  0, /*tp_cache*/
+  0, /*tp_subclasses*/
+  0, /*tp_weaklist*/
+  0, /*tp_del*/
+  #if PY_VERSION_HEX >= 0x02060000
+  0, /*tp_version_tag*/
+  #endif
+  #if PY_VERSION_HEX >= 0x030400a1
+  0, /*tp_finalize*/
+  #endif
+};
+
+static PyObject *__pyx_tp_new_4lxml_9objectify_NoneElement(PyTypeObject *t, PyObject *a, PyObject *k) {
+  PyObject *o = __pyx_tp_new_4lxml_9objectify_ObjectifiedDataElement(t, a, k);
+  if (unlikely(!o)) return 0;
+  return o;
+}
+
+static PyObject *__pyx_getprop_4lxml_9objectify_11NoneElement_pyval(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_4lxml_9objectify_11NoneElement_5pyval_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_4lxml_9objectify_NoneElement[] = {
+  {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_4lxml_9objectify_NoneElement[] = {
+  {(char *)"pyval", __pyx_getprop_4lxml_9objectify_11NoneElement_pyval, 0, 0, 0},
+  {0, 0, 0, 0, 0}
+};
+
+static PyNumberMethods __pyx_tp_as_number_NoneElement = {
+  0, /*nb_add*/
+  0, /*nb_subtract*/
+  0, /*nb_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_divide*/
+  #endif
+  0, /*nb_remainder*/
+  0, /*nb_divmod*/
+  0, /*nb_power*/
+  0, /*nb_negative*/
+  0, /*nb_positive*/
+  0, /*nb_absolute*/
+  __pyx_pw_4lxml_9objectify_11NoneElement_5__nonzero__, /*nb_nonzero*/
+  0, /*nb_invert*/
+  0, /*nb_lshift*/
+  0, /*nb_rshift*/
+  0, /*nb_and*/
+  0, /*nb_xor*/
+  0, /*nb_or*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_coerce*/
+  #endif
+  0, /*nb_int*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_long*/
+  #else
+  0, /*reserved*/
+  #endif
+  0, /*nb_float*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_oct*/
+  #endif
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_hex*/
+  #endif
+  0, /*nb_inplace_add*/
+  0, /*nb_inplace_subtract*/
+  0, /*nb_inplace_multiply*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*nb_inplace_divide*/
+  #endif
+  0, /*nb_inplace_remainder*/
+  0, /*nb_inplace_power*/
+  0, /*nb_inplace_lshift*/
+  0, /*nb_inplace_rshift*/
+  0, /*nb_inplace_and*/
+  0, /*nb_inplace_xor*/
+  0, /*nb_inplace_or*/
+  0, /*nb_floor_divide*/
+  0, /*nb_true_divide*/
+  0, /*nb_inplace_floor_divide*/
+  0, /*nb_inplace_true_divide*/
+  #if PY_VERSION_HEX >= 0x02050000
+  0, /*nb_index*/
+  #endif
+};
+
+static PyTypeObject __pyx_type_4lxml_9objectify_NoneElement = {
+  PyVarObject_HEAD_INIT(0, 0)
+  __Pyx_NAMESTR("lxml.objectify.NoneElement"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_9objectify_NoneElement), /*tp_basicsize*/
+  0, /*tp_itemsize*/
+  __pyx_tp_dealloc_4lxml_9objectify_ObjectifiedElement, /*tp_dealloc*/
+  0, /*tp_print*/
+  0, /*tp_getattr*/
+  0, /*tp_setattr*/
+  #if PY_MAJOR_VERSION < 3
+  0, /*tp_compare*/
+  #else
+  0, /*reserved*/
+  #endif
+  __pyx_pw_4lxml_9objectify_11NoneElement_3__repr__, /*tp_repr*/
+  &__pyx_tp_as_number_NoneElement, /*tp_as_number*/
+  0, /*tp_as_sequence*/
+  0, /*tp_as_mapping*/
+  __pyx_pw_4lxml_9objectify_11NoneElement_9__hash__, /*tp_hash*/
+  0, /*tp_call*/
+  __pyx_pw_4lxml_9objectify_11NoneElement_1__str__, /*tp_str*/
+  0, /*tp_getattro*/
+  0, /*tp_setattro*/
+  0, /*tp_as_buffer*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  0, /*tp_doc*/
+  __pyx_tp_traverse_4lxml_9objectify_ObjectifiedElement, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_9objectify_ObjectifiedElement, /*tp_clear*/
+  __pyx_pw_4lxml_9objectify_11NoneElement_7__richcmp__, /*tp_richcompare*/
+  0, /*tp_weaklistoffset*/
+  #if CYTHON_COMPILING_IN_PYPY
+  __pyx_pw_4lxml_9objectify_18ObjectifiedElement_1__iter__, /*tp_iter*/
+  #else
+  0, /*tp_iter*/
+  #endif
+  0, /*tp_iternext*/
+  __pyx_methods_4lxml_9objectify_NoneElement, /*tp_methods*/
+  0, /*tp_members*/
+  __pyx_getsets_4lxml_9objectify_NoneElement, /*tp_getset*/
+  0, /*tp_base*/
+  0, /*tp_dict*/
+  0, /*tp_descr_get*/
+  0, /*tp_descr_set*/
+  0, /*tp_dictoffset*/
+  0, /*tp_init*/
+  0, /*tp_alloc*/
+  __pyx_tp_new_4lxml_9objectify_NoneElement, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -29123,23 +29390,60 @@ static PyTypeObject __pyx_type_4lxml_9objectify_BoolElement = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_4lxml_9objectify_LongElement(PyTypeObject *t, PyObject *a, PyObject *k) {
-  PyObject *o = __pyx_tp_new_4lxml_9objectify_NumberElement(t, a, k);
+static PyObject *__pyx_tp_new_4lxml_9objectify__ObjectifyElementMakerCaller(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+  struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *p;
+  PyObject *o;
+  o = (*t->tp_alloc)(t, 0);
   if (unlikely(!o)) return 0;
+  p = ((struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *)o);
+  p->_tag = Py_None; Py_INCREF(Py_None);
+  p->_nsmap = Py_None; Py_INCREF(Py_None);
+  p->_element_factory = Py_None; Py_INCREF(Py_None);
   return o;
 }
 
-static PyMethodDef __pyx_methods_4lxml_9objectify_LongElement[] = {
-  {__Pyx_NAMESTR("_init"), (PyCFunction)__pyx_pw_4lxml_9objectify_11LongElement_1_init, METH_NOARGS, __Pyx_DOCSTR(0)},
+static void __pyx_tp_dealloc_4lxml_9objectify__ObjectifyElementMakerCaller(PyObject *o) {
+  struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *p = (struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *)o;
+  PyObject_GC_UnTrack(o);
+  Py_CLEAR(p->_tag);
+  Py_CLEAR(p->_nsmap);
+  Py_CLEAR(p->_element_factory);
+  (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_4lxml_9objectify__ObjectifyElementMakerCaller(PyObject *o, visitproc v, void *a) {
+  int e;
+  struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *p = (struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *)o;
+  if (p->_tag) {
+    e = (*v)(p->_tag, a); if (e) return e;
+  }
+  if (p->_nsmap) {
+    e = (*v)(p->_nsmap, a); if (e) return e;
+  }
+  if (p->_element_factory) {
+    e = (*v)(p->_element_factory, a); if (e) return e;
+  }
+  return 0;
+}
+
+static int __pyx_tp_clear_4lxml_9objectify__ObjectifyElementMakerCaller(PyObject *o) {
+  struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *p = (struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller *)o;
+  Py_CLEAR(p->_tag);
+  Py_CLEAR(p->_nsmap);
+  Py_CLEAR(p->_element_factory);
+  return 0;
+}
+
+static PyMethodDef __pyx_methods_4lxml_9objectify__ObjectifyElementMakerCaller[] = {
   {0, 0, 0, 0}
 };
 
-static PyTypeObject __pyx_type_4lxml_9objectify_LongElement = {
+static PyTypeObject __pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller = {
   PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.objectify.LongElement"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_9objectify_LongElement), /*tp_basicsize*/
+  __Pyx_NAMESTR("lxml.objectify._ObjectifyElementMakerCaller"), /*tp_name*/
+  sizeof(struct __pyx_obj_4lxml_9objectify__ObjectifyElementMakerCaller), /*tp_basicsize*/
   0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_9objectify_NumberElement, /*tp_dealloc*/
+  __pyx_tp_dealloc_4lxml_9objectify__ObjectifyElementMakerCaller, /*tp_dealloc*/
   0, /*tp_print*/
   0, /*tp_getattr*/
   0, /*tp_setattr*/
@@ -29148,37 +29452,25 @@ static PyTypeObject __pyx_type_4lxml_9objectify_LongElement = {
   #else
   0, /*reserved*/
   #endif
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_13__repr__, /*tp_repr*/
-  #else
   0, /*tp_repr*/
-  #endif
   0, /*tp_as_number*/
   0, /*tp_as_sequence*/
   0, /*tp_as_mapping*/
   0, /*tp_hash*/
-  0, /*tp_call*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_13NumberElement_11__str__, /*tp_str*/
-  #else
+  __pyx_pw_4lxml_9objectify_28_ObjectifyElementMakerCaller_1__call__, /*tp_call*/
   0, /*tp_str*/
-  #endif
   0, /*tp_getattro*/
   0, /*tp_setattro*/
   0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
   0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_9objectify_NumberElement, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_9objectify_NumberElement, /*tp_clear*/
+  __pyx_tp_traverse_4lxml_9objectify__ObjectifyElementMakerCaller, /*tp_traverse*/
+  __pyx_tp_clear_4lxml_9objectify__ObjectifyElementMakerCaller, /*tp_clear*/
   0, /*tp_richcompare*/
   0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_18ObjectifiedElement_1__iter__, /*tp_iter*/
-  #else
   0, /*tp_iter*/
-  #endif
   0, /*tp_iternext*/
-  __pyx_methods_4lxml_9objectify_LongElement, /*tp_methods*/
+  __pyx_methods_4lxml_9objectify__ObjectifyElementMakerCaller, /*tp_methods*/
   0, /*tp_members*/
   0, /*tp_getset*/
   0, /*tp_base*/
@@ -29188,7 +29480,7 @@ static PyTypeObject __pyx_type_4lxml_9objectify_LongElement = {
   0, /*tp_dictoffset*/
   0, /*tp_init*/
   0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_9objectify_LongElement, /*tp_new*/
+  __pyx_tp_new_4lxml_9objectify__ObjectifyElementMakerCaller, /*tp_new*/
   0, /*tp_free*/
   0, /*tp_is_gc*/
   0, /*tp_bases*/
@@ -29450,146 +29742,6 @@ static PyTypeObject __pyx_type_4lxml_9objectify_ObjectifyElementClassLookup = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_4lxml_9objectify_NoneElement(PyTypeObject *t, PyObject *a, PyObject *k) {
-  PyObject *o = __pyx_tp_new_4lxml_9objectify_ObjectifiedDataElement(t, a, k);
-  if (unlikely(!o)) return 0;
-  return o;
-}
-
-static PyObject *__pyx_getprop_4lxml_9objectify_11NoneElement_pyval(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_9objectify_11NoneElement_5pyval_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_9objectify_NoneElement[] = {
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_4lxml_9objectify_NoneElement[] = {
-  {(char *)"pyval", __pyx_getprop_4lxml_9objectify_11NoneElement_pyval, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyNumberMethods __pyx_tp_as_number_NoneElement = {
-  0, /*nb_add*/
-  0, /*nb_subtract*/
-  0, /*nb_multiply*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_divide*/
-  #endif
-  0, /*nb_remainder*/
-  0, /*nb_divmod*/
-  0, /*nb_power*/
-  0, /*nb_negative*/
-  0, /*nb_positive*/
-  0, /*nb_absolute*/
-  __pyx_pw_4lxml_9objectify_11NoneElement_5__nonzero__, /*nb_nonzero*/
-  0, /*nb_invert*/
-  0, /*nb_lshift*/
-  0, /*nb_rshift*/
-  0, /*nb_and*/
-  0, /*nb_xor*/
-  0, /*nb_or*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_coerce*/
-  #endif
-  0, /*nb_int*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_long*/
-  #else
-  0, /*reserved*/
-  #endif
-  0, /*nb_float*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_oct*/
-  #endif
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_hex*/
-  #endif
-  0, /*nb_inplace_add*/
-  0, /*nb_inplace_subtract*/
-  0, /*nb_inplace_multiply*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_inplace_divide*/
-  #endif
-  0, /*nb_inplace_remainder*/
-  0, /*nb_inplace_power*/
-  0, /*nb_inplace_lshift*/
-  0, /*nb_inplace_rshift*/
-  0, /*nb_inplace_and*/
-  0, /*nb_inplace_xor*/
-  0, /*nb_inplace_or*/
-  0, /*nb_floor_divide*/
-  0, /*nb_true_divide*/
-  0, /*nb_inplace_floor_divide*/
-  0, /*nb_inplace_true_divide*/
-  #if PY_VERSION_HEX >= 0x02050000
-  0, /*nb_index*/
-  #endif
-};
-
-static PyTypeObject __pyx_type_4lxml_9objectify_NoneElement = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.objectify.NoneElement"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_9objectify_NoneElement), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_9objectify_ObjectifiedElement, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  __pyx_pw_4lxml_9objectify_11NoneElement_3__repr__, /*tp_repr*/
-  &__pyx_tp_as_number_NoneElement, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  __pyx_pw_4lxml_9objectify_11NoneElement_9__hash__, /*tp_hash*/
-  0, /*tp_call*/
-  __pyx_pw_4lxml_9objectify_11NoneElement_1__str__, /*tp_str*/
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  0, /*tp_doc*/
-  __pyx_tp_traverse_4lxml_9objectify_ObjectifiedElement, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_9objectify_ObjectifiedElement, /*tp_clear*/
-  __pyx_pw_4lxml_9objectify_11NoneElement_7__richcmp__, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_18ObjectifiedElement_1__iter__, /*tp_iter*/
-  #else
-  0, /*tp_iter*/
-  #endif
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_9objectify_NoneElement, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_4lxml_9objectify_NoneElement, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_9objectify_NoneElement, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
-  #endif
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-
 static PyObject *__pyx_tp_new_4lxml_9objectify_ObjectPath(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
   struct __pyx_obj_4lxml_9objectify_ObjectPath *p;
   PyObject *o;
@@ -29726,152 +29878,6 @@ static PyTypeObject __pyx_type_4lxml_9objectify_ObjectPath = {
   #endif
 };
 
-static PyObject *__pyx_tp_new_4lxml_9objectify_StringElement(PyTypeObject *t, PyObject *a, PyObject *k) {
-  PyObject *o = __pyx_tp_new_4lxml_9objectify_ObjectifiedDataElement(t, a, k);
-  if (unlikely(!o)) return 0;
-  return o;
-}
-
-static PyObject *__pyx_getprop_4lxml_9objectify_13StringElement_pyval(PyObject *o, CYTHON_UNUSED void *x) {
-  return __pyx_pw_4lxml_9objectify_13StringElement_5pyval_1__get__(o);
-}
-
-static PyMethodDef __pyx_methods_4lxml_9objectify_StringElement[] = {
-  {__Pyx_NAMESTR("strlen"), (PyCFunction)__pyx_pw_4lxml_9objectify_13StringElement_3strlen, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {__Pyx_NAMESTR("__complex__"), (PyCFunction)__pyx_pw_4lxml_9objectify_13StringElement_23__complex__, METH_NOARGS, __Pyx_DOCSTR(0)},
-  {0, 0, 0, 0}
-};
-
-static struct PyGetSetDef __pyx_getsets_4lxml_9objectify_StringElement[] = {
-  {(char *)"pyval", __pyx_getprop_4lxml_9objectify_13StringElement_pyval, 0, 0, 0},
-  {0, 0, 0, 0, 0}
-};
-
-static PyNumberMethods __pyx_tp_as_number_StringElement = {
-  __pyx_pw_4lxml_9objectify_13StringElement_11__add__, /*nb_add*/
-  0, /*nb_subtract*/
-  __pyx_pw_4lxml_9objectify_13StringElement_13__mul__, /*nb_multiply*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_divide*/
-  #endif
-  __pyx_pw_4lxml_9objectify_13StringElement_15__mod__, /*nb_remainder*/
-  0, /*nb_divmod*/
-  0, /*nb_power*/
-  0, /*nb_negative*/
-  0, /*nb_positive*/
-  0, /*nb_absolute*/
-  __pyx_pw_4lxml_9objectify_13StringElement_5__nonzero__, /*nb_nonzero*/
-  0, /*nb_invert*/
-  0, /*nb_lshift*/
-  0, /*nb_rshift*/
-  0, /*nb_and*/
-  0, /*nb_xor*/
-  0, /*nb_or*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_coerce*/
-  #endif
-  __pyx_pw_4lxml_9objectify_13StringElement_17__int__, /*nb_int*/
-  #if PY_MAJOR_VERSION < 3
-  __pyx_pw_4lxml_9objectify_13StringElement_19__long__, /*nb_long*/
-  #else
-  0, /*reserved*/
-  #endif
-  __pyx_pw_4lxml_9objectify_13StringElement_21__float__, /*nb_float*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_oct*/
-  #endif
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_hex*/
-  #endif
-  0, /*nb_inplace_add*/
-  0, /*nb_inplace_subtract*/
-  0, /*nb_inplace_multiply*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*nb_inplace_divide*/
-  #endif
-  0, /*nb_inplace_remainder*/
-  0, /*nb_inplace_power*/
-  0, /*nb_inplace_lshift*/
-  0, /*nb_inplace_rshift*/
-  0, /*nb_inplace_and*/
-  0, /*nb_inplace_xor*/
-  0, /*nb_inplace_or*/
-  0, /*nb_floor_divide*/
-  0, /*nb_true_divide*/
-  0, /*nb_inplace_floor_divide*/
-  0, /*nb_inplace_true_divide*/
-  #if PY_VERSION_HEX >= 0x02050000
-  0, /*nb_index*/
-  #endif
-};
-
-static PyTypeObject __pyx_type_4lxml_9objectify_StringElement = {
-  PyVarObject_HEAD_INIT(0, 0)
-  __Pyx_NAMESTR("lxml.objectify.StringElement"), /*tp_name*/
-  sizeof(struct __pyx_obj_4lxml_9objectify_StringElement), /*tp_basicsize*/
-  0, /*tp_itemsize*/
-  __pyx_tp_dealloc_4lxml_9objectify_ObjectifiedElement, /*tp_dealloc*/
-  0, /*tp_print*/
-  0, /*tp_getattr*/
-  0, /*tp_setattr*/
-  #if PY_MAJOR_VERSION < 3
-  0, /*tp_compare*/
-  #else
-  0, /*reserved*/
-  #endif
-  __pyx_pw_4lxml_9objectify_13StringElement_1__repr__, /*tp_repr*/
-  &__pyx_tp_as_number_StringElement, /*tp_as_number*/
-  0, /*tp_as_sequence*/
-  0, /*tp_as_mapping*/
-  __pyx_pw_4lxml_9objectify_13StringElement_9__hash__, /*tp_hash*/
-  0, /*tp_call*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_22ObjectifiedDataElement_1__str__, /*tp_str*/
-  #else
-  0, /*tp_str*/
-  #endif
-  0, /*tp_getattro*/
-  0, /*tp_setattro*/
-  0, /*tp_as_buffer*/
-  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
-  __Pyx_DOCSTR("String data class.\n\n    Note that this class does *not* support the sequence protocol of strings:\n    len(), iter(), str_attr[0], str_attr[0:1], etc. are *not* supported.\n    Instead, use the .text attribute to get a 'real' string.\n    "), /*tp_doc*/
-  __pyx_tp_traverse_4lxml_9objectify_ObjectifiedElement, /*tp_traverse*/
-  __pyx_tp_clear_4lxml_9objectify_ObjectifiedElement, /*tp_clear*/
-  __pyx_pw_4lxml_9objectify_13StringElement_7__richcmp__, /*tp_richcompare*/
-  0, /*tp_weaklistoffset*/
-  #if CYTHON_COMPILING_IN_PYPY
-  __pyx_pw_4lxml_9objectify_18ObjectifiedElement_1__iter__, /*tp_iter*/
-  #else
-  0, /*tp_iter*/
-  #endif
-  0, /*tp_iternext*/
-  __pyx_methods_4lxml_9objectify_StringElement, /*tp_methods*/
-  0, /*tp_members*/
-  __pyx_getsets_4lxml_9objectify_StringElement, /*tp_getset*/
-  0, /*tp_base*/
-  0, /*tp_dict*/
-  0, /*tp_descr_get*/
-  0, /*tp_descr_set*/
-  0, /*tp_dictoffset*/
-  0, /*tp_init*/
-  0, /*tp_alloc*/
-  __pyx_tp_new_4lxml_9objectify_StringElement, /*tp_new*/
-  0, /*tp_free*/
-  0, /*tp_is_gc*/
-  0, /*tp_bases*/
-  0, /*tp_mro*/
-  0, /*tp_cache*/
-  0, /*tp_subclasses*/
-  0, /*tp_weaklist*/
-  0, /*tp_del*/
-  #if PY_VERSION_HEX >= 0x02060000
-  0, /*tp_version_tag*/
-  #endif
-  #if PY_VERSION_HEX >= 0x030400a1
-  0, /*tp_finalize*/
-  #endif
-};
-
 static PyMethodDef __pyx_methods[] = {
   {__Pyx_NAMESTR("__parseBool"), (PyCFunction)__pyx_pw_4lxml_9objectify_5__parseBool, METH_O, __Pyx_DOCSTR(0)},
   {0, 0, 0, 0}
@@ -30421,7 +30427,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__37 = PyTuple_Pack(5, __pyx_n_s_element_or_tree, __pyx_n_s_ignore_old, __pyx_n_s_ignore_xsi, __pyx_n_s_empty_pytype, __pyx_n_s_element); if (unlikely(!__pyx_tuple__37)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__37);
   __Pyx_GIVEREF(__pyx_tuple__37);
-  __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(4, 3, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_pyannotate, 1444, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__38 = (PyObject*)__Pyx_PyCode_New(1, 3, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__37, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_pyannotate, 1444, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__38)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1444; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":1467
  *     _annotate(element, 0, 1, ignore_xsi, ignore_old, None, empty_pytype)
@@ -30433,7 +30439,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__39 = PyTuple_Pack(5, __pyx_n_s_element_or_tree, __pyx_n_s_ignore_old, __pyx_n_s_ignore_pytype, __pyx_n_s_empty_type, __pyx_n_s_element); if (unlikely(!__pyx_tuple__39)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__39);
   __Pyx_GIVEREF(__pyx_tuple__39);
-  __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(4, 3, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_xsiannotate, 1467, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__40 = (PyObject*)__Pyx_PyCode_New(1, 3, 5, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__39, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_xsiannotate, 1467, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__40)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1467; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":1495
  *     _annotate(element, 1, 0, ignore_old, ignore_pytype, empty_type, None)
@@ -30445,7 +30451,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__41 = PyTuple_Pack(8, __pyx_n_s_element_or_tree, __pyx_n_s_ignore_old, __pyx_n_s_ignore_xsi, __pyx_n_s_empty_pytype, __pyx_n_s_empty_type, __pyx_n_s_annotate_xsi, __pyx_n_s_annotate_pytype, __pyx_n_s_element); if (unlikely(!__pyx_tuple__41)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__41);
   __Pyx_GIVEREF(__pyx_tuple__41);
-  __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(7, 6, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_annotate, 1495, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__42 = (PyObject*)__Pyx_PyCode_New(1, 6, 8, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__41, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_annotate, 1495, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__42)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1495; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":1703
  * cdef object _cleanup_namespaces = etree.cleanup_namespaces
@@ -30457,7 +30463,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__43 = PyTuple_Pack(6, __pyx_n_s_element_or_tree, __pyx_n_s_pytype, __pyx_n_s_xsi_2, __pyx_n_s_xsi_nil, __pyx_n_s_cleanup_namespaces, __pyx_n_s_attribute_names); if (unlikely(!__pyx_tuple__43)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__43);
   __Pyx_GIVEREF(__pyx_tuple__43);
-  __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(5, 4, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_deannotate, 1703, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__44 = (PyObject*)__Pyx_PyCode_New(1, 4, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__43, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_deannotate, 1703, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__44)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":1743
  * objectify_parser = __DEFAULT_PARSER
@@ -30478,10 +30484,10 @@ static int __Pyx_InitCachedConstants(void) {
  *     u"""makeparser(remove_blank_text=True, **kw)
  * 
  */
-  __pyx_tuple__47 = PyTuple_Pack(3, __pyx_n_s_kw, __pyx_n_s_kw, __pyx_n_s_parser); if (unlikely(!__pyx_tuple__47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__47 = PyTuple_Pack(2, __pyx_n_s_kw, __pyx_n_s_parser); if (unlikely(!__pyx_tuple__47)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__47);
   __Pyx_GIVEREF(__pyx_tuple__47);
-  __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(0, 0, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_makeparser, 1761, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__48 = (PyObject*)__Pyx_PyCode_New(0, 0, 2, 0, CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__47, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_makeparser, 1761, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__48)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1761; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":1788
  * SubElement = etree.SubElement
@@ -30493,7 +30499,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__49 = PyTuple_Pack(3, __pyx_n_s_xml, __pyx_n_s_parser, __pyx_n_s_base_url); if (unlikely(!__pyx_tuple__49)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__49);
   __Pyx_GIVEREF(__pyx_tuple__49);
-  __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(3, 1, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_fromstring, 1788, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__50 = (PyObject*)__Pyx_PyCode_New(2, 1, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__49, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_fromstring, 1788, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__50)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":1804
  *     return _fromstring(xml, parser, base_url=base_url)
@@ -30505,7 +30511,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__51 = PyTuple_Pack(3, __pyx_n_s_xml, __pyx_n_s_parser, __pyx_n_s_base_url); if (unlikely(!__pyx_tuple__51)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__51);
   __Pyx_GIVEREF(__pyx_tuple__51);
-  __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(3, 1, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_XML, 1804, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__52 = (PyObject*)__Pyx_PyCode_New(2, 1, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__51, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_XML, 1804, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__52)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1804; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":1823
  * _parse = etree.parse
@@ -30517,7 +30523,7 @@ static int __Pyx_InitCachedConstants(void) {
   __pyx_tuple__53 = PyTuple_Pack(3, __pyx_n_s_f, __pyx_n_s_parser, __pyx_n_s_base_url); if (unlikely(!__pyx_tuple__53)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__53);
   __Pyx_GIVEREF(__pyx_tuple__53);
-  __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(3, 1, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_parse, 1823, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__54 = (PyObject*)__Pyx_PyCode_New(2, 1, 3, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__53, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_parse, 1823, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__54)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":1846
  * E = ElementMaker()
@@ -30526,10 +30532,10 @@ static int __Pyx_InitCachedConstants(void) {
  *     u"""Element(_tag, attrib=None, nsmap=None, _pytype=None, **_attributes)
  * 
  */
-  __pyx_tuple__55 = PyTuple_Pack(6, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_pytype_2, __pyx_n_s_attributes, __pyx_n_s_attributes); if (unlikely(!__pyx_tuple__55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1846; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__55 = PyTuple_Pack(5, __pyx_n_s_tag_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_pytype_2, __pyx_n_s_attributes); if (unlikely(!__pyx_tuple__55)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1846; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__55);
   __Pyx_GIVEREF(__pyx_tuple__55);
-  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(4, 1, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_Element, 1846, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1846; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__56 = (PyObject*)__Pyx_PyCode_New(3, 1, 5, 0, CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__55, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_Element, 1846, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__56)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1846; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/lxml.objectify.pyx":1866
  *     return _makeElement(_tag, None, _attributes, nsmap)
@@ -30538,10 +30544,10 @@ static int __Pyx_InitCachedConstants(void) {
  *                 **_attributes):
  *     u"""DataElement(_value, attrib=None, nsmap=None, _pytype=None, _xsi=None, **_attributes)
  */
-  __pyx_tuple__57 = PyTuple_Pack(15, __pyx_n_s_value_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_pytype_2, __pyx_n_s_xsi_3, __pyx_n_s_attributes, __pyx_n_s_attributes, __pyx_n_s_dict_result, __pyx_n_s_temp, __pyx_n_s_prefix, __pyx_n_s_name, __pyx_n_s_ns, __pyx_n_s_strval, __pyx_n_s_stringify, __pyx_n_s_type_check); if (unlikely(!__pyx_tuple__57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1866; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_tuple__57 = PyTuple_Pack(14, __pyx_n_s_value_2, __pyx_n_s_attrib, __pyx_n_s_nsmap, __pyx_n_s_pytype_2, __pyx_n_s_xsi_3, __pyx_n_s_attributes, __pyx_n_s_dict_result, __pyx_n_s_temp, __pyx_n_s_prefix, __pyx_n_s_name, __pyx_n_s_ns, __pyx_n_s_strval, __pyx_n_s_stringify, __pyx_n_s_type_check); if (unlikely(!__pyx_tuple__57)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1866; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_tuple__57);
   __Pyx_GIVEREF(__pyx_tuple__57);
-  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(5, 2, 15, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_DataElement, 1866, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1866; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_codeobj__58 = (PyObject*)__Pyx_PyCode_New(3, 2, 14, 0, CO_VARKEYWORDS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__57, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_home_stefan_source_Python_lxml, __pyx_n_s_DataElement, 1866, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__58)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1866; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/objectpath.pxi":89
  * 
@@ -30685,19 +30691,6 @@ PyMODINIT_FUNC PyInit_objectify(void)
   __pyx_type_4lxml_9objectify_PyType.tp_print = 0;
   if (__Pyx_SetAttrString(__pyx_m, "PyType", (PyObject *)&__pyx_type_4lxml_9objectify_PyType) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 888; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_9objectify_PyType = &__pyx_type_4lxml_9objectify_PyType;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller.tp_print = 0;
-  #if CYTHON_COMPILING_IN_CPYTHON
-  {
-    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
-      __pyx_wrapperbase_4lxml_9objectify_28_ObjectifyElementMakerCaller___call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
-      __pyx_wrapperbase_4lxml_9objectify_28_ObjectifyElementMakerCaller___call__.doc = __pyx_doc_4lxml_9objectify_28_ObjectifyElementMakerCaller___call__;
-      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_9objectify_28_ObjectifyElementMakerCaller___call__;
-    }
-  }
-  #endif
-  __pyx_ptype_4lxml_9objectify__ObjectifyElementMakerCaller = &__pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller;
   __pyx_ptype_4lxml_8includes_11etreepublic_ElementBase = __Pyx_ImportType("lxml.etree", "ElementBase", sizeof(struct LxmlElementBase), 0); if (unlikely(!__pyx_ptype_4lxml_8includes_11etreepublic_ElementBase)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_type_4lxml_9objectify_ObjectifiedElement.tp_base = __pyx_ptype_4lxml_8includes_11etreepublic_ElementBase;
   if (PyType_Ready(&__pyx_type_4lxml_9objectify_ObjectifiedElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 120; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -30774,26 +30767,49 @@ PyMODINIT_FUNC PyInit_objectify(void)
   __pyx_type_4lxml_9objectify_NumberElement.tp_print = 0;
   if (__Pyx_SetAttrString(__pyx_m, "NumberElement", (PyObject *)&__pyx_type_4lxml_9objectify_NumberElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 606; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_9objectify_NumberElement = &__pyx_type_4lxml_9objectify_NumberElement;
-  __pyx_type_4lxml_9objectify_FloatElement.tp_base = __pyx_ptype_4lxml_9objectify_NumberElement;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_FloatElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 711; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_9objectify_FloatElement.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "FloatElement", (PyObject *)&__pyx_type_4lxml_9objectify_FloatElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 711; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_9objectify_FloatElement = &__pyx_type_4lxml_9objectify_FloatElement;
   __pyx_type_4lxml_9objectify_IntElement.tp_base = __pyx_ptype_4lxml_9objectify_NumberElement;
   if (PyType_Ready(&__pyx_type_4lxml_9objectify_IntElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_type_4lxml_9objectify_IntElement.tp_print = 0;
   if (__Pyx_SetAttrString(__pyx_m, "IntElement", (PyObject *)&__pyx_type_4lxml_9objectify_IntElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_9objectify_IntElement = &__pyx_type_4lxml_9objectify_IntElement;
-  __pyx_type_4lxml_9objectify_BoolElement.tp_base = __pyx_ptype_4lxml_9objectify_IntElement;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_BoolElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_9objectify_BoolElement.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "BoolElement", (PyObject *)&__pyx_type_4lxml_9objectify_BoolElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_9objectify_BoolElement = &__pyx_type_4lxml_9objectify_BoolElement;
   __pyx_type_4lxml_9objectify_LongElement.tp_base = __pyx_ptype_4lxml_9objectify_NumberElement;
   if (PyType_Ready(&__pyx_type_4lxml_9objectify_LongElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_type_4lxml_9objectify_LongElement.tp_print = 0;
   if (__Pyx_SetAttrString(__pyx_m, "LongElement", (PyObject *)&__pyx_type_4lxml_9objectify_LongElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_9objectify_LongElement = &__pyx_type_4lxml_9objectify_LongElement;
+  __pyx_type_4lxml_9objectify_FloatElement.tp_base = __pyx_ptype_4lxml_9objectify_NumberElement;
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_FloatElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 711; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_9objectify_FloatElement.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "FloatElement", (PyObject *)&__pyx_type_4lxml_9objectify_FloatElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 711; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_9objectify_FloatElement = &__pyx_type_4lxml_9objectify_FloatElement;
+  __pyx_type_4lxml_9objectify_StringElement.tp_base = __pyx_ptype_4lxml_9objectify_ObjectifiedDataElement;
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_StringElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_9objectify_StringElement.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "StringElement", (PyObject *)&__pyx_type_4lxml_9objectify_StringElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_9objectify_StringElement = &__pyx_type_4lxml_9objectify_StringElement;
+  __pyx_type_4lxml_9objectify_NoneElement.tp_base = __pyx_ptype_4lxml_9objectify_ObjectifiedDataElement;
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_NoneElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_9objectify_NoneElement.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "NoneElement", (PyObject *)&__pyx_type_4lxml_9objectify_NoneElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_9objectify_NoneElement = &__pyx_type_4lxml_9objectify_NoneElement;
+  __pyx_type_4lxml_9objectify_BoolElement.tp_base = __pyx_ptype_4lxml_9objectify_IntElement;
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify_BoolElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_9objectify_BoolElement.tp_print = 0;
+  if (__Pyx_SetAttrString(__pyx_m, "BoolElement", (PyObject *)&__pyx_type_4lxml_9objectify_BoolElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_ptype_4lxml_9objectify_BoolElement = &__pyx_type_4lxml_9objectify_BoolElement;
+  if (PyType_Ready(&__pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller.tp_print = 0;
+  #if CYTHON_COMPILING_IN_CPYTHON
+  {
+    PyObject *wrapper = __Pyx_GetAttrString((PyObject *)&__pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller, "__call__"); if (unlikely(!wrapper)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1115; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (Py_TYPE(wrapper) == &PyWrapperDescr_Type) {
+      __pyx_wrapperbase_4lxml_9objectify_28_ObjectifyElementMakerCaller___call__ = *((PyWrapperDescrObject *)wrapper)->d_base;
+      __pyx_wrapperbase_4lxml_9objectify_28_ObjectifyElementMakerCaller___call__.doc = __pyx_doc_4lxml_9objectify_28_ObjectifyElementMakerCaller___call__;
+      ((PyWrapperDescrObject *)wrapper)->d_base = &__pyx_wrapperbase_4lxml_9objectify_28_ObjectifyElementMakerCaller___call__;
+    }
+  }
+  #endif
+  __pyx_ptype_4lxml_9objectify__ObjectifyElementMakerCaller = &__pyx_type_4lxml_9objectify__ObjectifyElementMakerCaller;
   __pyx_vtabptr_4lxml_9objectify_ElementMaker = &__pyx_vtable_4lxml_9objectify_ElementMaker;
   __pyx_vtable_4lxml_9objectify_ElementMaker._build_element_maker = (PyObject *(*)(struct __pyx_obj_4lxml_9objectify_ElementMaker *, PyObject *))__pyx_f_4lxml_9objectify_12ElementMaker__build_element_maker;
   if (PyType_Ready(&__pyx_type_4lxml_9objectify_ElementMaker) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -30817,11 +30833,6 @@ PyMODINIT_FUNC PyInit_objectify(void)
   #endif
   if (__Pyx_SetAttrString(__pyx_m, "ObjectifyElementClassLookup", (PyObject *)&__pyx_type_4lxml_9objectify_ObjectifyElementClassLookup) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1358; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_9objectify_ObjectifyElementClassLookup = &__pyx_type_4lxml_9objectify_ObjectifyElementClassLookup;
-  __pyx_type_4lxml_9objectify_NoneElement.tp_base = __pyx_ptype_4lxml_9objectify_ObjectifiedDataElement;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_NoneElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_9objectify_NoneElement.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "NoneElement", (PyObject *)&__pyx_type_4lxml_9objectify_NoneElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_9objectify_NoneElement = &__pyx_type_4lxml_9objectify_NoneElement;
   if (PyType_Ready(&__pyx_type_4lxml_9objectify_ObjectPath) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_type_4lxml_9objectify_ObjectPath.tp_print = 0;
   #if CYTHON_COMPILING_IN_CPYTHON
@@ -30836,11 +30847,6 @@ PyMODINIT_FUNC PyInit_objectify(void)
   #endif
   if (__Pyx_SetAttrString(__pyx_m, "ObjectPath", (PyObject *)&__pyx_type_4lxml_9objectify_ObjectPath) < 0) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 10; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_9objectify_ObjectPath = &__pyx_type_4lxml_9objectify_ObjectPath;
-  __pyx_type_4lxml_9objectify_StringElement.tp_base = __pyx_ptype_4lxml_9objectify_ObjectifiedDataElement;
-  if (PyType_Ready(&__pyx_type_4lxml_9objectify_StringElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_type_4lxml_9objectify_StringElement.tp_print = 0;
-  if (__Pyx_SetAttrString(__pyx_m, "StringElement", (PyObject *)&__pyx_type_4lxml_9objectify_StringElement) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_ptype_4lxml_9objectify_StringElement = &__pyx_type_4lxml_9objectify_StringElement;
   /*--- Type import code ---*/
   __pyx_ptype_4lxml_8includes_11etreepublic__Document = __Pyx_ImportType("lxml.etree", "_Document", sizeof(struct LxmlDocument), 0); if (unlikely(!__pyx_ptype_4lxml_8includes_11etreepublic__Document)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 30; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_ptype_4lxml_8includes_11etreepublic__Element = __Pyx_ImportType("lxml.etree", "_Element", sizeof(struct LxmlElement), 0); if (unlikely(!__pyx_ptype_4lxml_8includes_11etreepublic__Element)) {__pyx_filename = __pyx_f[2]; __pyx_lineno = 33; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -31048,7 +31054,7 @@ PyMODINIT_FUNC PyInit_objectify(void)
  */
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify_re, __pyx_n_s_compile); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_match); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 40; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -31101,7 +31107,7 @@ PyMODINIT_FUNC PyInit_objectify(void)
  */
   __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_set_pytype_attribute_tag); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -31360,7 +31366,7 @@ PyMODINIT_FUNC PyInit_objectify(void)
   __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_ObjectifiedElement)));
   PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_ObjectifiedElement)));
   __Pyx_GIVEREF(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_ObjectifiedElement)));
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1050; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_PyType)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1050; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_XGOTREF(((PyObject *)__pyx_v_4lxml_9objectify_TREE_PYTYPE));
@@ -31559,7 +31565,7 @@ PyMODINIT_FUNC PyInit_objectify(void)
   __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_remove_blank_text, Py_True) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_4 = PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -31577,14 +31583,14 @@ PyMODINIT_FUNC PyInit_objectify(void)
  */
   __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_9objectify___DEFAULT_PARSER, __pyx_n_s_set_element_class_lookup); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1738; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_ObjectifyElementClassLookup)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1738; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_ObjectifyElementClassLookup)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1738; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1738; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
-  __pyx_t_2 = PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1738; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1738; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -31750,7 +31756,7 @@ PyMODINIT_FUNC PyInit_objectify(void)
  * 
  * def Element(_tag, attrib=None, nsmap=None, *, _pytype=None, **_attributes):
  */
-  __pyx_t_2 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_ElementMaker)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_9objectify_ElementMaker)), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   if (PyDict_SetItem(__pyx_d, __pyx_n_s_E, __pyx_t_2) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -31814,7 +31820,7 @@ PyMODINIT_FUNC PyInit_objectify(void)
   PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[1]; __pyx_lineno = 84; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -31974,14 +31980,14 @@ static void __pyx_module_cleanup(CYTHON_UNUSED PyObject *self) {
   Py_CLEAR(__pyx_v_4lxml_9objectify_etree);
   __Pyx_CleanupGlobals();
   /*--- Type import cleanup code ---*/
-  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic__Document);
-  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic_ElementClassLookup);
-  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic_ElementBase);
-  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic__ElementTagMatcher);
   Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic_FallbackElementClassLookup);
+  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic__ElementTagMatcher);
   Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic__Element);
   Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic__ElementIterator);
+  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic_ElementClassLookup);
   Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic__ElementTree);
+  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic__Document);
+  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic_ElementBase);
   /*--- Builtin cleanup code ---*/
   Py_CLEAR(__pyx_builtin_ValueError);
   Py_CLEAR(__pyx_builtin_TypeError);
@@ -32211,6 +32217,29 @@ static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes(
     }
 }
 
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+    PyObject *result;
+    ternaryfunc call = func->ob_type->tp_call;
+    if (unlikely(!call))
+        return PyObject_Call(func, arg, kw);
+#if PY_VERSION_HEX >= 0x02060000
+    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
+        return NULL;
+#endif
+    result = (*call)(func, arg, kw);
+#if PY_VERSION_HEX >= 0x02060000
+    Py_LeaveRecursiveCall();
+#endif
+    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
+        PyErr_SetString(
+            PyExc_SystemError,
+            "NULL result without error in PyObject_Call");
+    }
+    return result;
+}
+#endif
+
 static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
     PyObject *result;
 #if CYTHON_COMPILING_IN_CPYTHON
@@ -33990,12 +34019,14 @@ static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_
 #endif /* PY_VERSION_HEX < 0x03030000 */
     } else
 #endif /* __PYX_DEFAULT_STRING_ENCODING_IS_ASCII  || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT */
+#if !CYTHON_COMPILING_IN_PYPY
 #if PY_VERSION_HEX >= 0x02060000
     if (PyByteArray_Check(o)) {
         *length = PyByteArray_GET_SIZE(o);
         return PyByteArray_AS_STRING(o);
     } else
 #endif
+#endif
     {
         char* result;
         int r = PyBytes_AsStringAndSize(o, &result, length);
index 0141134..f53cb7a 100644 (file)
@@ -1,5 +1,11 @@
 #ifndef PY_BIG_ENDIAN
+
+#ifdef _MSC_VER
+typedef unsigned __int32 uint32_t;
+#else
 #include <stdint.h>
+#endif
+
 static CYTHON_INLINE int _lx__is_big_endian(void) {
     union {uint32_t i; char c[4];} x = {0x01020304};
     return x.c[0] == 1;
index b92be2c..a1627c5 100644 (file)
@@ -134,6 +134,7 @@ cdef class _ParserDictionaryContext:
     cdef void initParserDict(self, xmlparser.xmlParserCtxt* pctxt):
         u"Assure we always use the same string dictionary."
         self.initThreadDictRef(&pctxt.dict)
+        pctxt.dictNames = 1
 
     cdef void initXPathParserDict(self, xpath.xmlXPathContext* pctxt):
         u"Assure we always use the same string dictionary."
@@ -702,7 +703,26 @@ cdef int _fixHtmlDictNames(tree.xmlDict* c_dict, xmlDoc* c_doc) nogil:
     if c_doc is NULL:
         return 0
     c_node = c_doc.children
-    tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 0)
+    tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
+    if c_node.type == tree.XML_ELEMENT_NODE:
+        if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
+            return -1
+    tree.END_FOR_EACH_ELEMENT_FROM(c_node)
+    return 0
+
+cdef int _fixHtmlDictSubtreeNames(tree.xmlDict* c_dict, xmlDoc* c_doc,
+                                  xmlNode* c_start_node) nogil:
+    """
+    Move names to the dict, iterating in document order, starting at
+    c_start_node. This is used in incremental parsing after each chunk.
+    """
+    cdef xmlNode* c_node
+    if not c_doc:
+        return 0
+    if not c_start_node:
+        return _fixHtmlDictNames(c_dict, c_doc)
+    c_node = c_start_node
+    tree.BEGIN_FOR_EACH_ELEMENT_FROM(<xmlNode*>c_doc, c_node, 1)
     if c_node.type == tree.XML_ELEMENT_NODE:
         if _fixHtmlDictNodeNames(c_dict, c_node) < 0:
             return -1
@@ -1181,9 +1201,29 @@ cdef class _FeedParser(_BaseParser):
         if not self._feed_parser_running:
             context.prepare()
             self._feed_parser_running = 1
-            __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
             c_filename = (_cstr(self._filename)
                           if self._filename is not None else NULL)
+
+            if c_encoding is NULL and py_buffer_len >= 2:
+                # libxml2 can't handle BOMs here, so let's try ourselves
+                if c_data[0] in b'\xfe\xef\xff':
+                    # likely a BOM, let's take a closer look
+                    c_encoding = _findEncodingName(
+                        <const_xmlChar*>c_data,
+                        4 if py_buffer_len > 4 else <int>py_buffer_len)
+                    if c_encoding is not NULL:
+                        # found it => skip over BOM (if there is one)
+                        if (c_data[0] == b'\xef' and
+                                c_data[1] == b'\xbb' and
+                                c_data[2] == b'\xbf'):
+                            c_data += 3  # UTF-8 BOM
+                            py_buffer_len -= 3
+                        elif (c_data[0] == b'\xfe' and c_data[1] == b'\xff' or
+                                c_data[0] == b'\xff' and c_data[1] == b'\xfe'):
+                            # UTF-16 BE/LE
+                            c_data += 2
+                            py_buffer_len -= 2
+
             if self._for_html:
                 error = _htmlCtxtResetPush(
                     pctxt, NULL, 0, c_filename, c_encoding,
@@ -1192,9 +1232,13 @@ cdef class _FeedParser(_BaseParser):
                 xmlparser.xmlCtxtUseOptions(pctxt, self._parse_options)
                 error = xmlparser.xmlCtxtResetPush(
                     pctxt, NULL, 0, c_filename, c_encoding)
+            if error:
+                raise MemoryError()
+            __GLOBAL_PARSER_CONTEXT.initParserDict(pctxt)
 
         #print pctxt.charset, 'NONE' if c_encoding is NULL else c_encoding
 
+        fixup_error = 0
         while py_buffer_len > 0 and (error == 0 or recover):
             with nogil:
                 if py_buffer_len > limits.INT_MAX:
@@ -1202,12 +1246,24 @@ cdef class _FeedParser(_BaseParser):
                 else:
                     buffer_len = <int>py_buffer_len
                 if self._for_html:
+                    c_node = pctxt.node  # last node where the parser stopped
                     error = htmlparser.htmlParseChunk(pctxt, c_data, buffer_len, 0)
+                    # and now for the fun part: move node names to the dict
+                    if pctxt.myDoc:
+                        fixup_error = _fixHtmlDictSubtreeNames(
+                            pctxt.dict, pctxt.myDoc, c_node)
+                        if pctxt.myDoc.dict and pctxt.myDoc.dict is not pctxt.dict:
+                            xmlparser.xmlDictFree(pctxt.myDoc.dict)
+                            pctxt.myDoc.dict = pctxt.dict
+                            xmlparser.xmlDictReference(pctxt.dict)
                 else:
                     error = xmlparser.xmlParseChunk(pctxt, c_data, buffer_len, 0)
                 py_buffer_len -= buffer_len
                 c_data += buffer_len
 
+            if fixup_error and not context.has_raised():
+                context.store_exception(MemoryError())
+
             if error and not pctxt.replaceEntities and not pctxt.validate:
                 # in this mode, we ignore errors about undefined entities
                 for entry in context._error_log.filter_from_errors():
@@ -1217,7 +1273,7 @@ cdef class _FeedParser(_BaseParser):
                 else:
                     error = 0
 
-        if not recover and (error or not pctxt.wellFormed):
+        if fixup_error or not recover and (error or not pctxt.wellFormed):
             self._feed_parser_running = 0
             try:
                 context._handleParseResult(self, pctxt.myDoc, None)
index 39ff06f..52909f6 100644 (file)
@@ -34,9 +34,9 @@ cdef bint _isProxyAliveInPypy(xmlNode* c_node):
     retval = True
     if python.PyWeakref_LockObject(<python.PyObject*>c_node._private) is None:
         # proxy has already died => remove weak reference
-        obj_ptr = <python.PyObject*>c_node._private
+        weakref_ptr = <python.PyObject*>c_node._private
         c_node._private = NULL
-        python.Py_XDECREF(obj_ptr)
+        python.Py_XDECREF(weakref_ptr)
         retval = False
     return retval
 
@@ -50,8 +50,6 @@ cdef inline int _registerProxy(_Element proxy, _Document doc,
     proxy._c_node = c_node
     if python.IS_PYPY:
         c_node._private = <void*>python.PyWeakref_NewRef(proxy, NULL)
-        if c_node._private is NULL:
-            return -1 # manual exception propagation
     else:
         c_node._private = <void*>proxy
     return 0
@@ -59,12 +57,11 @@ cdef inline int _registerProxy(_Element proxy, _Document doc,
 cdef inline int _unregisterProxy(_Element proxy) except -1:
     u"""Unregister a proxy for the node it's proxying for.
     """
-    cdef xmlNode* c_node
-    c_node = proxy._c_node
+    cdef xmlNode* c_node = proxy._c_node
     if python.IS_PYPY:
-        obj_ptr = <python.PyObject*>c_node._private
+        weakref_ptr = <python.PyObject*>c_node._private
         c_node._private = NULL
-        python.Py_XDECREF(obj_ptr)
+        python.Py_XDECREF(weakref_ptr)
     else:
         assert c_node._private is <void*>proxy, u"Tried to unregister unknown proxy"
         c_node._private = NULL
index 0641794..1d07086 100644 (file)
@@ -81,7 +81,7 @@ cdef extern from "Python.h":
     cdef object PyObject_RichCompare(object o1, object o2, int op)
     cdef int PyObject_RichCompareBool(object o1, object o2, int op)
 
-    PyObject* PyWeakref_NewRef(object ob, PyObject* callback) # used for PyPy only
+    PyObject* PyWeakref_NewRef(object ob, PyObject* callback) except NULL  # used for PyPy only
     object PyWeakref_LockObject(PyObject* ob) # PyPy only
 
     cdef void* PyMem_Malloc(size_t size)
index 01858f7..4f60c0b 100644 (file)
@@ -347,9 +347,8 @@ class HtmlParserTestCase(HelperTestCase):
         root = iterator.root
         self.assertTrue(root is not None)
         self.assertEqual(249, len(events))
-        self.assertEqual(
-            [],
-            [ event for (event, element) in events if event != 'end' ])
+        self.assertFalse(
+            [event for (event, element) in events if event != 'end'])
 
     def test_html_iterparse_start(self):
         iterparse = self.etree.iterparse
@@ -361,12 +360,57 @@ class HtmlParserTestCase(HelperTestCase):
 
         events = list(iterator)
         root = iterator.root
-        self.assertTrue(root is not None)
+        self.assertNotEqual(None, root)
         self.assertEqual(
             [('start', root), ('start', root[0]), ('start', root[0][0]),
                 ('start', root[1]), ('start', root[1][0])],
             events)
 
+    def test_html_feed_parser(self):
+        parser = self.etree.HTMLParser()
+        parser.feed("<html><body></")
+        parser.feed("body></html>")
+        root = parser.close()
+
+        self.assertEqual('html', root.tag)
+        # test that we find all names in the parser dict
+        self.assertEqual([root], list(root.iter('html')))
+        self.assertEqual([root[0]], list(root.iter('body')))
+
+    def test_html_feed_parser_chunky(self):
+        parser = self.etree.HTMLParser()
+        parser.feed("<htm")
+        parser.feed("l><body")
+        parser.feed("><")
+        parser.feed("p><")
+        parser.feed("strong")
+        parser.feed(">some ")
+        parser.feed("text</strong></p><")
+        parser.feed("/body></html>")
+        root = parser.close()
+
+        self.assertEqual('html', root.tag)
+        # test that we find all names in the parser dict
+        self.assertEqual([root], list(root.iter('html')))
+        self.assertEqual([root[0]], list(root.iter('body')))
+        self.assertEqual([root[0][0]], list(root.iter('p')))
+        self.assertEqual([root[0][0][0]], list(root.iter('strong')))
+
+    def test_html_feed_parser_more_tags(self):
+        parser = self.etree.HTMLParser()
+        parser.feed('<html><head>')
+        parser.feed('<title>TITLE</title><body><p>P</p></body><')
+        parser.feed("/html>")
+        root = parser.close()
+
+        self.assertEqual('html', root.tag)
+        # test that we find all names in the parser dict
+        self.assertEqual([root], list(root.iter('html')))
+        self.assertEqual([root[0]], list(root.iter('head')))
+        self.assertEqual([root[0][0]], list(root.iter('title')))
+        self.assertEqual([root[1]], list(root.iter('body')))
+        self.assertEqual([root[1][0]], list(root.iter('p')))
+
     def test_html_parser_target_tag(self):
         assertFalse  = self.assertFalse
         events = []
index 5c68621..a5ed767 100644 (file)
@@ -268,7 +268,61 @@ class _IOTestCaseBase(HelperTestCase):
         finally:
             os.rmdir(dn)
 
-    
+    def test_parse_utf8_bom(self):
+        utext = _str('Søk på nettet')
+        uxml = '<?xml version="1.0" encoding="UTF-8"?><p>%s</p>' % utext
+        bom = _bytes('\\xEF\\xBB\\xBF').decode(
+            "unicode_escape").encode("latin1")
+        self.assertEqual(3, len(bom))
+        f = tempfile.NamedTemporaryFile()
+        try:
+            f.write(bom)
+            f.write(uxml.encode("utf-8"))
+            f.flush()
+            tree = self.etree.parse(f.name)
+        finally:
+            f.close()
+        self.assertEqual(utext, tree.getroot().text)
+
+    def test_iterparse_utf8_bom(self):
+        utext = _str('Søk på nettet')
+        uxml = '<?xml version="1.0" encoding="UTF-8"?><p>%s</p>' % utext
+        bom = _bytes('\\xEF\\xBB\\xBF').decode(
+            "unicode_escape").encode("latin1")
+        self.assertEqual(3, len(bom))
+        f = tempfile.NamedTemporaryFile()
+        try:
+            f.write(bom)
+            f.write(uxml.encode("utf-8"))
+            f.flush()
+            elements = [el for _, el in self.etree.iterparse(f.name)]
+            self.assertEqual(1, len(elements))
+            root = elements[0]
+        finally:
+            f.close()
+        self.assertEqual(utext, root.text)
+
+    def test_iterparse_utf16_bom(self):
+        utext = _str('Søk på nettet')
+        uxml = '<?xml version="1.0" encoding="UTF-16"?><p>%s</p>' % utext
+        boms = _bytes('\\xFE\\xFF \\xFF\\xFE').decode(
+            "unicode_escape").encode("latin1")
+        self.assertEqual(5, len(boms))
+        xml = uxml.encode("utf-16")
+        self.assertTrue(xml[:2] in boms, repr(xml[:2]))
+
+        f = tempfile.NamedTemporaryFile()
+        try:
+            f.write(xml)
+            f.flush()
+            elements = [el for _, el in self.etree.iterparse(f.name)]
+            self.assertEqual(1, len(elements))
+            root = elements[0]
+        finally:
+            f.close()
+        self.assertEqual(utext, root.text)
+
+
 class ETreeIOTestCase(_IOTestCaseBase):
     etree = etree
 
index 15a2799..bea438e 100644 (file)
@@ -1 +1 @@
-3.3.0
+3.3.1