Imported Upstream version 3.2.5
authorHyunjee Kim <hj0426.kim@samsung.com>
Thu, 31 Jan 2019 01:35:56 +0000 (10:35 +0900)
committerHyunjee Kim <hj0426.kim@samsung.com>
Thu, 31 Jan 2019 01:38:11 +0000 (10:38 +0900)
Change-Id: Iabb2eb338b90049634e39144aee55158363f679a
Signed-off-by: Hyunjee Kim <hj0426.kim@samsung.com>
414 files changed:
CHANGES.txt
PKG-INFO
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.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.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.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_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._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.2.4.html [deleted file]
doc/html/changes-3.2.5.html [new file with mode: 0644]
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/pdf/pubkey.asc [new file with mode: 0644]
src/lxml.egg-info/PKG-INFO
src/lxml.egg-info/SOURCES.txt
src/lxml/apihelpers.pxi
src/lxml/includes/lxml-version.h
src/lxml/lxml.etree.c
src/lxml/lxml.objectify.c
src/lxml/saxparser.pxi
src/lxml/serializer.pxi
src/lxml/tests/test_incremental_xmlfile.py
version.txt

index 6f6a6f002b99c6ea69c7d35a94322f9095dc43a3..234cbb71442ba880b1fd58afd024a56dd8929273 100644 (file)
@@ -2,6 +2,26 @@
 lxml changelog
 ==============
 
+3.2.5 (2014-01-02)
+==================
+
+Features added
+--------------
+
+Bugs fixed
+----------
+
+* Crash in xmlfile() when closing open elements out of order in an error case.
+
+* Crash in target parsing with attributes.
+
+* LP#1255132: crash when trying to run validation over non-Element (e.g.
+  comment or PI).
+
+Other changes
+-------------
+
+
 3.2.4 (2013-11-07)
 ==================
 
index fd88f4e3bb7db07027b76b5c7ef0a19e3fde3c41..2dc00cd67c27c17942e1926f7d3249e95869adf4 100644 (file)
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: lxml
-Version: 3.2.4
+Version: 3.2.5
 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.2.4.tar.gz
+Download-URL: http://pypi.python.org/packages/source/l/lxml/lxml-3.2.5.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.2.4 (2013-11-07)
+        3.2.5 (2014-01-02)
         ==================
         
         Features added
@@ -46,16 +46,12 @@ Description: lxml is a Pythonic, mature binding for the libxml2 and libxslt libr
         Bugs fixed
         ----------
         
-        * Memory leak when creating an XPath evaluator in a thread.
+        * Crash in xmlfile() when closing open elements out of order in an error case.
         
-        * LP#1228881: ``repr(XSLTAccessControl)`` failed in Python 3.
+        * Crash in target parsing with attributes.
         
-        * Raise ``ValueError`` when trying to append an Element to itself or
-          to one of its own descendants.
-        
-        * LP#1206077: htmldiff discarded whitespace from the output.
-        
-        * Compressed plain-text serialisation to file-like objects was broken.
+        * LP#1255132: crash when trying to run validation over non-Element (e.g.
+          comment or PI).
         
         Other changes
         -------------
index f3ef90b4516a89e509583a3177bbf23b689f9b6d..6707b3fc6ffc4604506e147d6591aabd63dbb931 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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>
@@ -915,7 +915,7 @@ map it to your namespace.  See also the question above.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index 459f39208918bbfae4c505fb5257fa26e0935377..5c0b4a907d049f794e84d82b5ee24bb0e3c42935 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index 99af9d6caf6e2643b18146b85abceb39585bd132..ec607b29430037e71c83bbfd41d081724268f161 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 080248277fdbba905f7e4b8c011e4b360b76217e..bbfd7fb0e29735e38824db73160ba692dce413bc 100644 (file)
@@ -6032,6 +6032,7 @@ lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_element_nested_wit
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_encoding lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_encoding
 lxml.tests.test_incremental_xmlfile.BytesIOXmlFileTestCase.setUp       lxml.tests.test_incremental_xmlfile.BytesIOXmlFileTestCase-class.html#setUp
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_element_write_text       lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element_write_text
+lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_closing_out_of_order_in_error_case       lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_closing_out_of_order_in_error_case
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._read_file    lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#_read_file
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_attribute        lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_attribute
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_failure_trailing_Element lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_failure_trailing_Element
@@ -6063,6 +6064,7 @@ lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_element_nested_wit
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_encoding lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_encoding
 lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase.setUp        lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html#setUp
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_element_write_text       lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element_write_text
+lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_closing_out_of_order_in_error_case       lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_closing_out_of_order_in_error_case
 lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase._read_file   lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html#_read_file
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_attribute        lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_attribute
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_failure_trailing_Element lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_failure_trailing_Element
@@ -6097,6 +6099,7 @@ lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_element_nested_wit
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_encoding lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_encoding
 lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase.setUp  lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase-class.html#setUp
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_element_write_text       lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element_write_text
+lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_closing_out_of_order_in_error_case       lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_closing_out_of_order_in_error_case
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._read_file    lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#_read_file
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_attribute        lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_attribute
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_failure_trailing_Element lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_failure_trailing_Element
@@ -6127,6 +6130,7 @@ lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_write_Element_repe
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_element_nested_with_text lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element_nested_with_text
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_encoding lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_encoding
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_element_write_text       lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element_write_text
+lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_closing_out_of_order_in_error_case       lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_closing_out_of_order_in_error_case
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._read_file    lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#_read_file
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_attribute        lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_attribute
 lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase.test_failure_trailing_Element lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_failure_trailing_Element
index 4efcf8c7552e2067f14ba0d958231d50e25b4228..807c66c78c9049ce4fc417b6a38807648f394cb9 100644 (file)
@@ -473,12 +473,12 @@ Element class lookup method that uses the objectify classes.</em>
 Iterates over an element and its sub-elements in document order (depth
 first pre-order).</em>
     </li>
-    <li> <strong class="uidlink"><a href="lxml.builder.ElementMaker-class.html">lxml.builder.ElementMaker</a></strong>:
-      <em class="summary">Element generator factory.</em>
-    </li>
     <li> <strong class="uidlink"><a href="lxml.objectify.ElementMaker-class.html">lxml.objectify.ElementMaker</a></strong>:
       <em class="summary">ElementMaker(self, namespace=None, nsmap=None, annotate=True, makeelement=None)</em>
     </li>
+    <li> <strong class="uidlink"><a href="lxml.builder.ElementMaker-class.html">lxml.builder.ElementMaker</a></strong>:
+      <em class="summary">Element generator factory.</em>
+    </li>
     <li> <strong class="uidlink"><a href="lxml.etree.ElementTextIterator-class.html" onclick="show_private();">lxml.etree.ElementTextIterator</a></strong>:
       <em class="summary">ElementTextIterator(self, element, tag=None, with_tail=True)
 Iterates over the text content of a subtree.</em>
@@ -602,12 +602,12 @@ Immutable object that represents a compiled object path.</em>
     <li> <strong class="uidlink"><a href="lxml.objectify.PyType-class.html">lxml.objectify.PyType</a></strong>:
       <em class="summary">PyType(self, name, type_check, type_class, stringify=None)
 User defined type.</em>
-    </li>
-    <li> <strong class="uidlink"><a href="xml.etree.ElementTree.QName-class.html">xml.etree.ElementTree.QName</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="lxml.etree.QName-class.html">lxml.etree.QName</a></strong>:
       <em class="summary">QName(text_or_uri_or_element, tag=None)</em>
     </li>
+    <li> <strong class="uidlink"><a href="xml.etree.ElementTree.QName-class.html">xml.etree.ElementTree.QName</a></strong>
+    </li>
     <li> <strong class="uidlink"><a href="lxml.etree.RelaxNGErrorTypes-class.html">lxml.etree.RelaxNGErrorTypes</a></strong>:
       <em class="summary">Libxml2 RelaxNG error types</em>
     </li>
@@ -1030,13 +1030,13 @@ A DTD validator.</em>
       <em class="summary">RelaxNG(self, etree=None, file=None)
 Turn a document into a Relax NG validator.</em>
     </li>
-    <li> <strong class="uidlink"><a href="lxml.isoschematron.Schematron-class.html">lxml.isoschematron.Schematron</a></strong>:
-      <em class="summary">An ISO Schematron validator.</em>
-    </li>
     <li> <strong class="uidlink"><a href="lxml.etree.Schematron-class.html">lxml.etree.Schematron</a></strong>:
       <em class="summary">Schematron(self, etree=None, file=None)
 A Schematron validator.</em>
     </li>
+    <li> <strong class="uidlink"><a href="lxml.isoschematron.Schematron-class.html">lxml.isoschematron.Schematron</a></strong>:
+      <em class="summary">An ISO Schematron validator.</em>
+    </li>
     <li> <strong class="uidlink"><a href="lxml.etree.XMLSchema-class.html">lxml.etree.XMLSchema</a></strong>:
       <em class="summary">XMLSchema(self, etree=None, file=None)
 Turn a document into an XML Schema validator.</em>
@@ -1214,7 +1214,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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1a9c0d5e065b13370eca0399867eea5e2473e825..05fcacceedf6dc2f06904516991f12a53e7dca5d 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 63b876a4972a1a70238f848d292503ce60336367..697019fa39c34dfa381502c568a6eca7eb51c35b 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1424df023dd1f66b548b34ffa874b656c406f536..e9fbfba65fed48ed40f6f2857d5c41b46575ba77 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8ca6cd899cb7ddc07ab014b55f40ada60bec9696..d88afb29a257f8a9f8dfe36e6df193e922f1a6af 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3c61e8f75a52c0baa6386366675b192c5c253310..191e9358560b08891ab6890afb5abacedd662a26 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index aa62eaac00e7bae1ecdffa43fb23903b106c1229..5b2cf8a4ee84baaf35a47747dfb25b902f3667e8 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1aad1de3d7657f2cb4b19d28bfe94334af2dbf90..8fb49c546c93caf860838623a7773db960d5c916 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 06339e31baf180f73e7e61b4bf2d0496e11f089a..a6d6dc4b55d82de2eca3ff36639baa77adc07510 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c5594732afb684d97aab2b1853cf1c3f3721199a..835317b5cab90306fbdb63568ab0e0829c9560f0 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b52aba1bee78214e30778602041c4bb3d9fab8fb..9283ffbf2fbefb34c820e0035c6cf13c0052da05 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 82da26fbd93487145e90d460f829e89f5b2f0381..bddf9daf6c5c9880b79bf4d557f788c90c409f65 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 64ddddf4d9b8c2ffdc15b94c69764b1fae681dbb..f855e96b521c3ca0c00b0aceb6b76c77f192eb69 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ee03e03734eb77d4a466a62609b02fd28d559d50..c5d2952f43e99e8fd97d57c93ccbd049f9ee7ccd 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 16d84b2e8ae85c350f7fd5011d8e7f19d72d7b6b..dec6f02637ae1616e6ae5f3657f6dd4052ba9ccd 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d1fee7c64a5ad2e23a7c915d48f320aca20d3df9..8f2dcd7edb36e002837f5326662f34468646d599 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9ef4cc8c92bb96d30d38fbc70c1d06f090433425..8f7f840e7e2a5fe2d381ea4ab54f17e5d3e1f484 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b025dd53ece0b0cdbc27c97034a0759fb1351fc9..4874a7fc54915141ba992e341de3401f6c235ba3 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 32dbae2660c1ec2802003e6bc5b4fa4e5343f73b..238c4d857d9a7b5503e9d718a7ac7f3e7655a7c6 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 86425374890af9e4dcbd40e2d1a9c5e2a5b948ae..ef9f2a259b16dd895cb25609c401c42dcecad1f5 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8a445373cdbb95235a103f2c84adc27e08afda6f..5457e76dab4a3480c183b88fdc6b664389a1a36f 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f3c7470269a670cd2eb190fef71f2718c67b7ad2..a89ec8d50c4630ef17f5f6829a0199628a029881 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0c7b81b5da364e508d5eab0e8b1639644e62cc7c..9fba09831de552b392258dcd4a246b485302a2dd 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6483714d202eacb78cab633f3322051eb9a2dfa4..1e94db454496f6bffba1fd9d1e1cd0bdf5d336b3 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f0c3ebf440c0f7cc7ccec9bc364a224400744aec..6ac5b8779d33a36f2d6ea506bb5e2fec3c4c5e36 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1a14ed6abc85d12e373a5b0c33ce457c57d2c66d..2b813806b7d22834f60274ad4f6a4267f5f6fd46 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6ed08dacb5422fc3437dcdce92bbfffe1a3afde6..7a19cc6073cab56f9e2273dcf718306dc4d6197c 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 32abb8736e05bec7db9736aa5db614531f2cbc56..2f528c3448906f649af886bb1023c0838b221f81 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 />
+<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>
+</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_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.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.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 />
 <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 />
 <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.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 />
 <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.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.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 />
 <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.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.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 />
 <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_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._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="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_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#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_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_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.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.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 />
 <span class="index-where">(in&nbsp;<a href="lxml.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_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.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_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_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.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.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_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>
 </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.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 />
 <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_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>
 </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.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 />
 <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">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.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="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_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="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.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_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.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.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_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.html.builder-module.html#TBODY">TBODY</a><br />
+<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 />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">ObjectifyTestCase</a>)</span></td>
 <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.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.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 />
 <span class="index-where">(in&nbsp;<a href="lxml.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>
 </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_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_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.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_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_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_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_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_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_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_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_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_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_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 />
 <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_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_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_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_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_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_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_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_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.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 />
 <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.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_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 />
 <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>
 </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_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 />
 <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 />
 <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_addattr">test_addattr()</a><br />
+<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 />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
 <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_element">test_addattr_element()</a><br />
+<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 />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">HtmlParserTestCase</a>)</span></td>
 <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_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 />
 <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 />
 <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 />
+<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_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>
 <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 />
+<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_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>
 <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 />
+<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_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>
 <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 />
+<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_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>
 <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 />
+<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_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>
 <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_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_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>
 <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_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>
 <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_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>
 <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_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_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>
 <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_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_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>
 <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_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_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>
 <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_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-module.html">test_htmlparser</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 <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_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_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_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_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_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_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_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_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>
 <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_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_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_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_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">test_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_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>
 <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_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_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>
 <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_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_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>
 <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_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_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>
 <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_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_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>
 <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_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_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>
 <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_ns_clear">test_attrib_ns_clear()</a><br />
+<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_io-module.html">test_io</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 <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_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_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>
 <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_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_isoschematron-module.html">test_isoschematron</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests-module.html">lxml.tests</a>)</span></td>
 <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_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_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>
 <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_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_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>
 <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_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_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>
 <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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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>
 <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_etree.ETreeOnlyTestCase-class.html#test_attribute_gets_namespace_prefix_on_merge_with_nons">test_attribute_gets_namespace_prefix_on_merge_with_nons()</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_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>
 <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_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_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_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_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_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_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_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>
 <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_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_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_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>
 <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_items_ns">test_attribute_items_ns()</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_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>
 <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_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_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_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_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_etree.ETreeOnlyTestCase-class.html#test_attribute_keeps_namespace_prefix_on_merge">test_attribute_keeps_namespace_prefix_on_merge()</a><br />
+<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_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>
 <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_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_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_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_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_keys">test_attribute_keys()</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_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>
 <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_keys2">test_attribute_keys2()</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_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>
 <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_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_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_iterdescendants">test_iterdescendants()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <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_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">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_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>
 <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_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_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_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>
 <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_namespace_roundtrip_replaced">test_attribute_namespace_roundtrip_replaced()</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_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>
 <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_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_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_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_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_etree.ETreeOnlyTestCase-class.html#test_attribute_set">test_attribute_set()</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_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>
 <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_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_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_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_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_str">test_attribute_str()</a><br />
+<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_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>
 <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_attrib">test_attribute_update_attrib()</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_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>
 <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_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_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_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>
 <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_iter">test_attribute_update_iter()</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_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>
 <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 />
+<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_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>
 <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 />
-<span class="index-where">(in&nbsp;<a href="lxml.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_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_dtd.ETreeDtdTestCase-class.html#test_iterparse_file_dtd">test_iterparse_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_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_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_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_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_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_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_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_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>
 <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 />
+<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_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>
 <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 />
-<span class="index-where">(in&nbsp;<a href="lxml.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.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_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_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_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_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_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">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_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_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_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_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_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_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_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_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_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.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_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>
 <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_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_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">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_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>
 <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_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>
 <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_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_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>
 <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_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_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>
 <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_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_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>
 <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_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_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>
 <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_gzip">test_c14n_gzip()</a><br />
+<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_itersiblings">test_itersiblings()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <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_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_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>
 <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_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_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>
 <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.ETreeC14NTestCase-class.html#test_c14n_tostring_with_comments">test_c14n_tostring_with_comments()</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_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>
 <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_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_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_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_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_c_api">test_c_api()</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_iterwalk">test_iterwalk()</a><br />
 <span class="index-where">(in&nbsp;<a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">ETreeOnlyTestCase</a>)</span></td>
 <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">test_cdata()</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_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>
 <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_errors">test_cdata_errors()</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_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>
 <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_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_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>
 <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_cdata_type">test_cdata_type()</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_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>
 <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_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_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_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_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_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">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_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>
 <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">test_child()</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_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>
 <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">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_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>
 <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_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_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>
 <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">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_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>
 <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_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_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>
 <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_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_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>
 <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_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_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>
 <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_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_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>
 <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 />
+<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_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>
 <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 />
+<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_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>
 <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 />
+<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_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>
 <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_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_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_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.ClassLookupTestCase-class.html#test_class_lookup_reentry">test_class_lookup_reentry()</a><br />
+<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_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>
 <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_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_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_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_io._IOTestCaseBase-class.html#test_class_parse_filename">test_class_parse_filename()</a><br />
+<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_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>
 <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_io._IOTestCaseBase-class.html#test_class_parse_filename_remove_previous">test_class_parse_filename_remove_previous()</a><br />
+<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_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>
 <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_io._IOTestCaseBase-class.html#test_class_parse_fileobject">test_class_parse_fileobject()</a><br />
+<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_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>
 <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_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_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_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_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_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_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_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_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_elementtree._ETreeTestCaseBase-class.html#test_clear">test_clear()</a><br />
+<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_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>
 <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_clear_sub">test_clear_sub()</a><br />
+<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_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>
 <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_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_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_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_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>
 <td width="33%" class="link-index">&nbsp;</td>
 </tr>
-<tr>
-<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_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">&nbsp;</td>
-</tr>
 </table>
 </td></tr>
 </table>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 91071390c890549baa985bb9c8fcae890f509f90..72e30cf0c3677389e79959002672d4fb6d6abdb1 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f32440ec3bdf2ebcfb33585f8e65a0bc5099d0e9..9667150721021575b53d265b63b9a1036f1808db 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d59ea1678963acc92aaa6353926d2417a81c6e5a..683d17ca6632f21e2700c456f3093b9a723f0d2d 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5362bbbbd43b34fc9a99ca87624555de12cc65d0..0eb5687c64b3bac62c2d59ccc4bf4d8905803c30 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3f8250b29e4967b7842c6c10e4cc35559d9aa376..c00fd6d80d79ac24dfa2044448e62afdf13e495a 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b50cf1d8acfbaa5ca2a04d64090baa8f0c443cdf..6cfd69c2c075085b6f604b651f88e620e0d1fa79 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 339d29162217235e5ff09eee0f63820d578f95bf..254601fe66a69e898111e9a7a9c080b015a2e127 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index fda0ae613b784482765e74bd8e047469254c2d77..ea165199c9c7b88a0586a2071b72f22b5ea88cfb 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1ede17618ec6d3f069c12bbacaac2fd0694a6d59..c2a11979d1b52269a217cdfe9d91d20e378452de 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3d867f53a6d02f47eff68d350915441ffc66546a..00e7f29734ba41e8249e3894555109cf3d5f6782 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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 343bdb2d081cceb7db4a93e409545eedc6570173..00bbfec72b5defdd7cdafb0579ecdbcd47839cd0 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ca3fd38f567200cef90e618f7c8fc5bed86f67ab..cd51d444a6e31b5d6364b7dc6e32e55b9c8b7ad4 100644 (file)
@@ -517,7 +517,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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 83fc80f01ba44e28c8780de934fdbc134142b0d2..c593cd55eb9997c7983babcb64b605ce5953d3df 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4b2a15221f5d749ebfae027ee74125a6c7d8c740..33ee9d47a600110ab38fa2a4ef3fac12f0676cb9 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d351a0bd86a31cc645501e5fb7e98b2cd62d1966..f55d348b0e74f10791df4dfa09b0e06868c44ab3 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 Thu Nov  7 17:44:11 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 56d6b7d4cdc25d05904b7f7a1e48eb21bbbb329f..cbbc89da5f5b17829a80c96b6c93f483ca8a7664 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1b1aa34a33bc6f1f77516a474c1d817598ba8518..d38596938eb7e303be96c79b97d7345d36d3ad4c 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3bea072d65470f536fd0c527196bee35341af6b1..7b8979ce78a6c99335efd9278ccb404574693e08 100644 (file)
@@ -293,7 +293,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 Thu Nov  7 17:44:11 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 05317f857cb44d2c297b40f7b1747c6d7c6bb90b..7194a3418df2e03b3ed83697bd93bfa78c724472 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e9957bea282dbd37701bf2d2d072a95767cd43d1..5ee4481772c0c7b9b53b4e610190abb1572f6226 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 797b91d802e4cd41c57b153ffcb141e25d0ba22b..9c8c9a1c4c9d60351e487a90b5912cf6e92ef77a 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d35adb3d1cf7dd29976a55119e8d2d44446bbc12..5224730ed260519bc840633b9476ee30dd532855 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a38655c58f532e100733959c275e5fd1c2ee78a2..aa50cd411e12ac73e389beef29894a7f98f7a582 100644 (file)
@@ -1092,7 +1092,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0c1679d0f7a627456da15e19ac950849a1ec3223..4ba2a1d6f0c269524c899807084095aefa32d340 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 45b4b2700f2151924f54965b1f3a11ad73c7a64f..2da214b09e88eb69895bf6c52cc174d06d8ae9b4 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 075e1968bda7bd933de6262b3f3ce60bae02fecb..a9b0fee9f75b037cfe1f94ca1f82e69598c75c7c 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ea143c355f8f50b28012488912aa2c2b714bbd86..6c7fcc2656e693ae6471e22c2d0e7472601571ff 100644 (file)
@@ -1696,13 +1696,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 0x1a20c90&gt;,
+mlElement *)&quot; at 0x322ae10&gt;,
  'attributeValue': &lt;capsule object &quot;PyObject *(xmlNode *, xmlAttr *)&quot; \
-at 0x1a20960&gt;,
+at 0x322aae0&gt;,
  'attributeValueFromNsName': &lt;capsule object &quot;PyObject *(xmlNode *, co\
-nst xmlChar *, const xmlChar *)&quot; at 0x1a20990&gt;,
+nst xmlChar *, const xmlChar *)&quot; at 0x322ab10&gt;,
  'callLookupFallback': &lt;capsule object &quot;PyObject *(struct LxmlFallback\
-ElementClassLookup *, struct LxmlDocument *, xmlNode *)&quot; at 0x1a20630&gt;\
+ElementClassLookup *, struct LxmlDocument *, xmlNode *)&quot; at 0x322a7b0&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>
@@ -1725,7 +1725,7 @@ ElementClassLookup *, struct LxmlDocument *, xmlNode *)&quot; at 0x1a20630&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 0x2acb0bc828e0&gt;">&lt;lxml.etree._MemDebug object at 0x2acb0bc828e0&gt;</code>
+        <a name="memory_debugger"></a><span class="summary-name">memory_debugger</span> = <code title="&lt;lxml.etree._MemDebug object at 0x2ab4f1a098e0&gt;">&lt;lxml.etree._MemDebug object at 0x2ab4f1a098e0&gt;</code>
     </td>
   </tr>
 </table>
@@ -2377,13 +2377,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 0x1a20c90&gt;<code class="variable-op">,</code>
+mlElement *)&quot; at 0x322ae10&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 0x1a20960&gt;<code class="variable-op">,</code>
+at 0x322aae0&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 0x1a20990&gt;<code class="variable-op">,</code>
+nst xmlChar *, const xmlChar *)&quot; at 0x322ab10&gt;<code class="variable-op">,</code>
  <code class="variable-quote">'</code><code class="variable-string">callLookupFallback</code><code class="variable-quote">'</code><code class="variable-op">: </code>&lt;capsule object &quot;PyObject *(struct LxmlFallback<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
-ElementClassLookup *, struct LxmlDocument *, xmlNode *)&quot; at 0x1a20630&gt;<code class="variable-op"></code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+ElementClassLookup *, struct LxmlDocument *, xmlNode *)&quot; at 0x322a7b0&gt;<code class="variable-op"></code><span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
 <code class="variable-ellipsis">...</code>
 </pre></td></tr></table>
 </dd>
@@ -2448,7 +2448,7 @@ ElementClassLookup *, struct LxmlDocument *, xmlNode *)&quot; at 0x1a20630&gt;<c
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 98b49a95fc9b9c33ddddb1e4577c969b6788718a..78a3e7ffbeb9a365b2797bcd95ffff8f0f4cf1c4 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1bff0792cb1c10b630f21fb94d8026db1e1f265c..8703c7b6e63f67bac31ccff772abc0acadf7dccf 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e4ff1efec55609405719fd419e661deb1358d122..c5f8e7929d023a99f302251534bb745d5845644c 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 86ac62813bb200ef298531703b9839a871140081..bfb5199efdeb6539d80f4743b587c42fa2019e51 100644 (file)
@@ -232,7 +232,7 @@ can be used to set Element text.  The usual way to use it is:</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index fb6aec64411dedc4693fa7134f7a52c88d3a7d83..62987b80edf9a64e95ddd96ad6cbff65355c5bbb 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3a7ad5dbb9c8cf1151a253b9cf6ebf6f87b2dfa1..a257819b0dc278ba0e99bbcffe41dcdabaf4f93d 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1f2024ccee5d63a9660fec937f66c978dceef4e4..8e6e861fbc893a5ead6d0f580d5cd02437845209 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 00de6b500ee024c7ffb7033ca8978f7a44be7a86..200ac04068ab6809359e59ab41fd110058efba0e 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5be2a569adc95e5797531594c2d81f6f3ea78a33..f9835dcd35f17c73ab9de9bf0febc22938873a4c 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8f99254472afe44050db6c6d47142ce2206a42f5..a41f852a04761a75259e72c201a30c65b74345c5 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a58b3da4e556a996ecfca640a316ec2c55cf12ae..59a2596d2498d5e2e31536f1ba7276b1ab6905d9 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 35cf49aacc5313e9c763f19f3d8c5d3dc6c8139e..23ba72853e98a3f8e15c73b450ccfc45574f48c6 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d6ba65d65c716dca36b64ab3acdeb4d30f009c68..585baa2c0c7783e8adde39f4918b3dadbab41fcd 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 092e05946828b9b073c4ca0548a542174044423c..b98d57b98f4cf96e6c42e00e0f3ff0b98542d321 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 77e20b46c61362ca15b5c8acdd5b14be2918cb4e..9ec766bb5dd12e0fe7c78f3795e9d3401ebed072 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a20867eae0fa51a9ad3c4743310407966f011dc2..c201f41c8262f947e858b3d5d2d0215e60fe1264 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 578abe81cc3b3dcd1c664bb3fd38c5d02c06b1ea..f8ae7de07563dd3dad134530404256853bae0866 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3d1cf12a297ab0a1909fe49824df19034f11fe81..ebdd01252ddfab48e2de493131b9a30f42b83400 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0f7327aa1a015aa39e96e62f358153eda91f89a0..a0083ca5470a7825dbd302b474df4bd69296e462 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7a730f9d1f1965bb1b33b528659362b7078cb6ce..9518d9fc4762d4a8db15e62fccdb538aa3bd192a 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f8fc86bac020f43097e7b1d57d17176d023f05b8..9ad5af24635d7008259cec3f30d4112c6d3c0d1b 100644 (file)
@@ -279,7 +279,7 @@ tail text.</p>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 42ba94b9c93bd34634bcf2447c68086859d4db19..ef33daa3f6a4ccac14786c7c8bbf5db94a23c1cc 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 29c08144ff90a1484d7d23b993bd80a81f164a54..5bef4de3b1f79379bb6b7f2682f4b28b75a0358f 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 773e9fbbaba29c04293dbb3917218a445dbca7c7..9d27c39e7f0a20dca8094475e3104ec501a674d7 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b77eaa1ffe949e4b2c462ef75f51b0352139a028..bf9557dbe1822eab1acf53fa5c2669937cd2102b 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9de4bbc9ed660d9f9b1004e6af6453d74d1e1105..76608a05bcc66d8b7424d5ed749a6323e47fefbe 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0892e5c1d5f54f20120745d653da884fe1b75857..082a1ca6e24c0e2949633e0bb22251f8957ca04c 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b31963f84beafe7e5b0df6ed36dd60a8e226458d..7a7b80d6fb131063af73a7b4533919e318788122 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c169ca88fdcc66d6180a7d246aedfb9d7926d29a..f70b465e49bba05705ef9c399fd6e1b6260b1157 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 80748f124e1fc2c2bee25960d9ae90d0bf28854d..5df8d46c08f9ab7dffb5d6874a547a7c2ec53047 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f30b34428dac73a4ac0c7eb3ee8782cd6d4e7417..f990e3494a0e69a8c45543660273b930787ff270 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 84ffb079814969e931e0e8bf2aa8d82f0c137a66..eaf0bd42368685bca0682825ef639d89e04045c9 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e40017e1ba1893bcd6a99e6cfb353c8f8fb0d189..9362bd9b1200824e19a6f4416d9de529680b3fbd 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7c8adb0e13ae3469e34b4e286cfe0f28f9c0c1b3..ce5fc85a8c7ca090d808e182a07fb18fa67bde29 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c2ec0916aee721255faa5acd69bcef0048e09413..0c2f23f5ad496cd0272c533369efbbf00af1c313 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 36ea6f15eef094fe4b77377702196694941f8933..ae091823197f59c093912a516fd37df5a736de70 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2cd7b08da98545e52945e57c2ccf0d8885d98c9a..c7fbe9d1c32e9f5e757eb9590f9318930c5fb1cb 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ad8e56db55cd9255b6f9d2a00c37f537365f495c..9c7016d124419e4c5d96a0fecf05db68fe67f499 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 54cfa7eba0d711a504528a5ff4a5cebd2eb61f98..3be713827849c0d84d45795c1d1176cf02d054c7 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 16d9b2f6f3601e529ba74962e8e415d9bee735a6..172b66b2a09a42aa21f35564d9c5be526048ac44 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e53f939d5499e05dd2873f3ce9f6dc1f228a97fb..24c53153b92184862dc367d313260ea098a2a874 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index fefe7ebae396b21e4755ea67206b56de38a3409b..ef1f00f1dac98841ede1f0e9e8607552f1b8e96c 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e41e211823bf7fb9f32eee9ab5b92aeb06fe8786..ab48a625f35a07373bc42fb959918e1db66b985d 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b3bb03871fd53a3d4d4f9deda395c0853a633737..91f306a0012d6ce97d915ad38949f69c3815650c 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f3d99585b6016ae9feb28fe9db9020cd4ea732f7..731cf64a11034c67e2aed7f5f3576e9026ac1c89 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b0a68fdb5f21d5010005e46ce8d29cc63480e575..8913e7ee8b906be172f547364180a2dec238309c 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 248b098c0c05445515b1b5abc3f2b69bda9ed510..5aa3d56e0e5ad8be59cbc85660de36193fe49dae 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 637d0c68baebae04a52c19a2e52a85549ae54638..990f9ba0680ac85b87eb044128ef9844602fa394 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4fa5fc6bb158783bacf02c6eab988c11668281f9..f5d36965b5f00d7002424bab24c9762cc340884e 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e1229be6b2ee73afc9e08046ab5432a2238105c7..0bb9e2f2512ab458d32d60033c2a526721522a26 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9157dabfdb87af6e0baf8e3401ba222dfb5c695c..bed67e5408cba51a1d236ebfa50daea01726ca87 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a086a0cd031e15906e34fa6fe654df112a9b7b83..0c42545a0143d73e45d1b14cc56ede0c9ff0a8a7 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e28298b442aca49aab781a1ebd2f2ceafee0b96c..d2f00c459b29adc0e123a15ad315e52fce408f5a 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1f67acccbaaf412370659d00d1bf270f1afed6af..4b4c60088cb037a9a0f4bf0f181d3dafcdc5b4bd 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b82a9129d307e6dbe7968979a481c3a243ac7e18..69cb0ab5a42d1dd14d285db6bcf3af3241002ff3 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a43d9bb3911b6ea5a9acc90381b352609afaacf8..b19c711fa7d6e5208e1a39246d61c453e9bedd30 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index dac1401e67b3638211b7abb1b31a47dca2fe56f7..63815a2b21bcd35ff89bbf24f63973145402a441 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b70c4c8998b4f3b75224b9c414d2442f331da596..b815558db9eaf482f442c33b4f326219881b9ff5 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 79a635bd729d0ff1315d00256ef8b62110a7e1ad..3a1d20cc0a80c8f973a3e37cb7c9968ac49778d6 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index bec00778112b5b6cca953ad76ed1911120ab357e..bb9c6665a4f772a79dbcea09ed61c848026e9145 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e76003761f18f0c9e0bfcaf914024ce798c5f00c..9225011f128c1173316a14b376083c9cc1bd42fd 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0e40b070ec31690f5c19fb758569df273e5101e2..64b03dc03e00373442b8369dd91bb7b7195e4096 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0fa8d6df496eb1ca2c90e0ce43bfbdc42ef4b2c5..8b999b8c9c72548831e3e0c125fdee34786f0d98 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 82d34fc349c3966fbc6f7891cdd7f87527ba6293..4eb43144225f15d94a0afbfb948bdfa0af8e9465 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c61bcc9d0d675ceadb0318079585d47582bec046..5ba6862460c63586bf844b68a3ead2acc5bbe243 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4b66d1300d406bbfa2c29d273a117721178a9ebf..e703e381fb947f0480b5d4fff9c80e9179eeb48a 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a0ea54f41e311e7cf25f81f69af07fb9923b0a0f..22e8a787cb4f46fc2b5f4c335fcb20d78d3bcd6d 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 093e43085ed3bfb6864bd07dadc6b646918c45ba..e28d0bf39b618b1a1c0deba5e228c09c05c0cef4 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6c6e52e7c3b5ed3fa7c3325b03601530397aebba..21f222da16beadfb19d607993ac0c49c0ae62e46 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 451be9f39588f516e1219ba5b94de6c0b44ef293..a19f28dc7ca75f75f0030ac6d3a988a0ddeb9d36 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d9d2da03f9ad8d89bae7514f069e373c7b274494..d17bc1f6e5a4fbbad05177541193658f5d10eefc 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 47d3f314fb4407f64e5ca715128b6e513ab91e8f..3766a34c7608100d5c7c1095015f5c24fc1c914a 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0d2c65f0362256edbcae8c18b0e7e326a19c8d03..e3dfdab266c108442306b35b35867c46407ddbb7 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 61c54966fbbc52f5eed4aec0822b135d5487e367..a0c89f3df1a7e54d8f244f860dd8392c45fbdd5d 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0ab8b3fe7adf2c57c0d369e81e16f59c6d6af493..c41cb75b9d02f0d3718e6fb64790cf21566432d9 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6bbcc662a0fd3779e1e5d3a35b785fbcb56ee0a2..dd2aa52c2e1ba508fc9446bdc8266f85f1ccdf5f 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f9ec5191ee18e06eb842dbc90d706224a0ff25a4..2c9c2e0f5fd16e639c44547f85f8f8bd6c3cbea2 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4cb71578077aaa0b76cdc20432b0548bd427898d..e1b5d464453476695d737b4494755eaf7446acb6 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c53c5428d24ac81c8ab33d7e1bc903c1d65a15af..d087b14b6488dfd844651d0edaba61e6e5acff1c 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0f6571fbb76af736973416bc2cb1885ab359b3d3..f9928ee05a9c5558836d1862600faca2c49e98a8 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ccc04ec5bfed59281e7cb67fbb047e7677268b2f..5d8be1748df3a22f80e800d20ef14c16639d5dc7 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2a7f87279866276584267151766718ec8496cce4..06142843de717e6d4b5c8cfc652d598e709f9cd4 100644 (file)
@@ -1599,7 +1599,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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a291998118e9d8ca7ab81f16f631b76e6bcbc36e..2c12ff3b43e74c2c12d507073aabddf843c26416 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d45f57ae8e0e6979384e5fcbf53db62b3fa00398..8bff801942e3ef7466d3f3526d88dd4ae18f5336 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 85e65e78232b1faa01ce25b109b770664e792553..6ab591a27cdc2f86f42c8d80058ad62c47d966e7 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 770705310f26fae452b62308f10845de43eef60f..29ba1e29ccb749209401d4ad795adc3402874754 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index af38b8a9134aa223bc32d7a608e499703b8ef699..e6fd3abe87a6fcaf4cb42e9a95d9450cd76d80a7 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8d9d7379e8355b8f0b27f0ebbdd11f50986716fd..fc1a1f44b176808c6b9eca7b9c8a9c64e9856018 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ad2a0fa79f0d260607bed8d83a9ed8fc29f590fd..3c9ecee0db492f8e9abf7b65fa74902fa5e90f76 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 702e71afdf8a52123157c781de9f72db603f9957..fe768604c8d57942d1161e90e4ce72772a7074c5 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index abd3ed420c366ae5659784487f5b2dbdb148b229..d6fb1406f3e34a4f154eea8152222fefb9dd4723 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 18a1fb5b629a9684e0e6f46214df58690f11f98e..c0fdb731c6ead2a76f1f3c6678b157f388144c60 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 603791465a9ce805fc21421527933579be60d018..60afebd9f67b437e1cb7163e4d8d1ab954265a17 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 586f10d345e55547b12efcd3421627cc6e286f7b..4efdf4b8100eee7398f4119e1115b3f372435cca 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e08ce87490c3272deb6f2b1811ab8ef9c8bfc02f..7149727e1c1ab6caeba9ca8fc159ca83071eef61 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 98b91bc763f90f71c13e9b875b8b00b91bcf61b1..4ab57b7fe32fd88a228a0414645fe5e2f60e3eaf 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ecceaea16d32e6dc53d9f15783ff8d05fb09fa05..f9ee02581ba0e9d62f4d6d38ff6dfba14bf46882 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 44c7c50de85151194d078dc94d13466f13d03dc0..fd218fe6ce056303bc9632ac3ec97c4850186571 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f450379d920c2ad034946dd5344d8786be7ce433..5dddaf8b82db19a9b5c01f3295bd8f4c6fa70f8d 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 93a55f671fa41829384e989ad0102252781949ba..d65608a0d824b2a185dde5dd39a0bbee1df8d720 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1c94eeec138e948405ccaf55da1e2e6e5a1d524e..514018ae737b6342da05a9993518e85854ccd0cb 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 67c8ca8c9956aacde21f0eef92d08fa036535fc4..f7b76b277de3c42392820f67b54964f6f5eaea6c 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c621eb5d44928485e65a206f91b4d74d7f3ccc7f..ec31d8934c8eccd9f3c4c83202fbcfe593f56c8a 100644 (file)
@@ -466,7 +466,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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 43379ad2133f9c3973de74bb2df412d1b84790bc..4b6610f6b7a04175af0f8c29838f957a89db2195 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d31d0259da73bcac263adec40fd03880344a0efe..c49a007b001cc5ac3008528098c284533eb16c20 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ba3b578de3303964694a3efc1a7fb5846ca0f9e2..50709a800f01a7f1baf980a3e32e2d1495f271cb 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5cee6c4267d48b3436072fe7fc2f794706c52aaf..700ff925ac93d74c28974bee24fb2de008f98b44 100644 (file)
@@ -3598,7 +3598,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 Thu Nov  7 17:44:11 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 36f083e9a9467ad43b23cc639364a1fee5e1f59b..9849f59330879c90a6e74ca331b7286887d70cd7 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6f2318f66d4473de842e7f287ddc976e9da2b641..dc2084bd4fd66fc7977f759cd8a3c1d93cc8d609 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4d9ba7dc42da554ba45681957518a26c9a4fa484..66f8096b91bdd0a1d7a0a6683d6b37312e77e657 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9f62f420eacd1597bdee1848f21540c60e6f1364..ee3809761af54f303df01e5ddd3fd4da917ddc6a 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 Thu Nov  7 17:44:11 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9b8fd6724a6ac14f51cfeed0fbd0f7ad5162c3fc..e6cf7d501d01726864c606610385f340bddf4b14 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 0x230b9d0&gt;">&lt;_weakrefset.WeakSet object at 0x230b9d0&gt;</code>
+        <a name="_abc_negative_cache"></a><span class="summary-name">_abc_negative_cache</span> = <code title="&lt;_weakrefset.WeakSet object at 0x39b4d10&gt;">&lt;_weakrefset.WeakSet object at 0x39b4d10&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 0x230b850&gt;">&lt;_weakrefset.WeakSet object at 0x230b850&gt;</code>
+        <a name="_abc_registry"></a><span class="summary-name">_abc_registry</span> = <code title="&lt;_weakrefset.WeakSet object at 0x39b4b90&gt;">&lt;_weakrefset.WeakSet object at 0x39b4b90&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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index df246074c2bd7f0a1c946be877e1fbe8aa62c9e2..2aeef2e912f4efc7c2d8cfbaa1cc6ba14e6be916 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 91fca61943101f4ed58150567fe3ca5722b9981b..424ea46aed589f58b7270a717471d8a751c0f27e 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a10efecf1a9d5be41c5e827fdc16c1faf3db1c42..f285475bce97b6ab4ece3b444be6e0130d305469 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ebd8e8c55f665cb157a6c541df3bef24fb97f6be..09dbdd91071cedeb6e996a888136f70d1c289329 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c7d357bffedbcfa799e7822796ebdb8903bae855..46f242324d189e3590e3da8d3d0d1aa56affb1ee 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8d0f025fcc1bd0cdb16f6acc86d37b3150ff8a86..d4140892fae4a687bcc68e33f54c9fc78b9cace5 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 504f76fcabe34185aa740fc76fbefd18d8a26db2..bef2e6622558f11290dc872c34c2b8c13252314d 100644 (file)
@@ -767,7 +767,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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5648a71f0766c404d6ebafff9bea51594991ec93..9b609544a5d3da7fb1f618169522f53480488b70 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f07c2ac4d29db9872e0c5b07188086662f4ca4b8..87ec3e61ac0af8b3bc93e1bc08cf9d93b73188d3 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7adeb35d6daa4278ce1110f35c692037ecb0fb09..c21de778101a9ed98c0ebc0a74b5274531e06d43 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 25bd7256458eba908a0445ae9136e894c841ef51..8e6b3905e081f5903d11b4872f568be480eccdcf 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 654d908f58b16c440a9a9f6c7cb6fd1c89b82f0f..d8782dbf111b7423e2df18cbd8d5c234b61fa2bb 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 71aad60ddb761d1704cdfdc524df93d1f892047b..05cbb0370b30826f90d757663121ca748230f01e 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c3885dd905cd6adf085c8d2b4b337a7e7fdfbcff..5a05a21a6d2d4641adf1e11e56e5574a1431d22b 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f255aa0b1dc7dacd5c689cfebad9404335097550..96c674f7acc225604ce9b1ebb8d3848b602d1947 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d93a9ec4d9d44f116b7e94eb212a01fdff655a7d..24abd351eaf3718d75eeb2c1010fc73530a88e88 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3a1e714fe291f9df3e69b12e7a3eba5a1d355b7c..e329035e2145f8d470d4d98c4f116052ecbb93f4 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d097c275dd26d520f25a56fb265a4a2ab53327fe..c8a874e7493433ead0b310afb3809960e8a17cf7 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a7d093b423ae002ce9359b68c4594bb0761a623a..bf925292df8d2a9941ce9a62335bcc992a5cf5bd 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4a046259f7a8aa7ab5981a08d7928897e938177e..5927f3e1655de0efcf4c45b281912ababc4e21fe 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 Thu Nov  7 17:44:11 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 651a423076230c39ea8f9f9870fcb3eff6bd2c00..9dd19b87a4ed9e49145bc5633c5e0c5545e6b7e5 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c513cf0008b593dda4040227ce216c3bccc7517a..dd19f5f00c0f6c4bee9f14bd2a50c1038914a7ae 100644 (file)
@@ -1247,7 +1247,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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2b6848268d48374a65e40f7e1af100e41770fef9..c37ee77133455bc98f8ccb18d0af37e7fb132fd2 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1c06dea647fe18f7d1ec063c0faf2507b60e01b6..3074195e31a952eb759d422def1b826aea0a1493 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 445e3792d4a6b928af6c6092fa11802bc60818b9..300d8b646421fa84ea04e3fc827498899a0f5b69 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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 498a896dba8f16789909f11a779ec53456145c46..dd28b0c072fcc50d311a93e4a92fc38b33c857c3 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 0x2572ed8&gt;</span>)</span><br />
+        <span class="summary-sig-arg">markup</span>=<span class="summary-sig-default">&lt;function default_markup at 0x3e15aa0&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 0x2572ed8&gt;</span>)</span>
+        <span class="sig-arg">markup</span>=<span class="sig-default">&lt;function default_markup at 0x3e15aa0&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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 67492901815237ed3fa96cb6152b65f3ebfd9701..6d68854564552642304caf8ed3e6b57b481127a6 100644 (file)
@@ -1726,7 +1726,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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 59b5e39f68dbaa4022833ef809fb908f23e068e6..bfae9bbc888430de221eeaa2c785e98d9711e26d 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a9d43e639235fbf1bfb824a545df04a6d9c35de9..f07e189b8d803eab9b2461a2ab951f56301e83cc 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e920f6b3e4cfab37b43e0379b9eefd67b8bcc540..0ae61ac906e9899a221261c9b6934f177526e151 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2a0731165678ae5a515af4e91e0ce8feb2d86b78..dad12c68dca7d749f35a782e3fa552b34d1590d4 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d11c45833301a4e7bfe5c31a0b5150f910bb52b3..92c0a515f1df5a20bb4e6e5793445e360dc18409 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e10a73acf0fa15aff23b5a8aa47087f08c8add90..8004122fdaab70c5a3f7f62d6e81af597ab7d733 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 51c95accba82f504694811699666056f29c83147..e96af3df21330331918a8147c439ea26c0f7bfc2 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 577dac8acbe3371087e3652422abf5133c22099c..1770ab0d3852f5a40940837081cfaa894e4c9b42 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 29dde4cbbb935618d0a2525a1938017ce99601fb..2a15765ee3a32046a93c9ffe90be149190a20ab3 100644 (file)
@@ -783,7 +783,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 79faf1a1a72fa70306f08b6fb58eb15cacf113cd..faaabf798cf51ca2d406f6fa9a77e54aaf239d87 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1667827a5673083c0412ec42094ea5a55c1ba9fc..f6d8555dfac430033007de67849e007c462821ee 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 37477a63a4c515bbe91ff70f8d28c280a505f2c1..e59a1b3299c5adb0f76916dacfb89de85026d86d 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 918a2ed1103d29ed41c4c5f0f9f2901e007bb3b2..02a2c3b2ca03f3fd2ce5178b172a1a203f1367c4 100644 (file)
@@ -568,7 +568,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 Thu Nov  7 17:44:11 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6ab16ce278259a0d70db71fb148209673aef3a06..5d6355192365d91f22d35af944de64d4c0d0975c 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9b2256a7966b4b997e6ed1bd8c7447d9c41faa16..12af8d37a2c6ab6a4863b957c2d3e106289d81e7 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7176f56a20b6bad4da2ebd8a1ac55fdb0f09a344..6ba29d72c9d005b922ddf4d67b8969960716f54c 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9a2e4c286f66ce4ce128b70ae6a64b0bc222ec57..ac7dea840a192f1d87e0b9a71ea4da67f8cfa690 100644 (file)
@@ -304,7 +304,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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 66873be89bb7648e5a611f4c496019c8a414341f..9f567502676c5346facabee74dbe9cd5fb727957 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f9be6bf921845313bf5ee7ac5881a1c47e1259f5..f4913311139f4b95ea3910dfe3f66e498501cb8d 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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 83d1bf7ab887db6bce2efb40b1d0c1a9cbbb570d..9dedca847c4a974ad35e05886a439f78d4b50512 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4e0d7de6d8609ed773ce762fe51b28da109a50aa..8c5c71202275f9351a309b258947176cf022bf44 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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5e805d2707654ea25e1a8d4198b39eafe8da1569..fabee9fb3a2ef248e483b81dbd1366752f0084a1 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 34ae333997e701947b5b0c78224805a5205338a9..c7559070c69b211801a3bf21d6a287563f4028df 100644 (file)
@@ -597,7 +597,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4b87c13a47a051aa4a21006d8f3196de02b8469f..bbcbef356e1168a312c8ea59f54755eae4b19dbb 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 470420b4433a8d8fd2684efaa00546ec953d0ec1..c3e8cf8a31370ad71f7fd23f13eb8702389025fd 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 0x1b847d0&gt;">&lt;lxml.objectify.ElementMaker object at 0x1b847d0&gt;</code>
+        <a name="E"></a><span class="summary-name">E</span> = <code title="&lt;lxml.objectify.ElementMaker object at 0x34178f0&gt;">&lt;lxml.objectify.ElementMaker object at 0x34178f0&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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9cfef1c0020cab3ddb5654d819acc93b400270b0..c11a4a8abaac2abdcf272aa19097a89170323b0d 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 82f4ee0090a7e060549f78795ba3463260e923d8..1910d7d7b667f17cc261172b4703c52befe51810 100644 (file)
@@ -364,7 +364,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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 742a0cbe48167809635a468e67559168df43ff78..ff286111f40477b1417783a576f089a55767d3fa 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a9eb110b09176090494f6be1cefad9a48cee6bbd..2917c194a2a6b8c83b4616ab7d8d4d821f4fa08b 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b62e00c6cc5a22f0a24035273a8307c47d73b433..57cdd8b54c93c2d54b437e4cc8477d707e89b8e2 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 311f2cf60b232f63840833948a42149074480525..14c33b073c5d9592a1b0115ae6bd54b34214ca9a 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f925ecb72e8b8281780fcadccd160a084c92dc3d..7cf3cd25770a6272e5e1e92950058557ff0fccca 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6ff45d928e620015733c3245d7259c9e501b413f..12783ed97fda0efe7b54be7830717d705a2d2ddb 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 620187e10a4855c2273d36ada28414773639320c..ec3c67a5a9ae8aabf6f108da9091164c40d25e31 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 11fd748e2e440b6991d83eda0049a95357758ba4..f0c0a708096af4c95eb7434f459554e531750c51 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c736b4a8ea7b674efb64c1e658c107f1bf89478c..bcafa72da10a6adeb5c8b02a983a1a53dec1d0c0 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index eff0f74879fa3b715b22af143a213e8544a3c273..4240702d5eb6c7f5254cf26a80292afc7d43d383 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5163fb5092eddf2aee03a87fb88a1dc6af45fe09..61a7770f448ca47e6883c30d32e4643233237569 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ab94297683267a8e281d99f9fd7a3194beb3e96d..db36e5838aff2a711ac6b020e4dde8a7ce611666 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 76a0909b2223e22caabafccebcbe45fbf17ea4d2..d6da6b9feaef13d0dd5be41626430788c7126528 100644 (file)
@@ -106,7 +106,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:30 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4c82f4457f8bfd38323e60d402b50807852186b9..28d322492c909065eaf16c1f3061841207f18d7b 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7a363cdd89cccbd84ce5d9ade3e1c253faded3d3..8f6617283b09b3bfa57a849e249886ac1508eda8 100644 (file)
@@ -488,7 +488,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ecdcb0f8794a6fe1f0102306706879f781fb5392..854a173721894ead765a30de227c8c14011e4c72 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 10f8a6c5350cdf86b173adcf4784a13c60c54c02..47ab32e25f437df2b60d86798a2b897db4087c37 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5a661b91a512593425dc9fb671cd79c0829c5abb..c7497e6fab8a7143942dda631ce22c0888443599 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7df3dc0478d3ea50061e5d97b98d8612b7e48047..03317183bcff40925a1b71de5a3b5d02f4dbc1a2 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 61bd8142eb2921ef7caa692a3306e4d1c2aff8fa..4b648095d790325df978881d42e6675168ae45b6 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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e9a54d5dcf5d198f3c912eb8f8afddb44678e98f..bad430ce062ccf404d607986c0ff7547c7728e34 100644 (file)
@@ -490,7 +490,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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3c29ff2d479618876b6b4e66147566ef499354e9..62cd29fc78148c7cb25d9f8730f7b0eda79e66e1 100644 (file)
@@ -536,7 +536,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 Thu Nov  7 17:44:11 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ab585509c221ffc2961ef479e770f7a681604470..71067141844cb6464d95af703fda60f0c0036e76 100644 (file)
@@ -74,7 +74,7 @@ unittest.case.TestCase --+
 <dl><dt>Known Subclasses:</dt>
 <dd>
       <ul class="subclass-list">
-<li><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html">test_xslt.ETreeEXSLTTestCase</a></li><li>, <a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">test_xslt.ETreeXSLTExtElementTestCase</a></li><li>, <a href="lxml.tests.test_xslt.ETreeXSLTExtFuncTestCase-class.html">test_xslt.ETreeXSLTExtFuncTestCase</a></li><li>, <a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">test_xslt.ETreeXSLTTestCase</a></li><li>, <a href="lxml.tests.test_xslt.Py3XSLTTestCase-class.html">test_xslt.Py3XSLTTestCase</a></li><li>, <a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">test_dtd.ETreeDtdTestCase</a></li><li>, <a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">test_isoschematron.ETreeISOSchematronTestCase</a></li><li>, <a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">test_relaxng.ETreeRelaxNGTestCase</a></li><li>, <a href="lxml.tests.test_http_io.HttpIOTestCase-class.html">test_http_io.HttpIOTestCase</a></li><li>, <a href="lxml.tests.test_errors.ErrorTestCase-class.html">test_errors.ErrorTestCase</a></li><li>, <a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">test_pyclasslookup.PyClassLookupTestCase</a></li><li class="private">, <a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">test_incremental_xmlfile._XmlFileTestCaseBase</a></li><li>, <a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">test_objectify.ObjectifyTestCase</a></li><li>, <a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html">test_schematron.ETreeSchematronTestCase</a></li><li class="private">, <a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">test_io._IOTestCaseBase</a></li><li class="private">, <a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">test_elementtree._ETreeTestCaseBase</a></li><li>, <a href="lxml.tests.test_css.CSSTestCase-class.html">test_css.CSSTestCase</a></li><li>, <a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">test_unicode.UnicodeTestCase</a></li><li>, <a href="lxml.tests.test_xpathevaluator.ETreeETXPathClassTestCase-class.html">test_xpathevaluator.ETreeETXPathClassTestCase</a></li><li>, <a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html">test_xpathevaluator.ETreeXPathClassTestCase</a></li><li>, <a href="lxml.tests.test_xpathevaluator.ETreeXPathExsltTestCase-class.html">test_xpathevaluator.ETreeXPathExsltTestCase</a></li><li>, <a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">test_xpathevaluator.ETreeXPathTestCase</a></li><li>, <a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">test_classlookup.ClassLookupTestCase</a></li><li>, <a href="lxml.tests.test_classlookup.ProxyTestCase-class.html">test_classlookup.ProxyTestCase</a></li><li>, <a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html">test_nsclasses.ETreeNamespaceClassesTestCase</a></li><li>, <a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html">test_xmlschema.ETreeXMLSchemaResolversTestCase</a></li><li>, <a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">test_xmlschema.ETreeXMLSchemaTestCase</a></li><li>, <a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">test_htmlparser.HtmlParserTestCase</a></li><li>, <a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">test_sax.ETreeSaxTestCase</a></li><li>, <a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">test_etree.ETreeC14NTestCase</a></li><li>, <a href="lxml.tests.test_etree.ETreeErrorLogTest-class.html">test_etree.ETreeErrorLogTest</a></li><li>, <a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">test_etree.ETreeOnlyTestCase</a></li><li>, <a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html">test_etree.ETreeWriteTestCase</a></li><li class="private">, <a href="lxml.tests.test_etree._XIncludeTestCase-class.html" onclick="show_private();">test_etree._XIncludeTestCase</a></li><li>, <a href="lxml.tests.test_builder.BuilderTestCase-class.html">test_builder.BuilderTestCase</a></li><li>, <a href="lxml.tests.test_threading.ThreadPipelineTestCase-class.html">test_threading.ThreadPipelineTestCase</a></li><li>, <a href="lxml.tests.test_threading.ThreadingTestCase-class.html">test_threading.ThreadingTestCase</a></li>  </ul>
+<li><a href="lxml.tests.test_xslt.ETreeEXSLTTestCase-class.html">test_xslt.ETreeEXSLTTestCase</a></li><li>, <a href="lxml.tests.test_xslt.ETreeXSLTExtElementTestCase-class.html">test_xslt.ETreeXSLTExtElementTestCase</a></li><li>, <a href="lxml.tests.test_xslt.ETreeXSLTExtFuncTestCase-class.html">test_xslt.ETreeXSLTExtFuncTestCase</a></li><li>, <a href="lxml.tests.test_xslt.ETreeXSLTTestCase-class.html">test_xslt.ETreeXSLTTestCase</a></li><li>, <a href="lxml.tests.test_xslt.Py3XSLTTestCase-class.html">test_xslt.Py3XSLTTestCase</a></li><li>, <a href="lxml.tests.test_dtd.ETreeDtdTestCase-class.html">test_dtd.ETreeDtdTestCase</a></li><li>, <a href="lxml.tests.test_isoschematron.ETreeISOSchematronTestCase-class.html">test_isoschematron.ETreeISOSchematronTestCase</a></li><li>, <a href="lxml.tests.test_http_io.HttpIOTestCase-class.html">test_http_io.HttpIOTestCase</a></li><li>, <a href="lxml.tests.test_errors.ErrorTestCase-class.html">test_errors.ErrorTestCase</a></li><li>, <a href="lxml.tests.test_pyclasslookup.PyClassLookupTestCase-class.html">test_pyclasslookup.PyClassLookupTestCase</a></li><li class="private">, <a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html" onclick="show_private();">test_incremental_xmlfile._XmlFileTestCaseBase</a></li><li>, <a href="lxml.tests.test_objectify.ObjectifyTestCase-class.html">test_objectify.ObjectifyTestCase</a></li><li>, <a href="lxml.tests.test_schematron.ETreeSchematronTestCase-class.html">test_schematron.ETreeSchematronTestCase</a></li><li class="private">, <a href="lxml.tests.test_io._IOTestCaseBase-class.html" onclick="show_private();">test_io._IOTestCaseBase</a></li><li class="private">, <a href="lxml.tests.test_elementtree._ETreeTestCaseBase-class.html" onclick="show_private();">test_elementtree._ETreeTestCaseBase</a></li><li>, <a href="lxml.tests.test_relaxng.ETreeRelaxNGTestCase-class.html">test_relaxng.ETreeRelaxNGTestCase</a></li><li>, <a href="lxml.tests.test_builder.BuilderTestCase-class.html">test_builder.BuilderTestCase</a></li><li>, <a href="lxml.tests.test_unicode.UnicodeTestCase-class.html">test_unicode.UnicodeTestCase</a></li><li>, <a href="lxml.tests.test_xpathevaluator.ETreeETXPathClassTestCase-class.html">test_xpathevaluator.ETreeETXPathClassTestCase</a></li><li>, <a href="lxml.tests.test_xpathevaluator.ETreeXPathClassTestCase-class.html">test_xpathevaluator.ETreeXPathClassTestCase</a></li><li>, <a href="lxml.tests.test_xpathevaluator.ETreeXPathExsltTestCase-class.html">test_xpathevaluator.ETreeXPathExsltTestCase</a></li><li>, <a href="lxml.tests.test_xpathevaluator.ETreeXPathTestCase-class.html">test_xpathevaluator.ETreeXPathTestCase</a></li><li>, <a href="lxml.tests.test_classlookup.ClassLookupTestCase-class.html">test_classlookup.ClassLookupTestCase</a></li><li>, <a href="lxml.tests.test_classlookup.ProxyTestCase-class.html">test_classlookup.ProxyTestCase</a></li><li>, <a href="lxml.tests.test_nsclasses.ETreeNamespaceClassesTestCase-class.html">test_nsclasses.ETreeNamespaceClassesTestCase</a></li><li>, <a href="lxml.tests.test_xmlschema.ETreeXMLSchemaResolversTestCase-class.html">test_xmlschema.ETreeXMLSchemaResolversTestCase</a></li><li>, <a href="lxml.tests.test_xmlschema.ETreeXMLSchemaTestCase-class.html">test_xmlschema.ETreeXMLSchemaTestCase</a></li><li>, <a href="lxml.tests.test_htmlparser.HtmlParserTestCase-class.html">test_htmlparser.HtmlParserTestCase</a></li><li>, <a href="lxml.tests.test_sax.ETreeSaxTestCase-class.html">test_sax.ETreeSaxTestCase</a></li><li>, <a href="lxml.tests.test_etree.ETreeC14NTestCase-class.html">test_etree.ETreeC14NTestCase</a></li><li>, <a href="lxml.tests.test_etree.ETreeErrorLogTest-class.html">test_etree.ETreeErrorLogTest</a></li><li>, <a href="lxml.tests.test_etree.ETreeOnlyTestCase-class.html">test_etree.ETreeOnlyTestCase</a></li><li>, <a href="lxml.tests.test_etree.ETreeWriteTestCase-class.html">test_etree.ETreeWriteTestCase</a></li><li class="private">, <a href="lxml.tests.test_etree._XIncludeTestCase-class.html" onclick="show_private();">test_etree._XIncludeTestCase</a></li><li>, <a href="lxml.tests.test_css.CSSTestCase-class.html">test_css.CSSTestCase</a></li><li>, <a href="lxml.tests.test_threading.ThreadPipelineTestCase-class.html">test_threading.ThreadPipelineTestCase</a></li><li>, <a href="lxml.tests.test_threading.ThreadingTestCase-class.html">test_threading.ThreadingTestCase</a></li>  </ul>
 </dd></dl>
 
 <hr />
@@ -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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0f2497988e0648a89ad87f91da679a32e08e0ebe..2895bdac5caae0f9bcb034a4e17251becaab69e1 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 255dfebd770d64f2d530e1f96bf95fc77aaa1050..8adad7a9287e412079918c1d5b71e08f52e3bdd6 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c638cd16f6b92c47b5bb14aab12c49b7ca21f3a8..debba68c63a27cd98a13186f63c8794c15ba3ff2 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 04edc788c4bddb87ea63fc1ea58bb9aab7262599..8db67d402cdf4dc27170cff944cdbfd579c561a0 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ff9886284d48f1d7e75c345bd74979a5f3279e6b..19b28bdf53e96ae86e0d4f9c89baa3f72dd456ec 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 Thu Nov  7 17:44:11 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6506caf7c66b7af5b55900c98dd846842cbd6bf4..9a2f048fbc0c9a498e528014a8f773d1c83b69bd 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index df300b32863c0c05ea77f24431b2ed7a40f59456..535c3bcd7291c156825a2a49783c51ad4c42db99 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 103691247d233292e69eb912d3aaa9a2cb83cf2b..fd66c98e29d23e34eb90d3f2694fbda1cda4680b 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c9a35f0aa19870239788fc3786d3c2702e56d988..c4e29a49252ac3529e51a703035966d806d70ff0 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f1dc70c8ff5cc769668223686db09968a56519ae..7543bd6f8def2ae2c91715858f18ee33d1519e63 100644 (file)
@@ -225,7 +225,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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 43bb9ece589c0c4a2ebfb9304281a2ee708401ec..326d34f3846bfb2ef6cb2385ce6bed47e0f24626 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 13cfc2302b3094b2e6adc633c1cd2f3a1f99a8d5..06f277ec6cefbad2be090e7159ba730109f92c05 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d0855cc3814cbab3e6569d9d75c55e3e9560c0af..2a644e551b659307ab32054b4e50c0ea209e3394 100644 (file)
@@ -1106,7 +1106,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3094787707e0a45b563337973b20dd81d30b1cf1..f15e70f0245f7a3daf596660773dce245079cf57 100644 (file)
@@ -588,7 +588,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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 61784fdd871764560f895e34c6fe5375845adf77..c9f046dbc443e0d3d6a4616804efaa44fa2fc94f 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 61e72dd48c807cbafbf4112a291b4c95d462cf2d..2ea065517062da37a119859e9a7d639ee2ed3eb6 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c3f0581d4a9abf7aa0552ec716e380e2bb5e7fb7..a7fb0a3f6ce246bb16be9f7d096dbb92a5dc0011 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ad3927b413b52dd29c1b908c70bc3fecb3d499ec..5822edc289f2b44172d66501c06444880f71996c 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 27235a36b181b7f6100fe516a47c6dbd37f5cf10..1f6d6bc43399367e03956d3d545bd8844fdc1cf0 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1b25e59146221bb2208a5d835d2aa406545f5517..a055f09e6be10cd66a9d6a3a63874a3cd4fb1d0b 100644 (file)
@@ -655,7 +655,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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 89bc3338eb9252b1e66c8de782b8ca97e114c512..2e3797978b485f614c41344cb6840e0708a71e54 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 95bf6358162be57862b26cb05213fb29fd93b1e7..dab19e57e87e01927caf33a382fbcc80a7f8a7c1 100644 (file)
@@ -271,7 +271,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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2faa0cb411ea30668b8335e7d14d03175d01a6e3..269668fb8e55f4165120f197c3f802277410534c 100644 (file)
@@ -10451,7 +10451,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 Thu Nov  7 17:44:11 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a3d2c334291a4109bd18e6688e38924e49f1d923..c8c9f932c6e2a720e9ea3601811e6326ac24246a 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 572f6adca79299fbb54632b6b8ccf268910f6c74..0e6acc86c9784c8e9e916c1f3b86ae1d34b6e5f0 100644 (file)
@@ -649,7 +649,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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 85b1ee3f7a8f82a861ecdacdf719a9951bb6405e..83071fac15b73f638f1c5c047e1634998a62cc28 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b09578c2187b8fbc480e223d3f49938e9b0e6ffe..1813f584e818ef25f139db7215b48443e6529696 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ec6fb846628800253ce51acdc4660cbbacb99e4a..d5442f593af4c04bd069826c3cbc41c9ac396a5c 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 988c6c11a0d72c6012fbcaa60d0a62dd5e377b05..db75e7b527b9f5757385ad1fd9b17e6582bfcdaf 100644 (file)
@@ -259,7 +259,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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 983ec29c70d83b167edaa3407bca6947b2bb03ed..504d5a1e48295ca0e74cada9c42f03b9c500b6a6 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6e55f9302948bd20c785b663dd096fa6694bf421..138e1d34947bfe983f69761a482e64db644148c3 100644 (file)
@@ -268,7 +268,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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2b168ea68d6e1900b14f5674a77cafb1723f4278..7a8dfcd15c4c318cb4cd94df7b5b8d6c643f10fa 100644 (file)
@@ -9697,7 +9697,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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 333cc114cdf61200b898a75c7323084f03ed9019..ae0055ab47892a5909f7ccb3ebb88ad25095b70b 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index efef02b49727219f76e9282bec5754c75bd609eb..6e81a57d85f57dddf5cdc76c6180c9f6f96cba29 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7805baba12cbc53ee76d7569523b708864605e64..873811bdc0a2045a58948dc45b9b51b58f543ff3 100644 (file)
@@ -3976,7 +3976,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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0c8cc52f060a6fbc1cada5a43dd56933f798c921..f17c72367da3e98c2ef74408acf876e65b046ffe 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2e4c6a4a0b62aecee12b04982834bc718506d265..2f0d9727e56a3309561869a3860767c7f547c00e 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a48c63aecf8bfb2593464b8a0d7c38bcd8e9cb56..19e7a4c8529c6ef64d2ba8ce15164f2a88caafcf 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 03e382358e822e588bc32d1da45b8d8aa7465db9..a82f8226c4a2e7eb90d0a38523625363432f1ae1 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 49bccc6a1a82e6be01bd40a7534823e49c545ad5..3a6ca304a9c5a51c6e43157611ef03b4e3acd873 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index dee02f01ed4f946b5da7b0c677d1c4638419c2f0..cdcd1ac244e5d2bcdb70ee2019f8b5933fb694dc 100644 (file)
@@ -1278,7 +1278,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 Thu Nov  7 17:44:11 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3790094fd9203ac7a97ddb309de690b0b53131f1..fcffba45edf5503e6f8aa4457375848b4b49e237 100644 (file)
@@ -1004,7 +1004,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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ea14e20612323d25e8d77b0ad9d5e9230e383507..fec039591224819fad2605c80111da147b330ff5 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7cf3e967fc8d83f837055ceaf79604fb08e2e5da..cc257e950c67a938d2f4ae048cbb23c69cb42922 100644 (file)
@@ -447,7 +447,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 Thu Nov  7 17:44:13 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:30 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index dc3e35fdad817760fd5f7f375f0b068bd90e70e4..6fa2af8c61925ff8fae30e31561b97270870b60e 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 04127b41a94fda3efc15a5dfde8fb0ef917c24c1..c1df56b2d2773ee2497072b2b5022ba31025a808 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 41ad53be7dc5fd744e1340fd3802510880673a99..b6ba49f04d17e444ee3d3050361c618165e7c94d 100644 (file)
@@ -437,84 +437,112 @@ lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="retu
 <a name="L175"></a><tt class="py-lineno">175</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
 <a name="L176"></a><tt class="py-lineno">176</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 class="py-name">False</tt><tt class="py-op">)</tt> </tt>
 </div><a name="L177"></a><tt class="py-lineno">177</tt>  <tt class="py-line"> </tt>
-<a name="_XmlFileTestCaseBase._read_file"></a><div id="_XmlFileTestCaseBase._read_file-def"><a name="L178"></a><tt class="py-lineno">178</tt> <a class="py-toggle" href="#" id="_XmlFileTestCaseBase._read_file-toggle" onclick="return toggle('_XmlFileTestCaseBase._read_file');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#_read_file">_read_file</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="_XmlFileTestCaseBase._read_file-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_XmlFileTestCaseBase._read_file-expanded"><a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-133" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-133', '_file', 'link-11');">_file</a></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="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-134" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-134', '_file', 'link-11');">_file</a></tt><tt class="py-op">.</tt><tt id="link-135" class="py-name" targets="Method lxml.tests.common_imports.LargeFileLike.read()=lxml.tests.common_imports.LargeFileLike-class.html#read,Method lxml.tests.common_imports.SillyFileLike.read()=lxml.tests.common_imports.SillyFileLike-class.html#read"><a title="lxml.tests.common_imports.LargeFileLike.read
-lxml.tests.common_imports.SillyFileLike.read" class="py-name" href="#" onclick="return doclink('link-135', 'read', 'link-135');">read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line"> </tt>
-<a name="_XmlFileTestCaseBase._parse_file"></a><div id="_XmlFileTestCaseBase._parse_file-def"><a name="L182"></a><tt class="py-lineno">182</tt> <a class="py-toggle" href="#" id="_XmlFileTestCaseBase._parse_file-toggle" onclick="return toggle('_XmlFileTestCaseBase._parse_file');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#_parse_file">_parse_file</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="_XmlFileTestCaseBase._parse_file-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_XmlFileTestCaseBase._parse_file-expanded"><a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-136" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-136', '_file', 'link-11');">_file</a></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="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-137" class="py-name"><a title="lxml.etree
+<a name="_XmlFileTestCaseBase.test_closing_out_of_order_in_error_case"></a><div id="_XmlFileTestCaseBase.test_closing_out_of_order_in_error_case-def"><a name="L178"></a><tt class="py-lineno">178</tt> <a class="py-toggle" href="#" id="_XmlFileTestCaseBase.test_closing_out_of_order_in_error_case-toggle" onclick="return toggle('_XmlFileTestCaseBase.test_closing_out_of_order_in_error_case');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" 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><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="_XmlFileTestCaseBase.test_closing_out_of_order_in_error_case-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_XmlFileTestCaseBase.test_closing_out_of_order_in_error_case-expanded"><a name="L179"></a><tt class="py-lineno">179</tt>  <tt class="py-line">        <tt class="py-name">cm_exit</tt> <tt class="py-op">=</tt> <tt class="py-name">None</tt> </tt>
+<a name="L180"></a><tt class="py-lineno">180</tt>  <tt class="py-line">        <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L181"></a><tt class="py-lineno">181</tt>  <tt class="py-line">            <tt class="py-keyword">with</tt> <tt id="link-133" 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_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-137', 'etree', 'link-8');">etree</a></tt><tt class="py-op">.</tt><tt id="link-138" class="py-name" targets="Method lxml.etree._ElementTree.parse()=lxml.etree._ElementTree-class.html#parse,Function lxml.etree.parse()=lxml.etree-module.html#parse,Function lxml.html.ElementSoup.parse()=lxml.html.ElementSoup-module.html#parse,Function lxml.html.html5parser.parse()=lxml.html.html5parser-module.html#parse,Function lxml.html.soupparser.parse()=lxml.html.soupparser-module.html#parse,Function lxml.objectify.parse()=lxml.objectify-module.html#parse,Method lxml.tests.common_imports.HelperTestCase.parse()=lxml.tests.common_imports.HelperTestCase-class.html#parse"><a title="lxml.etree._ElementTree.parse
+lxml.tests.test_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-133', 'etree', 'link-8');">etree</a></tt><tt class="py-op">.</tt><tt id="link-134" class="py-name"><a title="lxml.etree.xmlfile" class="py-name" href="#" onclick="return doclink('link-134', 'xmlfile', 'link-13');">xmlfile</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-135" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-135', '_file', 'link-11');">_file</a></tt><tt class="py-op">)</tt> <tt class="py-keyword">as</tt> <tt class="py-name">xf</tt><tt class="py-op">:</tt> </tt>
+<a name="L182"></a><tt class="py-lineno">182</tt>  <tt class="py-line">                <tt class="py-name">x</tt> <tt class="py-op">=</tt> <tt class="py-name">xf</tt><tt class="py-op">.</tt><tt class="py-name">element</tt><tt class="py-op">(</tt><tt class="py-string">'test'</tt><tt class="py-op">)</tt> </tt>
+<a name="L183"></a><tt class="py-lineno">183</tt>  <tt class="py-line">                <tt class="py-name">cm_exit</tt> <tt class="py-op">=</tt> <tt class="py-name">x</tt><tt class="py-op">.</tt><tt id="link-136" class="py-name" targets="Method lxml.etree._ErrorLog.__exit__()=lxml.etree._ErrorLog-class.html#__exit__,Method lxml.etree.xmlfile.__exit__()=lxml.etree.xmlfile-class.html#__exit__"><a title="lxml.etree._ErrorLog.__exit__
+lxml.etree.xmlfile.__exit__" class="py-name" href="#" onclick="return doclink('link-136', '__exit__', 'link-136');">__exit__</a></tt> </tt>
+<a name="L184"></a><tt class="py-lineno">184</tt>  <tt class="py-line">                <tt class="py-name">x</tt><tt class="py-op">.</tt><tt id="link-137" class="py-name" targets="Method lxml.etree.xmlfile.__enter__()=lxml.etree.xmlfile-class.html#__enter__"><a title="lxml.etree.xmlfile.__enter__" class="py-name" href="#" onclick="return doclink('link-137', '__enter__', 'link-137');">__enter__</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+<a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line">                <tt class="py-keyword">raise</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">'123'</tt><tt class="py-op">)</tt> </tt>
+<a name="L186"></a><tt class="py-lineno">186</tt>  <tt class="py-line">        <tt class="py-keyword">except</tt> <tt class="py-name">ValueError</tt><tt class="py-op">:</tt> </tt>
+<a name="L187"></a><tt class="py-lineno">187</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 class="py-name">cm_exit</tt><tt class="py-op">)</tt> </tt>
+<a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line">            <tt class="py-keyword">try</tt><tt class="py-op">:</tt> </tt>
+<a name="L189"></a><tt class="py-lineno">189</tt>  <tt class="py-line">                <tt class="py-name">cm_exit</tt><tt class="py-op">(</tt><tt class="py-name">ValueError</tt><tt class="py-op">,</tt> <tt class="py-name">ValueError</tt><tt class="py-op">(</tt><tt class="py-string">"huhu"</tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">None</tt><tt class="py-op">)</tt> </tt>
+<a name="L190"></a><tt class="py-lineno">190</tt>  <tt class="py-line">            <tt class="py-keyword">except</tt> <tt id="link-138" 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_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-138', 'etree', 'link-8');">etree</a></tt><tt class="py-op">.</tt><tt id="link-139" class="py-name"><a title="lxml.etree.LxmlSyntaxError" class="py-name" href="#" onclick="return doclink('link-139', 'LxmlSyntaxError', 'link-118');">LxmlSyntaxError</a></tt><tt class="py-op">:</tt> </tt>
+<a name="L191"></a><tt class="py-lineno">191</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 class="py-name">True</tt><tt class="py-op">)</tt> </tt>
+<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line">            <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L193"></a><tt class="py-lineno">193</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 class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+<a name="L194"></a><tt class="py-lineno">194</tt>  <tt class="py-line">        <tt class="py-keyword">else</tt><tt class="py-op">:</tt> </tt>
+<a name="L195"></a><tt class="py-lineno">195</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 class="py-name">False</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line"> </tt>
+<a name="_XmlFileTestCaseBase._read_file"></a><div id="_XmlFileTestCaseBase._read_file-def"><a name="L197"></a><tt class="py-lineno">197</tt> <a class="py-toggle" href="#" id="_XmlFileTestCaseBase._read_file-toggle" onclick="return toggle('_XmlFileTestCaseBase._read_file');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#_read_file">_read_file</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="_XmlFileTestCaseBase._read_file-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_XmlFileTestCaseBase._read_file-expanded"><a name="L198"></a><tt class="py-lineno">198</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-140" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-140', '_file', 'link-11');">_file</a></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="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-141" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-141', '_file', 'link-11');">_file</a></tt><tt class="py-op">.</tt><tt id="link-142" class="py-name" targets="Method lxml.tests.common_imports.LargeFileLike.read()=lxml.tests.common_imports.LargeFileLike-class.html#read,Method lxml.tests.common_imports.SillyFileLike.read()=lxml.tests.common_imports.SillyFileLike-class.html#read"><a title="lxml.tests.common_imports.LargeFileLike.read
+lxml.tests.common_imports.SillyFileLike.read" class="py-name" href="#" onclick="return doclink('link-142', 'read', 'link-142');">read</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line"> </tt>
+<a name="_XmlFileTestCaseBase._parse_file"></a><div id="_XmlFileTestCaseBase._parse_file-def"><a name="L201"></a><tt class="py-lineno">201</tt> <a class="py-toggle" href="#" id="_XmlFileTestCaseBase._parse_file-toggle" onclick="return toggle('_XmlFileTestCaseBase._parse_file');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#_parse_file">_parse_file</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="_XmlFileTestCaseBase._parse_file-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_XmlFileTestCaseBase._parse_file-expanded"><a name="L202"></a><tt class="py-lineno">202</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-143" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-143', '_file', 'link-11');">_file</a></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="L203"></a><tt class="py-lineno">203</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-144" 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_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-144', 'etree', 'link-8');">etree</a></tt><tt class="py-op">.</tt><tt id="link-145" class="py-name" targets="Method lxml.etree._ElementTree.parse()=lxml.etree._ElementTree-class.html#parse,Function lxml.etree.parse()=lxml.etree-module.html#parse,Function lxml.html.ElementSoup.parse()=lxml.html.ElementSoup-module.html#parse,Function lxml.html.html5parser.parse()=lxml.html.html5parser-module.html#parse,Function lxml.html.soupparser.parse()=lxml.html.soupparser-module.html#parse,Function lxml.objectify.parse()=lxml.objectify-module.html#parse,Method lxml.tests.common_imports.HelperTestCase.parse()=lxml.tests.common_imports.HelperTestCase-class.html#parse"><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-138', 'parse', 'link-138');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-139" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-139', '_file', 'link-11');">_file</a></tt><tt class="py-op">)</tt> </tt>
-</div><a name="L185"></a><tt class="py-lineno">185</tt>  <tt class="py-line"> </tt>
-<a name="_XmlFileTestCaseBase.tearDown"></a><div id="_XmlFileTestCaseBase.tearDown-def"><a name="L186"></a><tt class="py-lineno">186</tt> <a class="py-toggle" href="#" id="_XmlFileTestCaseBase.tearDown-toggle" onclick="return toggle('_XmlFileTestCaseBase.tearDown');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#tearDown">tearDown</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="_XmlFileTestCaseBase.tearDown-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_XmlFileTestCaseBase.tearDown-expanded"><a name="L187"></a><tt class="py-lineno">187</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-140" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-140', '_file', 'link-11');">_file</a></tt><tt class="py-op">.</tt><tt id="link-141" class="py-name" targets="Method lxml.etree.TreeBuilder.close()=lxml.etree.TreeBuilder-class.html#close,Method lxml.etree._FeedParser.close()=lxml.etree._FeedParser-class.html#close"><a title="lxml.etree.TreeBuilder.close
-lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-141', 'close', 'link-141');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L188"></a><tt class="py-lineno">188</tt>  <tt class="py-line"> </tt>
-<a name="_XmlFileTestCaseBase.assertXml"></a><div id="_XmlFileTestCaseBase.assertXml-def"><a name="L189"></a><tt class="py-lineno">189</tt> <a class="py-toggle" href="#" id="_XmlFileTestCaseBase.assertXml-toggle" onclick="return toggle('_XmlFileTestCaseBase.assertXml');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#assertXml">assertXml</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">expected</tt><tt class="py-op">,</tt> <tt class="py-param">encoding</tt><tt class="py-op">=</tt><tt class="py-string">'utf8'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="_XmlFileTestCaseBase.assertXml-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_XmlFileTestCaseBase.assertXml-expanded"><a name="L190"></a><tt class="py-lineno">190</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">self</tt><tt class="py-op">.</tt><tt id="link-142" class="py-name" targets="Method lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase._read_file()=lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html#_read_file,Method lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._read_file()=lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#_read_file"><a title="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase._read_file
-lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._read_file" class="py-name" href="#" onclick="return doclink('link-142', '_read_file', 'link-142');">_read_file</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 id="link-143" class="py-name"><a title="lxml.etree.DocInfo.encoding" class="py-name" href="#" onclick="return doclink('link-143', 'encoding', 'link-109');">encoding</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">expected</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L191"></a><tt class="py-lineno">191</tt>  <tt class="py-line"> </tt>
-<a name="L192"></a><tt class="py-lineno">192</tt>  <tt class="py-line"> </tt>
-<a name="BytesIOXmlFileTestCase"></a><div id="BytesIOXmlFileTestCase-def"><a name="L193"></a><tt class="py-lineno">193</tt> <a class="py-toggle" href="#" id="BytesIOXmlFileTestCase-toggle" onclick="return toggle('BytesIOXmlFileTestCase');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.BytesIOXmlFileTestCase-class.html">BytesIOXmlFileTestCase</a><tt class="py-op">(</tt><tt class="py-base-class">_XmlFileTestCaseBase</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="BytesIOXmlFileTestCase-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="BytesIOXmlFileTestCase-expanded"><a name="BytesIOXmlFileTestCase.setUp"></a><div id="BytesIOXmlFileTestCase.setUp-def"><a name="L194"></a><tt class="py-lineno">194</tt> <a class="py-toggle" href="#" id="BytesIOXmlFileTestCase.setUp-toggle" onclick="return toggle('BytesIOXmlFileTestCase.setUp');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.BytesIOXmlFileTestCase-class.html#setUp">setUp</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="BytesIOXmlFileTestCase.setUp-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="BytesIOXmlFileTestCase.setUp-expanded"><a name="L195"></a><tt class="py-lineno">195</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-144" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-144', '_file', 'link-11');">_file</a></tt> <tt class="py-op">=</tt> <tt class="py-name">BytesIO</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L196"></a><tt class="py-lineno">196</tt>  <tt class="py-line"> </tt>
-<a name="TempXmlFileTestCase"></a><div id="TempXmlFileTestCase-def"><a name="L197"></a><tt class="py-lineno">197</tt> <a class="py-toggle" href="#" id="TempXmlFileTestCase-toggle" onclick="return toggle('TempXmlFileTestCase');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase-class.html">TempXmlFileTestCase</a><tt class="py-op">(</tt><tt class="py-base-class">_XmlFileTestCaseBase</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="TempXmlFileTestCase-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TempXmlFileTestCase-expanded"><a name="TempXmlFileTestCase.setUp"></a><div id="TempXmlFileTestCase.setUp-def"><a name="L198"></a><tt class="py-lineno">198</tt> <a class="py-toggle" href="#" id="TempXmlFileTestCase.setUp-toggle" onclick="return toggle('TempXmlFileTestCase.setUp');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase-class.html#setUp">setUp</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="TempXmlFileTestCase.setUp-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TempXmlFileTestCase.setUp-expanded"><a name="L199"></a><tt class="py-lineno">199</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-145" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-145', '_file', 'link-11');">_file</a></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>
-</div></div><a name="L200"></a><tt class="py-lineno">200</tt>  <tt class="py-line"> </tt>
-<a name="SimpleFileLikeXmlFileTestCase"></a><div id="SimpleFileLikeXmlFileTestCase-def"><a name="L201"></a><tt class="py-lineno">201</tt> <a class="py-toggle" href="#" id="SimpleFileLikeXmlFileTestCase-toggle" onclick="return toggle('SimpleFileLikeXmlFileTestCase');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html">SimpleFileLikeXmlFileTestCase</a><tt class="py-op">(</tt><tt class="py-base-class">_XmlFileTestCaseBase</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="SimpleFileLikeXmlFileTestCase-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="SimpleFileLikeXmlFileTestCase-expanded"><a name="SimpleFileLikeXmlFileTestCase.SimpleFileLike"></a><div id="SimpleFileLikeXmlFileTestCase.SimpleFileLike-def"><a name="L202"></a><tt class="py-lineno">202</tt> <a class="py-toggle" href="#" id="SimpleFileLikeXmlFileTestCase.SimpleFileLike-toggle" onclick="return toggle('SimpleFileLikeXmlFileTestCase.SimpleFileLike');">-</a><tt class="py-line">    <tt class="py-keyword">class</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase.SimpleFileLike-class.html">SimpleFileLike</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="SimpleFileLikeXmlFileTestCase.SimpleFileLike-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SimpleFileLikeXmlFileTestCase.SimpleFileLike-expanded"><a name="SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__"></a><div id="SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__-def"><a name="L203"></a><tt class="py-lineno">203</tt> <a class="py-toggle" href="#" id="SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__-toggle" onclick="return toggle('SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__');">-</a><tt class="py-line">        <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase.SimpleFileLike-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">target</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
-</div><div id="SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++++++++++"></div><div id="SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__-expanded"><a name="L204"></a><tt class="py-lineno">204</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_target</tt> <tt class="py-op">=</tt> <tt id="link-146" 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-146', 'target', 'link-146');">target</a></tt> </tt>
-<a name="L205"></a><tt class="py-lineno">205</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-147" class="py-name"><a title="lxml.etree._ElementTree.write" class="py-name" href="#" onclick="return doclink('link-147', 'write', 'link-19');">write</a></tt> <tt class="py-op">=</tt> <tt id="link-148" class="py-name"><a title="lxml.etree._ProcessingInstruction.target" class="py-name" href="#" onclick="return doclink('link-148', 'target', 'link-146');">target</a></tt><tt class="py-op">.</tt><tt id="link-149" class="py-name"><a title="lxml.etree._ElementTree.write" class="py-name" href="#" onclick="return doclink('link-149', 'write', 'link-19');">write</a></tt> </tt>
-<a name="L206"></a><tt class="py-lineno">206</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-150" class="py-name"><a title="lxml.etree.TreeBuilder.close
-lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-150', 'close', 'link-141');">close</a></tt> <tt class="py-op">=</tt> <tt id="link-151" class="py-name"><a title="lxml.etree._ProcessingInstruction.target" class="py-name" href="#" onclick="return doclink('link-151', 'target', 'link-146');">target</a></tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="lxml.etree.TreeBuilder.close
-lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-152', 'close', 'link-141');">close</a></tt> </tt>
-</div></div><a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line"> </tt>
-<a name="SimpleFileLikeXmlFileTestCase.setUp"></a><div id="SimpleFileLikeXmlFileTestCase.setUp-def"><a name="L208"></a><tt class="py-lineno">208</tt> <a class="py-toggle" href="#" id="SimpleFileLikeXmlFileTestCase.setUp-toggle" onclick="return toggle('SimpleFileLikeXmlFileTestCase.setUp');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html#setUp">setUp</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="SimpleFileLikeXmlFileTestCase.setUp-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SimpleFileLikeXmlFileTestCase.setUp-expanded"><a name="L209"></a><tt class="py-lineno">209</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_target</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="L210"></a><tt class="py-lineno">210</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-153" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-153', '_file', 'link-11');">_file</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-154" class="py-name" targets="Class lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase.SimpleFileLike=lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase.SimpleFileLike-class.html"><a title="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase.SimpleFileLike" class="py-name" href="#" onclick="return doclink('link-154', 'SimpleFileLike', 'link-154');">SimpleFileLike</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_target</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L211"></a><tt class="py-lineno">211</tt>  <tt class="py-line"> </tt>
-<a name="SimpleFileLikeXmlFileTestCase._read_file"></a><div id="SimpleFileLikeXmlFileTestCase._read_file-def"><a name="L212"></a><tt class="py-lineno">212</tt> <a class="py-toggle" href="#" id="SimpleFileLikeXmlFileTestCase._read_file-toggle" onclick="return toggle('SimpleFileLikeXmlFileTestCase._read_file');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html#_read_file">_read_file</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="SimpleFileLikeXmlFileTestCase._read_file-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SimpleFileLikeXmlFileTestCase._read_file-expanded"><a name="L213"></a><tt class="py-lineno">213</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_target</tt><tt class="py-op">.</tt><tt class="py-name">getvalue</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
-</div><a name="L214"></a><tt class="py-lineno">214</tt>  <tt class="py-line"> </tt>
-<a name="SimpleFileLikeXmlFileTestCase._parse_file"></a><div id="SimpleFileLikeXmlFileTestCase._parse_file-def"><a name="L215"></a><tt class="py-lineno">215</tt> <a class="py-toggle" href="#" id="SimpleFileLikeXmlFileTestCase._parse_file-toggle" onclick="return toggle('SimpleFileLikeXmlFileTestCase._parse_file');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html#_parse_file">_parse_file</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="SimpleFileLikeXmlFileTestCase._parse_file-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SimpleFileLikeXmlFileTestCase._parse_file-expanded"><a name="L216"></a><tt class="py-lineno">216</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_target</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="L217"></a><tt class="py-lineno">217</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-155" 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_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-155', 'etree', 'link-8');">etree</a></tt><tt class="py-op">.</tt><tt id="link-156" class="py-name"><a title="lxml.etree._ElementTree.parse
+lxml.tests.common_imports.HelperTestCase.parse" class="py-name" href="#" onclick="return doclink('link-145', 'parse', 'link-145');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-146" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-146', '_file', 'link-11');">_file</a></tt><tt class="py-op">)</tt> </tt>
+</div><a name="L204"></a><tt class="py-lineno">204</tt>  <tt class="py-line"> </tt>
+<a name="_XmlFileTestCaseBase.tearDown"></a><div id="_XmlFileTestCaseBase.tearDown-def"><a name="L205"></a><tt class="py-lineno">205</tt> <a class="py-toggle" href="#" id="_XmlFileTestCaseBase.tearDown-toggle" onclick="return toggle('_XmlFileTestCaseBase.tearDown');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#tearDown">tearDown</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="_XmlFileTestCaseBase.tearDown-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_XmlFileTestCaseBase.tearDown-expanded"><a name="L206"></a><tt class="py-lineno">206</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-147" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-147', '_file', 'link-11');">_file</a></tt><tt class="py-op">.</tt><tt id="link-148" class="py-name" targets="Method lxml.etree.TreeBuilder.close()=lxml.etree.TreeBuilder-class.html#close,Method lxml.etree._FeedParser.close()=lxml.etree._FeedParser-class.html#close"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-148', 'close', 'link-148');">close</a></tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L207"></a><tt class="py-lineno">207</tt>  <tt class="py-line"> </tt>
+<a name="_XmlFileTestCaseBase.assertXml"></a><div id="_XmlFileTestCaseBase.assertXml-def"><a name="L208"></a><tt class="py-lineno">208</tt> <a class="py-toggle" href="#" id="_XmlFileTestCaseBase.assertXml-toggle" onclick="return toggle('_XmlFileTestCaseBase.assertXml');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#assertXml">assertXml</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">expected</tt><tt class="py-op">,</tt> <tt class="py-param">encoding</tt><tt class="py-op">=</tt><tt class="py-string">'utf8'</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="_XmlFileTestCaseBase.assertXml-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="_XmlFileTestCaseBase.assertXml-expanded"><a name="L209"></a><tt class="py-lineno">209</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">self</tt><tt class="py-op">.</tt><tt id="link-149" class="py-name" targets="Method lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase._read_file()=lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html#_read_file,Method lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._read_file()=lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#_read_file"><a title="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase._read_file
+lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._read_file" class="py-name" href="#" onclick="return doclink('link-149', '_read_file', 'link-149');">_read_file</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 id="link-150" class="py-name"><a title="lxml.etree.DocInfo.encoding" class="py-name" href="#" onclick="return doclink('link-150', 'encoding', 'link-109');">encoding</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> <tt class="py-name">expected</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L210"></a><tt class="py-lineno">210</tt>  <tt class="py-line"> </tt>
+<a name="L211"></a><tt class="py-lineno">211</tt>  <tt class="py-line"> </tt>
+<a name="BytesIOXmlFileTestCase"></a><div id="BytesIOXmlFileTestCase-def"><a name="L212"></a><tt class="py-lineno">212</tt> <a class="py-toggle" href="#" id="BytesIOXmlFileTestCase-toggle" onclick="return toggle('BytesIOXmlFileTestCase');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.BytesIOXmlFileTestCase-class.html">BytesIOXmlFileTestCase</a><tt class="py-op">(</tt><tt class="py-base-class">_XmlFileTestCaseBase</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="BytesIOXmlFileTestCase-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="BytesIOXmlFileTestCase-expanded"><a name="BytesIOXmlFileTestCase.setUp"></a><div id="BytesIOXmlFileTestCase.setUp-def"><a name="L213"></a><tt class="py-lineno">213</tt> <a class="py-toggle" href="#" id="BytesIOXmlFileTestCase.setUp-toggle" onclick="return toggle('BytesIOXmlFileTestCase.setUp');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.BytesIOXmlFileTestCase-class.html#setUp">setUp</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="BytesIOXmlFileTestCase.setUp-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="BytesIOXmlFileTestCase.setUp-expanded"><a name="L214"></a><tt class="py-lineno">214</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-151" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-151', '_file', 'link-11');">_file</a></tt> <tt class="py-op">=</tt> <tt class="py-name">BytesIO</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L215"></a><tt class="py-lineno">215</tt>  <tt class="py-line"> </tt>
+<a name="TempXmlFileTestCase"></a><div id="TempXmlFileTestCase-def"><a name="L216"></a><tt class="py-lineno">216</tt> <a class="py-toggle" href="#" id="TempXmlFileTestCase-toggle" onclick="return toggle('TempXmlFileTestCase');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase-class.html">TempXmlFileTestCase</a><tt class="py-op">(</tt><tt class="py-base-class">_XmlFileTestCaseBase</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="TempXmlFileTestCase-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="TempXmlFileTestCase-expanded"><a name="TempXmlFileTestCase.setUp"></a><div id="TempXmlFileTestCase.setUp-def"><a name="L217"></a><tt class="py-lineno">217</tt> <a class="py-toggle" href="#" id="TempXmlFileTestCase.setUp-toggle" onclick="return toggle('TempXmlFileTestCase.setUp');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase-class.html#setUp">setUp</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="TempXmlFileTestCase.setUp-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="TempXmlFileTestCase.setUp-expanded"><a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-152" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-152', '_file', 'link-11');">_file</a></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>
+</div></div><a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line"> </tt>
+<a name="SimpleFileLikeXmlFileTestCase"></a><div id="SimpleFileLikeXmlFileTestCase-def"><a name="L220"></a><tt class="py-lineno">220</tt> <a class="py-toggle" href="#" id="SimpleFileLikeXmlFileTestCase-toggle" onclick="return toggle('SimpleFileLikeXmlFileTestCase');">-</a><tt class="py-line"><tt class="py-keyword">class</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html">SimpleFileLikeXmlFileTestCase</a><tt class="py-op">(</tt><tt class="py-base-class">_XmlFileTestCaseBase</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SimpleFileLikeXmlFileTestCase-collapsed" style="display:none;" pad="+++" indent="++++"></div><div id="SimpleFileLikeXmlFileTestCase-expanded"><a name="SimpleFileLikeXmlFileTestCase.SimpleFileLike"></a><div id="SimpleFileLikeXmlFileTestCase.SimpleFileLike-def"><a name="L221"></a><tt class="py-lineno">221</tt> <a class="py-toggle" href="#" id="SimpleFileLikeXmlFileTestCase.SimpleFileLike-toggle" onclick="return toggle('SimpleFileLikeXmlFileTestCase.SimpleFileLike');">-</a><tt class="py-line">    <tt class="py-keyword">class</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase.SimpleFileLike-class.html">SimpleFileLike</a><tt class="py-op">(</tt><tt class="py-base-class">object</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SimpleFileLikeXmlFileTestCase.SimpleFileLike-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SimpleFileLikeXmlFileTestCase.SimpleFileLike-expanded"><a name="SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__"></a><div id="SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__-def"><a name="L222"></a><tt class="py-lineno">222</tt> <a class="py-toggle" href="#" id="SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__-toggle" onclick="return toggle('SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__');">-</a><tt class="py-line">        <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase.SimpleFileLike-class.html#__init__">__init__</a><tt class="py-op">(</tt><tt class="py-param">self</tt><tt class="py-op">,</tt> <tt class="py-param">target</tt><tt class="py-op">)</tt><tt class="py-op">:</tt> </tt>
+</div><div id="SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__-collapsed" style="display:none;" pad="+++" indent="++++++++++++++++"></div><div id="SimpleFileLikeXmlFileTestCase.SimpleFileLike.__init__-expanded"><a name="L223"></a><tt class="py-lineno">223</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_target</tt> <tt class="py-op">=</tt> <tt id="link-153" 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-153', 'target', 'link-153');">target</a></tt> </tt>
+<a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-154" class="py-name"><a title="lxml.etree._ElementTree.write" class="py-name" href="#" onclick="return doclink('link-154', 'write', 'link-19');">write</a></tt> <tt class="py-op">=</tt> <tt id="link-155" class="py-name"><a title="lxml.etree._ProcessingInstruction.target" class="py-name" href="#" onclick="return doclink('link-155', 'target', 'link-153');">target</a></tt><tt class="py-op">.</tt><tt id="link-156" class="py-name"><a title="lxml.etree._ElementTree.write" class="py-name" href="#" onclick="return doclink('link-156', 'write', 'link-19');">write</a></tt> </tt>
+<a name="L225"></a><tt class="py-lineno">225</tt>  <tt class="py-line">            <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-157" class="py-name"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-157', 'close', 'link-148');">close</a></tt> <tt class="py-op">=</tt> <tt id="link-158" class="py-name"><a title="lxml.etree._ProcessingInstruction.target" class="py-name" href="#" onclick="return doclink('link-158', 'target', 'link-153');">target</a></tt><tt class="py-op">.</tt><tt id="link-159" class="py-name"><a title="lxml.etree.TreeBuilder.close
+lxml.etree._FeedParser.close" class="py-name" href="#" onclick="return doclink('link-159', 'close', 'link-148');">close</a></tt> </tt>
+</div></div><a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line"> </tt>
+<a name="SimpleFileLikeXmlFileTestCase.setUp"></a><div id="SimpleFileLikeXmlFileTestCase.setUp-def"><a name="L227"></a><tt class="py-lineno">227</tt> <a class="py-toggle" href="#" id="SimpleFileLikeXmlFileTestCase.setUp-toggle" onclick="return toggle('SimpleFileLikeXmlFileTestCase.setUp');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html#setUp">setUp</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="SimpleFileLikeXmlFileTestCase.setUp-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SimpleFileLikeXmlFileTestCase.setUp-expanded"><a name="L228"></a><tt class="py-lineno">228</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_target</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="L229"></a><tt class="py-lineno">229</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-160" class="py-name"><a title="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase._file" class="py-name" href="#" onclick="return doclink('link-160', '_file', 'link-11');">_file</a></tt> <tt class="py-op">=</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt id="link-161" class="py-name" targets="Class lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase.SimpleFileLike=lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase.SimpleFileLike-class.html"><a title="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase.SimpleFileLike" class="py-name" href="#" onclick="return doclink('link-161', 'SimpleFileLike', 'link-161');">SimpleFileLike</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_target</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line"> </tt>
+<a name="SimpleFileLikeXmlFileTestCase._read_file"></a><div id="SimpleFileLikeXmlFileTestCase._read_file-def"><a name="L231"></a><tt class="py-lineno">231</tt> <a class="py-toggle" href="#" id="SimpleFileLikeXmlFileTestCase._read_file-toggle" onclick="return toggle('SimpleFileLikeXmlFileTestCase._read_file');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html#_read_file">_read_file</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="SimpleFileLikeXmlFileTestCase._read_file-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SimpleFileLikeXmlFileTestCase._read_file-expanded"><a name="L232"></a><tt class="py-lineno">232</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_target</tt><tt class="py-op">.</tt><tt class="py-name">getvalue</tt><tt class="py-op">(</tt><tt class="py-op">)</tt> </tt>
+</div><a name="L233"></a><tt class="py-lineno">233</tt>  <tt class="py-line"> </tt>
+<a name="SimpleFileLikeXmlFileTestCase._parse_file"></a><div id="SimpleFileLikeXmlFileTestCase._parse_file-def"><a name="L234"></a><tt class="py-lineno">234</tt> <a class="py-toggle" href="#" id="SimpleFileLikeXmlFileTestCase._parse_file-toggle" onclick="return toggle('SimpleFileLikeXmlFileTestCase._parse_file');">-</a><tt class="py-line">    <tt class="py-keyword">def</tt> <a class="py-def-name" href="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html#_parse_file">_parse_file</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="SimpleFileLikeXmlFileTestCase._parse_file-collapsed" style="display:none;" pad="+++" indent="++++++++"></div><div id="SimpleFileLikeXmlFileTestCase._parse_file-expanded"><a name="L235"></a><tt class="py-lineno">235</tt>  <tt class="py-line">        <tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_target</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="L236"></a><tt class="py-lineno">236</tt>  <tt class="py-line">        <tt class="py-keyword">return</tt> <tt id="link-162" 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_io._IOTestCaseBase.etree" class="py-name" href="#" onclick="return doclink('link-162', 'etree', 'link-8');">etree</a></tt><tt class="py-op">.</tt><tt id="link-163" 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-156', 'parse', 'link-138');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_target</tt><tt class="py-op">)</tt> </tt>
-</div></div><a name="L218"></a><tt class="py-lineno">218</tt>  <tt class="py-line"> </tt>
-<a name="L219"></a><tt class="py-lineno">219</tt>  <tt class="py-line"> </tt>
-<a name="test_suite"></a><div id="test_suite-def"><a name="L220"></a><tt class="py-lineno">220</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_incremental_xmlfile-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="L221"></a><tt class="py-lineno">221</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="L222"></a><tt class="py-lineno">222</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-157" class="py-name" targets="Class lxml.tests.test_incremental_xmlfile.BytesIOXmlFileTestCase=lxml.tests.test_incremental_xmlfile.BytesIOXmlFileTestCase-class.html"><a title="lxml.tests.test_incremental_xmlfile.BytesIOXmlFileTestCase" class="py-name" href="#" onclick="return doclink('link-157', 'BytesIOXmlFileTestCase', 'link-157');">BytesIOXmlFileTestCase</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L223"></a><tt class="py-lineno">223</tt>  <tt class="py-line">                    <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-158" class="py-name" targets="Class lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase=lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase-class.html"><a title="lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase" class="py-name" href="#" onclick="return doclink('link-158', 'TempXmlFileTestCase', 'link-158');">TempXmlFileTestCase</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L224"></a><tt class="py-lineno">224</tt>  <tt class="py-line">                    <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-159" class="py-name" targets="Class lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase=lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html"><a title="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase" class="py-name" href="#" onclick="return doclink('link-159', 'SimpleFileLikeXmlFileTestCase', 'link-159');">SimpleFileLikeXmlFileTestCase</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
-<a name="L225"></a><tt class="py-lineno">225</tt>  <tt class="py-line">                    <tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
-<a name="L226"></a><tt class="py-lineno">226</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">suite</tt> </tt>
-</div><a name="L227"></a><tt class="py-lineno">227</tt>  <tt class="py-line"> </tt>
-<a name="L228"></a><tt class="py-lineno">228</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="L229"></a><tt class="py-lineno">229</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="L230"></a><tt class="py-lineno">230</tt>  <tt class="py-line"> </tt><script type="text/javascript">
+lxml.tests.common_imports.HelperTestCase.parse" class="py-name" href="#" onclick="return doclink('link-163', 'parse', 'link-145');">parse</a></tt><tt class="py-op">(</tt><tt class="py-name">self</tt><tt class="py-op">.</tt><tt class="py-name">_target</tt><tt class="py-op">)</tt> </tt>
+</div></div><a name="L237"></a><tt class="py-lineno">237</tt>  <tt class="py-line"> </tt>
+<a name="L238"></a><tt class="py-lineno">238</tt>  <tt class="py-line"> </tt>
+<a name="test_suite"></a><div id="test_suite-def"><a name="L239"></a><tt class="py-lineno">239</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_incremental_xmlfile-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="L240"></a><tt class="py-lineno">240</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="L241"></a><tt class="py-lineno">241</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-164" class="py-name" targets="Class lxml.tests.test_incremental_xmlfile.BytesIOXmlFileTestCase=lxml.tests.test_incremental_xmlfile.BytesIOXmlFileTestCase-class.html"><a title="lxml.tests.test_incremental_xmlfile.BytesIOXmlFileTestCase" class="py-name" href="#" onclick="return doclink('link-164', 'BytesIOXmlFileTestCase', 'link-164');">BytesIOXmlFileTestCase</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L242"></a><tt class="py-lineno">242</tt>  <tt class="py-line">                    <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-165" class="py-name" targets="Class lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase=lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase-class.html"><a title="lxml.tests.test_incremental_xmlfile.TempXmlFileTestCase" class="py-name" href="#" onclick="return doclink('link-165', 'TempXmlFileTestCase', 'link-165');">TempXmlFileTestCase</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L243"></a><tt class="py-lineno">243</tt>  <tt class="py-line">                    <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-166" class="py-name" targets="Class lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase=lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase-class.html"><a title="lxml.tests.test_incremental_xmlfile.SimpleFileLikeXmlFileTestCase" class="py-name" href="#" onclick="return doclink('link-166', 'SimpleFileLikeXmlFileTestCase', 'link-166');">SimpleFileLikeXmlFileTestCase</a></tt><tt class="py-op">)</tt><tt class="py-op">,</tt> </tt>
+<a name="L244"></a><tt class="py-lineno">244</tt>  <tt class="py-line">                    <tt class="py-op">]</tt><tt class="py-op">)</tt> </tt>
+<a name="L245"></a><tt class="py-lineno">245</tt>  <tt class="py-line">    <tt class="py-keyword">return</tt> <tt class="py-name">suite</tt> </tt>
+</div><a name="L246"></a><tt class="py-lineno">246</tt>  <tt class="py-line"> </tt>
+<a name="L247"></a><tt class="py-lineno">247</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="L248"></a><tt class="py-lineno">248</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="L249"></a><tt class="py-lineno">249</tt>  <tt class="py-line"> </tt><script type="text/javascript">
 <!--
 expandto(location.href);
 // -->
@@ -552,7 +580,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:30 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 646707d8272a3b3cf7504e6d176162370e0e9996..e075fecb2064907f7641767c6f470c0bd3f2d09a 100644 (file)
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#tearDown">tearDown</a></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_anonymous_namespace">test_anonymous_namespace</a></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_attribute">test_attribute</a></code>,
+      <code><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></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_comment">test_comment</a></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_default_namespace">test_default_namespace</a></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element">test_element</a></code>,
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:26 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 490fd3c563d37dcd5e2cecb2f20c137ad65ed030..f6a03622fd581ba47143c94b518ef76b9bd00963 100644 (file)
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#tearDown">tearDown</a></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_anonymous_namespace">test_anonymous_namespace</a></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_attribute">test_attribute</a></code>,
+      <code><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></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_comment">test_comment</a></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_default_namespace">test_default_namespace</a></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element">test_element</a></code>,
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index af21a395750b161a9119b3ee2846c237536ab1bc..ae43e6b4136ae2a5d9232ae786ab25c512640448 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3d31940ae4d8ab79ba9ab038fc4457be0d17f1ac..18166e13de8db66d7cc4cd8fc4bb47a5b54b593b 100644 (file)
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#tearDown">tearDown</a></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_anonymous_namespace">test_anonymous_namespace</a></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_attribute">test_attribute</a></code>,
+      <code><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></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_comment">test_comment</a></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_default_namespace">test_default_namespace</a></code>,
       <code><a href="lxml.tests.test_incremental_xmlfile._XmlFileTestCaseBase-class.html#test_element">test_element</a></code>,
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ad5064c668b3855c6847ac6e6e569d308cc40f26..72c0e8bb4b3a72befb49fd076a57689bcf30f5fe 100644 (file)
         </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_closing_out_of_order_in_error_case"></a><span class="summary-sig-name">test_closing_out_of_order_in_error_case</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td align="right" valign="top">
+            <span class="codelink"><a href="lxml.tests.test_incremental_xmlfile-pysrc.html#_XmlFileTestCaseBase.test_closing_out_of_order_in_error_case">source&nbsp;code</a></span>
+            
+          </td>
+        </tr>
+      </table>
+      
     </td>
   </tr>
 <tr class="private">
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7f219e3e8b1300243108a176436986e2a3c06531..dca0fb4575cada14afffdf9b245f508e59bfccb6 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f62cd6912e3bbcf5721aa9597457e8d8c0c9f9e2..bc3dcbecafb8e817d277a7af90b68ed87f91bd44 100644 (file)
@@ -929,7 +929,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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 98b77568829bbb1a810ae6c46d9d416f213854be..511c6c123433af102c2a64faee81db174199057b 100644 (file)
@@ -404,7 +404,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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index d5d88178880f589ca30f89f681e0353a5d0ce9bf..50b5dc890be993e52835de3fb1750c09011fa9a1 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f829f0446f3c7c9184263e235a22ef0900a9a0e0..5f9511715ab9b1fbd350e58f46ed1503d8306737 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9cbaf86927f125e2a6848b0c8093f55463d8d755..1ba3de03ca5c6f45a95cf46d272fbb0c6d355210 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2440cceff40539939f8b36d1f0601ba8497a5e3b..7aa1361956766fd78d93d4ce7867f38ac4115f50 100644 (file)
@@ -1600,7 +1600,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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 12956599f3851d0b9e062e930967005d56726400..f03c7df89df6308383e2ff934e9e1d4109fb04cd 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 396e56d9f3ab5b19bcb45ea237815d693d86370c..d6b92a236b7bdea57a8474053f39dd1a475cf17b 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b0fb2b19172d1feb8f64f93419b4630e2d1cfe3c..bdc4bb2bf5913056dd9a30effda3b939f90e78e9 100644 (file)
@@ -573,7 +573,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1c47c6d81303845bc27adde21dbeef7ccfa463f7..8a8abe4fa3daeb4130c3e213e5625d9c123223d9 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 551ac280058c105783b1f27dc15600ecf82a0e90..2b8de368354c321baab19be4b897d462a2af8e10 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 25d6bdd718231db93c3ff4083a28ec00026d904f..9656068982f66f41d9048bca956e6720c9539644 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 956e2e9d2313bed3906ed556ddf60ef1846e7a1b..48fbedc97985b0522fa3d6d03ae69592939288ac 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 38372033aed1c750ba3866fbfd975088d21c2b2c..898574d4ca08c8ac2a7f9c02fc37b5d0593c5db7 100644 (file)
@@ -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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a41ab99e4464e1d902c92e983772096a860d1463..99787a27073065a6fabc33e98c9bc535822b9a3f 100644 (file)
@@ -5605,7 +5605,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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 50b25bda76188d737acdc3000525f5c768fdfcdd..5a59217fb98e6e9712df1a288a36097cbff659ff 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2783080b8af21cbf7d3d7ee6d12bde6a36b4b618..71ae2183cb54ec68cc6f748a397e662c9e841476 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e0f1e7b8793a15d730b92d111c274ae3e4527fe3..b34ad8c907d3ac360ae99a2387841f36fcc4db94 100644 (file)
@@ -862,7 +862,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2ef4fa1de2a6cd827997e7d587d2ce38dfdf24f0..cd5fe31be3eabe9867dc763faac3e2158ec29eb0 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 Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2edc6a1606130ed8574169bc394cd087a25af93a..46bea418d56e7f18a3656c4f78c4e3aca068f933 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 1bb5cada22e7ce786631e78ac8bc40a85f657232..9af9de9c994aec591664fff05050c79536463064 100644 (file)
@@ -523,7 +523,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9055ff76d84b79ca26a652956df0cafd623c9013..6f42f0f2cbbbf8031d1970979521b1e9193c2829 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c5c713690e1ad3992975493ae1c61f5427785e14..6a2f0ffaba5b2e4dd459b97dbfcd6b0a081de07f 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 72908886af6d29cdecf86830cb6bbb47febc02d4..f57139ebbb52438cfb45041b801d1ab4e5d376e8 100644 (file)
@@ -647,7 +647,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 Thu Nov  7 17:44:13 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2d07e47102e14658657d766a990aa8e54a17c190..085fe1176d9be35d90c1e8e1f458287d5d43cd81 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a7743ef8905682afe145f041e9e273f170ed33b6..6b8549912d50e8981ec07821074636f576f046aa 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a931b07fb238471456ee322ca28b9a585705db3a..272e38acca21ed4465e7a8c32cec0814a037be1a 100644 (file)
@@ -324,7 +324,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index eb4fc47397915db8cdd494119c4d52bd7d045a3a..517cec3aa636893dc33ca4d624b5172b1eae5e05 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:09 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9131fe9e3e40c9e77a4080fe6d133268d3921768..8774c2b3fdf34c09e5c73cd9ca0be70506716d64 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5ff525bd7b043732008e8c1f30201cbe26816a93..00d4c70d0e7a2fd585d75d3253690b15e2bcf655 100644 (file)
@@ -1070,7 +1070,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:30 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6746428972f3f7020b833cb63362eee5ba2b308f..390c205abc044381a7e2014d3d2048cede9a3698 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 025be55c6a6f7ec0fe36cf960e210d2e4b7e1ee2..27ce40354d99f8f31c0eabd0676f8391813e2e94 100644 (file)
@@ -290,7 +290,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 61c4f57aacbed4ac800535cbb35463ea0656f26e..d97c2dd761fe39ddd425dbe6f1ae95e625c8d503 100644 (file)
@@ -290,7 +290,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index eed6c74ce9f0001d7e147465a1b13ab5146149db..13b52f1ee382de8d743eb15f861cbb44d210e5b2 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index edfc00d2cb41502c9b3f1d8514116e4c4066e266..e4832c155cdee31fa1bc34bd5fb3d6147d20b074 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 957891f57dac3e3c24246e51239ad0e8889a7823..db670f48ee09e0abeb0d364e2028a4d34542991f 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 3aea9bbe1b397645474e2b44134bbb369da68b14..e674a9059fc443cec1e978373c831cc4a36efd03 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4c7beff67bb1d414455806696df7f02104cb9d4c..8bc33a2fa9494b34f878f1bd84053c59fcc5d2a0 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c42fd43789e8fa1e87984eeea00af2aa20c8f2d7..435cecf006032ece55d3c12b8416b80ac4115d81 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0fa5b3320d8e2f8e97aaaab2d4708898edccb8df..e15e85eaf684dd9617249bbb55f36c81deab46fe 100644 (file)
@@ -416,7 +416,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 Thu Nov  7 17:44:12 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:28 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 4fce3da65dfb6165ec61bec133b3ae3e8062aaec..6da197f1cdb888b5009912b9f0c9853bb2ac62b9 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f653011cf2c9c010fb13456a2f9fb1cf69eba22c..33268ce72dc87b68c27774e3dee6ac9f5aa4c138 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 38821c93a036e54382d4c2c98fef32e42130a429..34cfbd5bc3acb493d6f8e934ec11439eff66ba1f 100644 (file)
@@ -1058,7 +1058,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 38169d2818280d7367253676669e9c3b0fe6d2ad..56e000678df6dd7248f4fc6836461f0c0e03cd66 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 74f0fd2aa897a9b88f1e40e00b94215bbf1c3951..5fe4b3c75c72ee55cea816b218b412add8154ba6 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f320d9ffb90e7a84d0ec153e60909fbfe3ebf375..0a608a36c0184f52a30579905caa714dd17bd768 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b4710395f6fb9166caeb31a6593cc6d83409e211..a4de04408b2d7a24a88f725ac3feef710264be4a 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 0x3a3<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 0x4f1<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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index bf2625c764dca8e1734cfa6365c8a72d3d43e164..fb03ae709089964f8904e9f11fbdb1bd6e5caeb3 100644 (file)
@@ -1912,7 +1912,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 Thu Nov  7 17:44:11 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:29 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 55c4047bdc550f7bd664b5111c579fd1ebbc564a..d1b331f955150f3166ea1a3e9bfffa6492a38423 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b6ace361bfbceeffb933ad3cbec3f78ff8f2145d..b2377f5ce3ca9b74be3f2c6a9b148d4ef74335e0 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index e94906813c0e7604250a125a9ae486c66ca3531b..aec445dfcaa10981f7f8a56b0f4ef882fb86c8ee 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 740516e1bee83ca39ae0ab9862be38222dd85c65..df9b428b8804ddd71268631f77b855682a1a1d5c 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9ab8464adcb97c15e674d0ab423ea8a076d32d27..ec66f9b83565774200a59d59ccf88c10fab85d9a 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 48f6904a029b1dd44d7ca3720eb0ee62e1d5b5c5..ecd7da461bfdd53f29233bcb64e8707387c385be 100644 (file)
@@ -3977,7 +3977,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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 0e7169173d5bc8609fec556e3eab48def2e4511c..33f45ca21b40437b71cde5583efd126e48247c7d 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 021ba998d802e0151c18d8f995320e81b437567c..2f56fca9bb38a632f396bef48cbc9d71dbc0dc8a 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index b01bfc6fc5da0316d124ee8bcb05bc7a4ed11038..205404a45455975592398003502a1e4ab103c3e3 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ac94cb061d1bc6ad94990e76bb5a3cd153cf63dd..4e17252203bcbc199d2d9ab798e22ea39b20dce0 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 60c7a3f3a39ef4df648e503353f4b656bd473d80..67e727e5cdb954445aeb1c73ddc1095a78b6a317 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 42d32e23f2a2621431f476ce0d9f2983bb5a99aa..0005f2c2265225a1e3aa65c2bcb4af2f2e56d0f1 100644 (file)
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 715889b2ad0eaa1589075b725c8f58381f465b4d..45df7abd08b3fa1c8ee39780884a8db9a5efbb34 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 Thu Nov  7 17:44:11 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 9ded73ac1b33115b17dddf4f683d265361c58268..70cada8dd930ea7133aa6586c49e7e64d20ed231 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index c7cf6fbb58d3aa88d1371d774d0f2fa3883d1459..d830e3006361678681aa02d5b75804d8882e3a24 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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index ece418ea39769fe2794836263f7ca65ce03edf3e..5ab4af7835c159c52e78ea588b80309a84bdc271 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 84cfe77aa8940d65d0ad40c1aa772840b823752b..61540192d1e418cc6ed369597c56e60a0c624b55 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 0x2801848&gt;,
- 'text': &lt;function _serialize_text at 0x28018c0&gt;,
- 'xml': &lt;function _serialize_xml at 0x28017d0&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 0x2801848&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 0x405d8c0&gt;,
+ 'text': &lt;function _serialize_text at 0x405d938&gt;,
+ 'xml': &lt;function _serialize_xml at 0x405d848&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 0x405d8c0&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 0x2801848&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 0x28018c0&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 0x28017d0&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 0x405d8c0&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 0x405d938&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 0x405d848&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 Thu Nov  7 17:44:08 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:25 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 987c5ee402ec507341d844577ccf08a029dc4057..07bbc467aeb0384d977300d725d1375ed972b048 100644 (file)
@@ -2999,7 +2999,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 Thu Nov  7 17:44:13 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:30 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 40c38b2d9ad9184e2d6b3274b79bfb0bf7418eff..bdf1e2c3492e3d7d3c3ca1d16eeeed36caac8bca 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 7b330641f05021eb7bd0ba98444ad827ad1bd892..239919c808df77be28d90766a9c6ab59932ce3dc 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 8b52e7f5e5f0afa8f21381ba2dab083142f8ab94..9ef30a65868636a910b3c5d21d52333801d8f06e 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index a65759b65e0f29c5fbf7ea16f6515f264b9f09c1..a2ef30c9aeb6e06ded77315a05ebd8c1e3d53827 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 2d28602fbb3ae1ff534b6fb18dac802ffad38142..3ea734a10f820b20e687be7cd90543a28e02f032 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index f6d8b36853352547e1d7adfce207a90d61ab598e..7dce7ce2bcc98ee16ab6e1771456ec6edfb99793 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 259ac7af29e4faecc7ee923a0e66208c541b554c..5208ed9349588b91280f89c2f35c5334f7ab1060 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 6d8ef195d9cce2b6665ab8c16b84028f76b981fb..b619c95cd0ffb6e424ab48531d1ab298f6bc49d7 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 Thu Nov  7 17:44:10 2013
+    Generated by Epydoc 3.0.1 on Thu Jan  2 15:55:27 2014
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
index 5c2e69a1dda67ffe739ff72eba6300d666b672d0..7953363b5ace36c6287a6351daacdfb433bce8cc 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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
@@ -310,7 +310,7 @@ installed using <tt class="docutils literal">dpkg <span class="pre">-i</span></t
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index c7eeb2292bed60d1bd09a0a2a06c5245ebd83e71..b0bb7085a27c704494648b33c456762f7174c8bc 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
diff --git a/doc/html/changes-3.2.4.html b/doc/html/changes-3.2.4.html
deleted file mode 100644 (file)
index 160d82b..0000000
+++ /dev/null
@@ -1,2589 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-<meta name="generator" content="Docutils 0.10: http://docutils.sourceforge.net/" />
-<title>lxml changelog</title>
-<link rel="stylesheet" href="style.css" type="text/css" />
-</head>
-<body>
-<div class="document" id="lxml-changelog">
-<h1 class="title">lxml changelog</h1>
-
-<div class="section" id="id1">
-<h1>3.2.4 (2013-11-07)</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>Memory leak when creating an XPath evaluator in a thread.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1228881">LP#1228881</a>: <tt class="docutils literal">repr(XSLTAccessControl)</tt> failed in Python 3.</li>
-<li>Raise <tt class="docutils literal">ValueError</tt> when trying to append an Element to itself or
-to one of its own descendants.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1206077">LP#1206077</a>: htmldiff discarded whitespace from the output.</li>
-<li>Compressed plain-text serialisation to file-like objects was broken.</li>
-</ul>
-</div>
-<div class="section" id="other-changes">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id2">
-<h1>3.2.3 (2013-07-28)</h1>
-<div class="section" id="id3">
-<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="id4">
-<h1>3.2.2 (2013-07-28)</h1>
-<div class="section" id="id5">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id6">
-<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="id7">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Return values of user provided element class lookup methods are now
-validated against the type of the XML node they represent to prevent
-API class mismatches.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id8">
-<h1>3.2.1 (2013-05-11)</h1>
-<div class="section" id="id9">
-<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
-extension elements have gained two new boolean options <tt class="docutils literal">elements_only</tt>
-and <tt class="docutils literal">remove_blank_text</tt> that discard either all strings or whitespace-only
-strings from the result list.</li>
-</ul>
-</div>
-<div class="section" id="id10">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>When moving Elements to another tree, the namespace cleanup mechanism
-no longer drops namespace prefixes from attributes for which it finds
-a default namespace declaration, to prevent them from appearing as
-unnamespaced attributes after serialisation.</li>
-<li>Returning non-type objects from a custom class lookup method could lead
-to a crash.</li>
-<li>Instantiating and using subtypes of Comments and ProcessingInstructions
-crashed.</li>
-</ul>
-</div>
-<div class="section" id="id11">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id12">
-<h1>3.2.0 (2013-04-28)</h1>
-<div class="section" id="id13">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id14">
-<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
-parsing functions in <tt class="docutils literal">lxml.html</tt>.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/599318">LP#599318</a>: The string parsing functions in <tt class="docutils literal">lxml.html</tt> are more robust
-in the face of uncommon HTML content like framesets or missing body tags.
-Patch by Stefan Seelmann.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/712941">LP#712941</a>: I/O errors while trying to access files with paths that contain
-non-ASCII characters could raise <tt class="docutils literal">UnicodeDecodeError</tt> instead of properly
-reporting the <tt class="docutils literal">IOError</tt>.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/673205">LP#673205</a>: Parsing from in-memory strings disabled network access in the
-default parser and made subsequent attempts to parse from a URL fail.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/971754">LP#971754</a>: lxml.html.clean appends 'nofollow' to 'rel' attributes instead
-of overwriting the current value.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/715687">LP#715687</a>: lxml.html.clean no longer discards scripts that are explicitly
-allowed by the user provided whitelist.  Patch by Christine Koppelt.</li>
-</ul>
-</div>
-<div class="section" id="id15">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id16">
-<h1>3.1.2 (2013-04-12)</h1>
-<div class="section" id="id17">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id18">
-<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
-the sax bridge (i.e. the <tt class="docutils literal">handler.startElement()</tt> method) failed
-with a <tt class="docutils literal">TypeError</tt>.  Patch by Mike Bayer.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1123074">LP#1123074</a>: Fix serialisation error in XSLT output when converting
-the result tree to a Unicode string.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/105">GH#105</a>: Replace illegal usage of <tt class="docutils literal">xmlBufLength()</tt> in libxml2 2.9.0
-by properly exported API function <tt class="docutils literal">xmlBufUse()</tt>.</li>
-</ul>
-</div>
-<div class="section" id="id19">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id20">
-<h1>3.1.1 (2013-03-29)</h1>
-<div class="section" id="id21">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id22">
-<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
-an AttributeError in Py3.</li>
-<li>Illegal memory access during cleanup in incremental xmlfile writer.</li>
-</ul>
-</div>
-<div class="section" id="id23">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The externally useless class <tt class="docutils literal">lxml.etree._BaseParser</tt> was removed
-from the module dict.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id24">
-<h1>3.1.0 (2013-02-10)</h1>
-<div class="section" id="id25">
-<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="id26">
-<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
-a copy of the attributes as a plain Python dict.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/95">GH#95</a>: When used with namespace prefixes, the  <tt class="docutils literal"><span class="pre">el.find*()</span></tt> methods
-always used the first namespace mapping that was provided for each
-path expression instead of using the one that was actually passed
-in for the current run.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1092521">LP#1092521</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/91">GH#91</a>: Fix undefined C symbol in Python runtimes compiled
-without threading support.  Patch by Ulrich Seidl.</li>
-</ul>
-</div>
-<div class="section" id="id27">
-<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="id28">
-<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
-makes the API always return Unicode strings for names and text
-instead of byte strings for plain ASCII content.</li>
-<li>New incremental XML file writing API <tt class="docutils literal">etree.xmlfile()</tt>.</li>
-<li>E factory in lxml.objectify is callable to simplify the creation of
-tags with non-identifier names without having to resort to getattr().</li>
-</ul>
-</div>
-<div class="section" id="id29">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>When starting from a non-namespaced element in lxml.objectify, searching
-for a child without explicitly specifying a namespace incorrectly found
-namespaced elements with the requested local name, instead of restricting
-the search to non-namespaced children.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/85">GH#85</a>: Deprecation warnings were fixed for Python 3.x.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/33">GH#33</a>: lxml.html.fromstring() failed to accept bytes input in Py3.</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="id30">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The externally useless class <tt class="docutils literal">_ObjectifyElementMakerCaller</tt> was
-removed from the module API of lxml.objectify.</li>
-<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1075622">LP#1075622</a>: lxml.builder is faster for adding text to elements with
-many children.  Patch by Anders Hammarquist.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id31">
-<h1>3.0.2 (2012-12-14)</h1>
-<div class="section" id="id32">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id33">
-<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="id34">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id35">
-<h1>3.0.1 (2012-10-14)</h1>
-<div class="section" id="id36">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id37">
-<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
-in PyPy without proper cleanup.</li>
-<li><a class="reference external" href="https://github.com/lxml/lxml/issues/71">GH#71</a>: Failure to work with libxml2 2.6.x.</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="id38">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id39">
-<h1>3.0 (2012-10-08)</h1>
-<div class="section" id="id40">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id41">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>End-of-file handling was incorrect in iterparse() when reading from
-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="id42">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The build no longer uses Cython by default unless the generated C files
-are missing.  To use Cython, pass the option &quot;--with-cython&quot;.  To ignore
-the fatal build error when Cython is required but not available (e.g. to
-run special setup.py commands that do not actually run a build), pass
-&quot;--without-cython&quot;.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta1-2012-09-26">
-<h1>3.0beta1 (2012-09-26)</h1>
-<div class="section" id="id43">
-<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="id44">
-<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="id45">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The code was adapted to work with the upcoming libxml2 2.9.0 release.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="alpha2-2012-08-23">
-<h1>3.0alpha2 (2012-08-23)</h1>
-<div class="section" id="id46">
-<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
-<tt class="docutils literal"><span class="pre">&quot;{*}name&quot;</span></tt> to search for elements with a given local name in any
-namespace. With this addition, all combinations of wildcards now work
-as expected:
-<tt class="docutils literal">&quot;{ns}name&quot;</tt>, <tt class="docutils literal"><span class="pre">&quot;{}name&quot;</span></tt>, <tt class="docutils literal"><span class="pre">&quot;{*}name&quot;</span></tt>, <tt class="docutils literal"><span class="pre">&quot;{ns}*&quot;</span></tt>, <tt class="docutils literal"><span class="pre">&quot;{}*&quot;</span></tt>
-and <tt class="docutils literal"><span class="pre">&quot;{*}*&quot;</span></tt>.  Note that <tt class="docutils literal">&quot;name&quot;</tt> is equivalent to <tt class="docutils literal"><span class="pre">&quot;{}name&quot;</span></tt>,
-but <tt class="docutils literal">&quot;*&quot;</tt> is <tt class="docutils literal"><span class="pre">&quot;{*}*&quot;</span></tt>.
-The same change applies to the <tt class="docutils literal">.getiterator()</tt>, <tt class="docutils literal">.itersiblings()</tt>,
-<tt class="docutils literal">.iterancestors()</tt>, <tt class="docutils literal">.iterdescendants()</tt>, <tt class="docutils literal">.iterchildren()</tt>
-and <tt class="docutils literal">.itertext()</tt> methods;the <tt class="docutils literal">strip_attributes()</tt>,
-<tt class="docutils literal">strip_elements()</tt> and <tt class="docutils literal">strip_tags()</tt> functions as well as the
-<tt class="docutils literal">iterparse()</tt> class.  Patch by Simon Sapin.</li>
-<li>C14N allows specifying the inclusive prefixes to be promoted
-to top-level during exclusive serialisation.</li>
-</ul>
-</div>
-<div class="section" id="id47">
-<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="id48">
-<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="id49">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Initial support for building in PyPy (through cpyext).</li>
-<li>DTD objects gained an API that allows read access to their
-declarations.</li>
-<li><tt class="docutils literal">xpathgrep.py</tt> gained support for parsing line-by-line (e.g.
-from grep output) and for surrounding the output with a new root
-tag.</li>
-<li><tt class="docutils literal"><span class="pre">E-factory</span></tt> in <tt class="docutils literal">lxml.builder</tt> accepts subtypes of known data
-types (such as string subtypes) when building elements around them.</li>
-<li>Tree iteration and <tt class="docutils literal">iterparse()</tt> with a selective <tt class="docutils literal">tag</tt>
-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="id50">
-<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
-internally, which makes them faster in many cases (especially when
-short circuiting after a single or couple of elements) and fixes
-some behavioural differences compared to <tt class="docutils literal">lxml.etree</tt>.  Note that
-this means that they no longer support arbitrary XPath expressions
-but only the subset that the <tt class="docutils literal">ElementPath</tt> language supports.
-The previous implementation was also redundant with the normal
-XPath support, which can be used as a replacement.</li>
-<li><tt class="docutils literal"><span class="pre">el.find('*')</span></tt> could accidentally return a comment or processing
-instruction that happened to be in the wrong spot.  (Same for the
-other <tt class="docutils literal"><span class="pre">.find*()</span></tt> methods.)</li>
-<li>The error logging is less intrusive and avoids a global setup where
-possible.</li>
-<li>Fixed undefined names in html5lib parser.</li>
-<li><tt class="docutils literal">xpathgrep.py</tt> did not work in Python 3.</li>
-<li><tt class="docutils literal">Element.attrib.update()</tt> did not accept an <tt class="docutils literal">attrib</tt> of
-another Element as parameter.</li>
-<li>For subtypes of <tt class="docutils literal">ElementBase</tt> that make the <tt class="docutils literal">.text</tt> or <tt class="docutils literal">.tail</tt>
-properties immutable (as in objectify, for example), inserting text
-when creating Elements through the E-Factory feature of the class
-constructor would fail with an exception, stating that the text
-cannot be modified.</li>
-</ul>
-</div>
-<div class="section" id="id51">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The code base was overhauled to properly use 'const' where the API
-of libxml2 and libxslt requests it.  This also has an impact on the
-public C-API of lxml itself, as defined in <tt class="docutils literal">etreepublic.pxd</tt>, as
-well as the provided declarations in the <tt class="docutils literal">lxml/includes/</tt> directory.
-Code that uses these declarations may have to be adapted.  On the
-plus side, this fixes several C compiler warnings, also for user
-code, thus making it easier to spot real problems again.</li>
-<li>The functionality of &quot;lxml.cssselect&quot; was moved into a separate PyPI
-package called &quot;cssselect&quot;.  To continue using it, you must install
-that package separately.  The &quot;lxml.cssselect&quot; module is still
-available and provides the same interface, provided the &quot;cssselect&quot;
-package can be imported at runtime.</li>
-<li>Element attributes passed in as an <tt class="docutils literal">attrib</tt> dict or as keyword
-arguments are now sorted by (namespaced) name before being created
-to make their order predictable for serialisation and iteration.
-Note that adding or deleting attributes afterwards does not take
-that order into account, i.e. setting a new attribute appends it
-after the existing ones.</li>
-<li>Several classes that are for internal use only were removed
-from the <tt class="docutils literal">lxml.etree</tt> module dict:
-<tt class="docutils literal">_InputDocument, _ResolverRegistry, _ResolverContext, _BaseContext,
-_ExsltRegExp, _IterparseContext, _TempStore, _ExceptionContext,
-__ContentOnlyElement, _AttribIterator, _NamespaceRegistry,
-_ClassNamespaceRegistry, _FunctionNamespaceRegistry,
-_XPathFunctionNamespaceRegistry, _ParserDictionaryContext,
-_FileReaderContext, _ParserContext, _PythonSaxParserTarget,
-_TargetParserContext, _ReadOnlyProxy, _ReadOnlyPIProxy,
-_ReadOnlyEntityProxy, _ReadOnlyElementProxy, _OpaqueNodeWrapper,
-_OpaqueDocumentWrapper, _ModifyContentOnlyProxy,
-_ModifyContentOnlyPIProxy, _ModifyContentOnlyEntityProxy,
-_AppendOnlyElementProxy, _SaxParserContext, _FilelikeWriter,
-_ParserSchemaValidationContext, _XPathContext,
-_XSLTResolverContext, _XSLTContext, _XSLTQuotedStringParam</tt></li>
-<li>Several internal classes can no longer be inherited from:
-<tt class="docutils literal">_InputDocument, _ResolverRegistry, _ExsltRegExp, _ElementUnicodeResult,
-_IterparseContext, _TempStore, _AttribIterator, _ClassNamespaceRegistry,
-_XPathFunctionNamespaceRegistry, _ParserDictionaryContext,
-_FileReaderContext, _PythonSaxParserTarget, _TargetParserContext,
-_ReadOnlyPIProxy, _ReadOnlyEntityProxy, _OpaqueDocumentWrapper,
-_ModifyContentOnlyPIProxy, _ModifyContentOnlyEntityProxy,
-_AppendOnlyElementProxy, _FilelikeWriter, _ParserSchemaValidationContext,
-_XPathContext, _XSLTResolverContext, _XSLTContext, _XSLTQuotedStringParam,
-_XSLTResultTree, _XSLTProcessingInstruction</tt></li>
-</ul>
-</div>
-</div>
-<div class="section" id="id52">
-<h1>2.3.6 (2012-09-28)</h1>
-<div class="section" id="id53">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id54">
-<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="id55">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id56">
-<h1>2.3.5 (2012-07-31)</h1>
-<div class="section" id="id57">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id58">
-<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="id59">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id60">
-<h1>2.3.4 (2012-03-26)</h1>
-<div class="section" id="id61">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id62">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when building an nsmap (Element property) with empty
-namespace URIs.</li>
-<li>Crash due to race condition when errors (or user messages) occur
-during threaded XSLT processing.</li>
-<li>XSLT stylesheet compilation could ignore compilation errors.</li>
-</ul>
-</div>
-<div class="section" id="id63">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id64">
-<h1>2.3.3 (2012-01-04)</h1>
-<div class="section" id="id65">
-<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="id66">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Fixed a crash when using <tt class="docutils literal">iterparse()</tt> for HTML parsing and
-requesting start events.</li>
-<li>Fixed parsing of more selectors in cssselect.  Whitespace before
-pseudo-elements and pseudo-classes is significant as it is a
-descendant combinator.
-&quot;E :pseudo&quot; should parse the same as &quot;E *:pseudo&quot;, not &quot;E:pseudo&quot;.
-Patch by Simon Sapin.</li>
-<li>lxml.html.diff no longer raises an exception when hitting
-'img' tags without 'src' attribute.</li>
-</ul>
-</div>
-<div class="section" id="id67">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id68">
-<h1>2.3.2 (2011-11-11)</h1>
-<div class="section" id="id69">
-<h2>Features added</h2>
-<ul class="simple">
-<li><tt class="docutils literal">lxml.objectify.deannotate()</tt> has a new boolean option
-<tt class="docutils literal">cleanup_namespaces</tt> to remove the objectify namespace
-declarations (and generally clean up the namespace declarations)
-after removing the type annotations.</li>
-<li><tt class="docutils literal">lxml.objectify</tt> gained its own <tt class="docutils literal">SubElement()</tt> function as a
-copy of <tt class="docutils literal">etree.SubElement</tt> to avoid an otherwise redundant import
-of <tt class="docutils literal">lxml.etree</tt> on the user side.</li>
-</ul>
-</div>
-<div class="section" id="id70">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Fixed the &quot;descendant&quot; bug in cssselect a second time (after a first
-fix in lxml 2.3.1).  The previous change resulted in a serious
-performance regression for the XPath based evaluation of the
-translated expression.  Note that this breaks the usage of some of
-the generated XPath expressions as XSLT location paths that
-previously worked in 2.3.1.</li>
-<li>Fixed parsing of some selectors in cssselect. Whitespace after combinators
-&quot;&gt;&quot;, &quot;+&quot; and &quot;~&quot; is now correctly ignored. Previously is was parsed as
-a descendant combinator. For example, &quot;div&gt; .foo&quot; was parsed the same as
-&quot;div&gt;* .foo&quot; instead of &quot;div&gt;.foo&quot;. Patch by Simon Sapin.</li>
-</ul>
-</div>
-<div class="section" id="id71">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id72">
-<h1>2.3.1 (2011-09-25)</h1>
-<div class="section" id="id73">
-<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
-tags and their content (i.e. their whole subtree).</li>
-<li><tt class="docutils literal">pi.get()</tt> and <tt class="docutils literal">pi.attrib</tt> on processing instructions to parse
-pseudo-attributes from the text content of processing instructions.</li>
-<li><tt class="docutils literal">lxml.get_include()</tt> returns a list of include paths that can be
-used to compile external C code against lxml.etree.  This is
-specifically required for statically linked lxml builds when code
-needs to compile against the exact same header file versions as lxml
-itself.</li>
-<li><tt class="docutils literal">Resolver.resolve_file()</tt> takes an additional option
-<tt class="docutils literal">close_file</tt> that configures if the file(-like) object will be
-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="id74">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>HTML cleaning didn't remove 'data:' links.</li>
-<li>The html5lib parser integration now uses the 'official'
-implementation in html5lib itself, which makes it work with newer
-releases of the library.</li>
-<li>In <tt class="docutils literal">lxml.sax</tt>, <tt class="docutils literal">endElementNS()</tt> could incorrectly reject a plain
-tag name when the corresponding start event inferred the same plain
-tag name to be in the default namespace.</li>
-<li>When an open file-like object is passed into <tt class="docutils literal">parse()</tt> or
-<tt class="docutils literal">iterparse()</tt>, the parser will no longer close it after use.  This
-reverts a change in lxml 2.3 where all files would be closed.  It is
-the users responsibility to properly close the file(-like) object,
-also in error cases.</li>
-<li>Assertion error in lxml.html.cleaner when discarding top-level elements.</li>
-<li>In lxml.cssselect, use the xpath 'A//B' (short for
-'A/descendant-or-self::node()/B') instead of 'A/descendant::B' for
-the css descendant selector ('A B').  This makes a few edge cases
-like <tt class="docutils literal">&quot;div <span class="pre">*:last-child&quot;</span></tt> consistent with the selector behavior in
-WebKit and Firefox, and makes more css expressions valid location
-paths (for use in xsl:template match).</li>
-<li>In lxml.html, non-selected <tt class="docutils literal">&lt;option&gt;</tt> tags no longer show up in the
-collected form values.</li>
-<li>Adding/removing <tt class="docutils literal">&lt;option&gt;</tt> values to/from a multiple select form
-field properly selects them and unselects them.</li>
-</ul>
-</div>
-<div class="section" id="id75">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Static builds can specify the download directory with the
-<tt class="docutils literal"><span class="pre">--download-dir</span></tt> option.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id76">
-<h1>2.3 (2011-02-06)</h1>
-<div class="section" id="id77">
-<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="id78">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>When finished reading from a file-like object, the parser
-immediately calls its <tt class="docutils literal">.close()</tt> method.</li>
-<li>When finished parsing, <tt class="docutils literal">iterparse()</tt> immediately closes the input
-file.</li>
-<li>Work-around for libxml2 bug that can leave the HTML parser in a
-non-functional state after parsing a severly broken document (fixed
-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="id79">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Some public functions in the Cython-level C-API have more explicit
-return types.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta1-2010-09-06">
-<h1>2.3beta1 (2010-09-06)</h1>
-<div class="section" id="id80">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id81">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash in newer libxml2 versions when moving elements between
-documents that had attributes on replaced XInclude nodes.</li>
-<li><tt class="docutils literal">XMLID()</tt> function was missing the optional <tt class="docutils literal">parser</tt> and
-<tt class="docutils literal">base_url</tt> parameters.</li>
-<li>Searching for wildcard tags in <tt class="docutils literal">iterparse()</tt> was broken in Py3.</li>
-<li><tt class="docutils literal">lxml.html.open_in_browser()</tt> didn't work in Python 3 due to the
-use of os.tempnam.  It now takes an optional 'encoding' parameter.</li>
-</ul>
-</div>
-<div class="section" id="id82">
-<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="id83">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id84">
-<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="id85">
-<h2>Other changes</h2>
-<ul class="simple">
-<li><tt class="docutils literal">repr()</tt> of Element objects shows the hex ID with leading 0x
-(following ElementTree 1.3).</li>
-</ul>
-</div>
-</div>
-<div class="section" id="alpha1-2010-06-19">
-<h1>2.3alpha1 (2010-06-19)</h1>
-<div class="section" id="id86">
-<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>
-to pass a prefix-to-namespace mapping for the selector.</li>
-<li>New function <tt class="docutils literal">lxml.etree.register_namespace(prefix, uri)</tt> that
-globally registers a namespace prefix for a namespace that newly
-created Elements in that namespace will use automatically.  Follows
-ElementTree 1.3.</li>
-<li>Support 'unicode' string name as encoding parameter in
-<tt class="docutils literal">tostring()</tt>, following ElementTree 1.3.</li>
-<li>Support 'c14n' serialisation method in <tt class="docutils literal">ElementTree.write()</tt> and
-<tt class="docutils literal">tostring()</tt>, following ElementTree 1.3.</li>
-<li>The ElementPath expression syntax (<tt class="docutils literal"><span class="pre">el.find*()</span></tt>) was extended to
-match the upcoming ElementTree 1.3 that will ship in the standard
-library of Python 3.2/2.7.  This includes extended support for
-predicates as well as namespace prefixes (as known from XPath).</li>
-<li>During regular XPath evaluation, various ESXLT functions are
-available within their namespace when using libxslt 1.1.26 or later.</li>
-<li>Support passing a readily configured logger instance into
-<tt class="docutils literal">PyErrorLog</tt>, instead of a logger name.</li>
-<li>On serialisation, the new <tt class="docutils literal">doctype</tt> parameter can be used to
-override the DOCTYPE (internal subset) of the document.</li>
-<li>New parameter <tt class="docutils literal">output_parent</tt> to <tt class="docutils literal">XSLTExtension.apply_templates()</tt>
-to append the resulting content directly to an output element.</li>
-<li><tt class="docutils literal">XSLTExtension.process_children()</tt> to process the content of the
-XSLT extension element itself.</li>
-<li>ISO-Schematron support based on the de-facto Schematron reference
-'skeleton implementation'.</li>
-<li>XSLT objects now take XPath object as <tt class="docutils literal">__call__</tt> stylesheet
-parameters.</li>
-<li>Enable path caching in ElementPath (<tt class="docutils literal"><span class="pre">el.find*()</span></tt>) to avoid parsing
-overhead.</li>
-<li>Setting the value of a namespaced attribute always uses a prefixed
-namespace instead of the default namespace even if both declare the
-same namespace URI.  This avoids serialisation problems when an
-attribute from a default namespace is set on an element from a
-different namespace.</li>
-<li>XSLT extension elements: support for XSLT context nodes other than
-elements: document root, comments, processing instructions.</li>
-<li>Support for strings (in addition to Elements) in node-sets returned
-by extension functions.</li>
-<li>Forms that lack an <tt class="docutils literal">action</tt> attribute default to the base URL of
-the document on submit.</li>
-<li>XPath attribute result strings have an <tt class="docutils literal">attrname</tt> property.</li>
-<li>Namespace URIs get validated against RFC 3986 at the API level
-(required by the XML namespace specification).</li>
-<li>Target parsers show their target object in the <tt class="docutils literal">.target</tt> property
-(compatible with ElementTree).</li>
-</ul>
-</div>
-<div class="section" id="id87">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>API is hardened against invalid proxy instances to prevent crashes
-due to incorrectly instantiated Element instances.</li>
-<li>Prevent crash when instantiating <tt class="docutils literal">CommentBase</tt> and friends.</li>
-<li>Export ElementTree compatible XML parser class as
-<tt class="docutils literal">XMLTreeBuilder</tt>, as it is called in ET 1.2.</li>
-<li>ObjectifiedDataElements in lxml.objectify were not hashable.  They
-now use the hash value of the underlying Python value (string,
-number, etc.) to which they compare equal.</li>
-<li>Parsing broken fragments in lxml.html could fail if the fragment
-contained an orphaned closing '&lt;/div&gt;' tag.</li>
-<li>Using XSLT extension elements around the root of the output document
-crashed.</li>
-<li><tt class="docutils literal">lxml.cssselect</tt> did not distinguish between <tt class="docutils literal"><span class="pre">x[attr=&quot;val&quot;]</span></tt> and
-<tt class="docutils literal">x <span class="pre">[attr=&quot;val&quot;]</span></tt> (with a space).  The latter now matches the
-attribute independent of the element.</li>
-<li>Rewriting multiple links inside of HTML text content could end up
-replacing unrelated content as replacements could impact the
-reported position of subsequent matches.  Modifications are now
-simplified by letting the <tt class="docutils literal">iterlinks()</tt> generator in <tt class="docutils literal">lxml.html</tt>
-return links in reversed order if they appear inside the same text
-node.  Thus, replacements and link-internal modifications no longer
-change the position of links reported afterwards.</li>
-<li>The <tt class="docutils literal">.value</tt> attribute of <tt class="docutils literal">textarea</tt> elements in lxml.html did
-not represent the complete raw value (including child tags etc.). It
-now serialises the complete content on read and replaces the
-complete content by a string on write.</li>
-<li>Target parser didn't call <tt class="docutils literal">.close()</tt> on the target object if
-parsing failed.  Now it is guaranteed that <tt class="docutils literal">.close()</tt> will be
-called after parsing, regardless of the outcome.</li>
-</ul>
-</div>
-<div class="section" id="id88">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Official support for Python 3.1.2 and later.</li>
-<li>Static MS Windows builds can now download their dependencies
-themselves.</li>
-<li><tt class="docutils literal">Element.attrib</tt> no longer uses a cyclic reference back to its
-Element object.  It therefore no longer requires the garbage
-collector to clean up.</li>
-<li>Static builds include libiconv, in addition to libxml2 and libxslt.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id89">
-<h1>2.2.8 (2010-09-02)</h1>
-<div class="section" id="id90">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash in newer libxml2 versions when moving elements between
-documents that had attributes on replaced XInclude nodes.</li>
-<li>Import fix for urljoin in Python 3.1+.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id91">
-<h1>2.2.7 (2010-07-24)</h1>
-<div class="section" id="id92">
-<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>
-<div class="section" id="id93">
-<h1>2.2.6 (2010-03-02)</h1>
-<div class="section" id="id94">
-<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="id95">
-<h1>2.2.5 (2010-02-28)</h1>
-<div class="section" id="id96">
-<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="id97">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash in XPath evaluation when reading smart strings from a document
-other than the original context document.</li>
-<li>Support recent versions of html5lib by not requiring its
-<tt class="docutils literal">XHTMLParser</tt> in <tt class="docutils literal">htmlparser.py</tt> anymore.</li>
-<li>Manually instantiating the custom element classes in
-<tt class="docutils literal">lxml.objectify</tt> could crash.</li>
-<li>Invalid XML text characters were not rejected by the API when they
-appeared in unicode strings directly after non-ASCII characters.</li>
-<li>lxml.html.open_http_urllib() did not work in Python 3.</li>
-<li>The functions <tt class="docutils literal">strip_tags()</tt> and <tt class="docutils literal">strip_elements()</tt> in
-<tt class="docutils literal">lxml.etree</tt> did not remove all occurrences of a tag in all cases.</li>
-<li>Crash in XSLT extension elements when the XSLT context node is not
-an element.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id98">
-<h1>2.2.4 (2009-11-11)</h1>
-<div class="section" id="id99">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Static build of libxml2/libxslt was broken.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id100">
-<h1>2.2.3 (2009-10-30)</h1>
-<div class="section" id="id101">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id102">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>The <tt class="docutils literal">resolve_entities</tt> option did not work in the incremental feed
-parser.</li>
-<li>Looking up and deleting attributes without a namespace could hit a
-namespaced attribute of the same name instead.</li>
-<li>Late errors during calls to <tt class="docutils literal">SubElement()</tt> (e.g. attribute related
-ones) could leave a partially initialised element in the tree.</li>
-<li>Modifying trees that contain parsed entity references could result
-in an infinite loop.</li>
-<li>ObjectifiedElement.__setattr__ created an empty-string child element when the
-attribute value was rejected as a non-unicode/non-ascii string</li>
-<li>Syntax errors in <tt class="docutils literal">lxml.cssselect</tt> could result in misleading error
-messages.</li>
-<li>Invalid syntax in CSS expressions could lead to an infinite loop in
-the parser of <tt class="docutils literal">lxml.cssselect</tt>.</li>
-<li>CSS special character escapes were not properly handled in
-<tt class="docutils literal">lxml.cssselect</tt>.</li>
-<li>CSS Unicode escapes were not properly decoded in <tt class="docutils literal">lxml.cssselect</tt>.</li>
-<li>Select options in HTML forms that had no explicit <tt class="docutils literal">value</tt>
-attribute were not handled correctly.  The HTML standard dictates
-that their value is defined by their text content.  This is now
-supported by lxml.html.</li>
-<li>XPath raised a TypeError when finding CDATA sections.  This is now
-fully supported.</li>
-<li>Calling <tt class="docutils literal">help(lxml.objectify)</tt> didn't work at the prompt.</li>
-<li>The <tt class="docutils literal">ElementMaker</tt> in lxml.objectify no longer defines the default
-namespaces when annotation is disabled.</li>
-<li>Feed parser failed to honout the 'recover' option on parse errors.</li>
-<li>Diverting the error logging to Python's logging system was broken.</li>
-</ul>
-</div>
-<div class="section" id="id103">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id104">
-<h1>2.2.2 (2009-06-21)</h1>
-<div class="section" id="id105">
-<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>,
-<tt class="docutils literal">strip_tags()</tt> in lxml.etree to remove attributes/subtrees/tags
-from a subtree.</li>
-</ul>
-</div>
-<div class="section" id="id106">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Namespace cleanup on subtree insertions could result in missing
-namespace declarations (and potentially crashes) if the element
-defining a namespace was deleted and the namespace was not used by
-the top element of the inserted subtree but only in deeper subtrees.</li>
-<li>Raising an exception from a parser target callback didn't always
-terminate the parser.</li>
-<li>Only {true, false, 1, 0} are accepted as the lexical representation for
-BoolElement ({True, False, T, F, t, f} not any more), restoring lxml &lt;= 2.0
-behaviour.</li>
-</ul>
-</div>
-<div class="section" id="id107">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id108">
-<h1>2.2.1 (2009-06-02)</h1>
-<div class="section" id="id109">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Injecting default attributes into a document during XML Schema
-validation (also at parse time).</li>
-<li>Pass <tt class="docutils literal">huge_tree</tt> parser option to disable parser security
-restrictions imposed by libxml2 2.7.</li>
-</ul>
-</div>
-<div class="section" id="id110">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>The script for statically building libxml2 and libxslt didn't work
-in Py3.</li>
-<li><tt class="docutils literal">XMLSchema()</tt> also passes invalid schema documents on to libxml2
-for parsing (which could lead to a crash before release 2.6.24).</li>
-</ul>
-</div>
-<div class="section" id="id111">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id112">
-<h1>2.2 (2009-03-21)</h1>
-<div class="section" id="id113">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Support for <tt class="docutils literal">standalone</tt> flag in XML declaration through
-<tt class="docutils literal">tree.docinfo.standalone</tt> and by passing <tt class="docutils literal">standalone=True/False</tt>
-on serialisation.</li>
-</ul>
-</div>
-<div class="section" id="id114">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when parsing an XML Schema with external imports from a
-filename.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta4-2009-02-27">
-<h1>2.2beta4 (2009-02-27)</h1>
-<div class="section" id="id115">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Support strings and instantiable Element classes as child arguments
-to the constructor of custom Element classes.</li>
-<li>GZip compression support for serialisation to files and file-like
-objects.</li>
-</ul>
-</div>
-<div class="section" id="id116">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Deep-copying an ElementTree copied neither its sibling PIs and
-comments nor its internal/external DTD subsets.</li>
-<li>Soupparser failed on broken attributes without values.</li>
-<li>Crash in XSLT when overwriting an already defined attribute using
-<tt class="docutils literal">xsl:attribute</tt>.</li>
-<li>Crash bug in exception handling code under Python 3.  This was due
-to a problem in Cython, not lxml itself.</li>
-<li><tt class="docutils literal">lxml.html.FormElement._name()</tt> failed for non top-level forms.</li>
-<li><tt class="docutils literal">TAG</tt> special attribute in constructor of custom Element classes
-was evaluated incorrectly.</li>
-</ul>
-</div>
-<div class="section" id="id117">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Official support for Python 3.0.1.</li>
-<li><tt class="docutils literal">Element.findtext()</tt> now returns an empty string instead of None
-for Elements without text content.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta3-2009-02-17">
-<h1>2.2beta3 (2009-02-17)</h1>
-<div class="section" id="id118">
-<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="id119">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Memory leak in XPath evaluators.</li>
-<li>Crash when parsing indented XML in one thread and merging it with
-other documents parsed in another thread.</li>
-<li>Setting the <tt class="docutils literal">base</tt> attribute in <tt class="docutils literal">lxml.objectify</tt> from a unicode
-string failed.</li>
-<li>Fixes following changes in Python 3.0.1.</li>
-<li>Minor fixes for Python 3.</li>
-</ul>
-</div>
-<div class="section" id="id120">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The global error log (which is copied into the exception log) is now
-local to a thread, which fixes some race conditions.</li>
-<li>More robust error handling on serialisation.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta2-2009-01-25">
-<h1>2.2beta2 (2009-01-25)</h1>
-<div class="section" id="id121">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Potential memory leak on exception handling.  This was due to a
-problem in Cython, not lxml itself.</li>
-<li><tt class="docutils literal">iter_links</tt> (and related link-rewriting functions) in
-<tt class="docutils literal">lxml.html</tt> would interpret CSS like <tt class="docutils literal"><span class="pre">url(&quot;link&quot;)</span></tt> incorrectly
-(treating the quotation marks as part of the link).</li>
-<li>Failing import on systems that have an <tt class="docutils literal">io</tt> module.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id122">
-<h1>2.1.5 (2009-01-06)</h1>
-<div class="section" id="id123">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Potential memory leak on exception handling.  This was due to a
-problem in Cython, not lxml itself.</li>
-<li>Failing import on systems that have an <tt class="docutils literal">io</tt> module.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta1-2008-12-12">
-<h1>2.2beta1 (2008-12-12)</h1>
-<div class="section" id="id124">
-<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="id125">
-<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="id126">
-<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="id127">
-<h1>2.1.4 (2008-12-12)</h1>
-<div class="section" id="id128">
-<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="id129">
-<h1>2.0.11 (2008-12-12)</h1>
-<div class="section" id="id130">
-<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="alpha1-2008-11-23">
-<h1>2.2alpha1 (2008-11-23)</h1>
-<div class="section" id="id131">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Support for XSLT result tree fragments in XPath/XSLT extension
-functions.</li>
-<li>QName objects have new properties <tt class="docutils literal">namespace</tt> and <tt class="docutils literal">localname</tt>.</li>
-<li>New options for exclusive C14N and C14N without comments.</li>
-<li>Instantiating a custom Element classes creates a new Element.</li>
-</ul>
-</div>
-<div class="section" id="id132">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>XSLT didn't inherit the parse options of the input document.</li>
-<li>0-bytes could slip through the API when used inside of Unicode
-strings.</li>
-<li>With <tt class="docutils literal">lxml.html.clean.autolink</tt>, links with balanced parenthesis,
-that end in a parenthesis, will be linked in their entirety (typical
-with Wikipedia links).</li>
-</ul>
-</div>
-<div class="section" id="id133">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id134">
-<h1>2.1.3 (2008-11-17)</h1>
-<div class="section" id="id135">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id136">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Ref-count leaks when lxml enters a try-except statement while an
-outside exception lives in sys.exc_*(). This was due to a problem in
-Cython, not lxml itself.</li>
-<li>Parser Unicode decoding errors could get swallowed by other
-exceptions.</li>
-<li>Name/import errors in some Python modules.</li>
-<li>Internal DTD subsets that did not specify a system or public ID were
-not serialised and did not appear in the docinfo property of
-ElementTrees.</li>
-<li>Fix a pre-Py3k warning when parsing from a gzip file in Py2.6.</li>
-<li>Test suite fixes for libxml2 2.7.</li>
-<li>Resolver.resolve_string() did not work for non-ASCII byte strings.</li>
-<li>Resolver.resolve_file() was broken.</li>
-<li>Overriding the parser encoding didn't work for many encodings.</li>
-</ul>
-</div>
-<div class="section" id="id137">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id138">
-<h1>2.0.10 (2008-11-17)</h1>
-<div class="section" id="id139">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Ref-count leaks when lxml enters a try-except statement while an
-outside exception lives in sys.exc_*(). This was due to a problem in
-Cython, not lxml itself.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id140">
-<h1>2.1.2 (2008-09-05)</h1>
-<div class="section" id="id141">
-<h2>Features added</h2>
-<ul class="simple">
-<li>lxml.etree now tries to find the absolute path name of files when
-parsing from a file-like object.  This helps custom resolvers when
-resolving relative URLs, as lixbml2 can prepend them with the path
-of the source document.</li>
-</ul>
-</div>
-<div class="section" id="id142">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Memory problem when passing documents between threads.</li>
-<li>Target parser did not honour the <tt class="docutils literal">recover</tt> option and raised an
-exception instead of calling <tt class="docutils literal">.close()</tt> on the target.</li>
-</ul>
-</div>
-<div class="section" id="id143">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id144">
-<h1>2.0.9 (2008-09-05)</h1>
-<div class="section" id="id145">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Memory problem when passing documents between threads.</li>
-<li>Target parser did not honour the <tt class="docutils literal">recover</tt> option and raised an
-exception instead of calling <tt class="docutils literal">.close()</tt> on the target.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id146">
-<h1>2.1.1 (2008-07-24)</h1>
-<div class="section" id="id147">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id148">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when parsing XSLT stylesheets in a thread and using them in
-another.</li>
-<li>Encoding problem when including text with ElementInclude under
-Python 3.</li>
-</ul>
-</div>
-<div class="section" id="id149">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id150">
-<h1>2.0.8 (2008-07-24)</h1>
-<div class="section" id="id151">
-<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="id152">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when parsing XSLT stylesheets in a thread and using them in
-another.</li>
-<li>CSS selector parser dropped remaining expression after a function
-with parameters.</li>
-</ul>
-</div>
-<div class="section" id="id153">
-<h2>Other changes</h2>
-</div>
-</div>
-<div class="section" id="id154">
-<h1>2.1 (2008-07-09)</h1>
-<div class="section" id="id155">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Smart strings can be switched off in XPath (<tt class="docutils literal">smart_strings</tt>
-keyword option).</li>
-<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="id156">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Custom resolvers were not used for XMLSchema includes/imports and
-XInclude processing.</li>
-<li>CSS selector parser dropped remaining expression after a function
-with parameters.</li>
-</ul>
-</div>
-<div class="section" id="id157">
-<h2>Other changes</h2>
-<ul class="simple">
-<li><tt class="docutils literal">objectify.enableRecursiveStr()</tt> was removed, use
-<tt class="docutils literal">objectify.enable_recursive_str()</tt> instead</li>
-<li>Speed-up when running XSLTs on documents from other threads</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id158">
-<h1>2.0.7 (2008-06-20)</h1>
-<div class="section" id="id159">
-<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="id160">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Descending dot-separated classes in CSS selectors were not resolved
-correctly.</li>
-<li><tt class="docutils literal">ElementTree.parse()</tt> didn't handle target parser result.</li>
-<li>Potential threading problem in XInclude.</li>
-<li>Crash in Element class lookup classes when the __init__() method of
-the super class is not called from Python subclasses.</li>
-</ul>
-</div>
-<div class="section" id="id161">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Non-ASCII characters in attribute values are no longer escaped on
-serialisation.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta3-2008-06-19">
-<h1>2.1beta3 (2008-06-19)</h1>
-<div class="section" id="id162">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Major overhaul of <tt class="docutils literal">tools/xpathgrep.py</tt> script.</li>
-<li>Pickling <tt class="docutils literal">ElementTree</tt> objects in lxml.objectify.</li>
-<li>Support for parsing from file-like objects that return unicode
-strings.</li>
-<li>New function <tt class="docutils literal">etree.cleanup_namespaces(el)</tt> that removes unused
-namespace declarations from a (sub)tree (experimental).</li>
-<li>XSLT results support the buffer protocol in Python 3.</li>
-<li>Polymorphic functions in <tt class="docutils literal">lxml.html</tt> that accept either a tree or
-a parsable string will return either a UTF-8 encoded byte string, a
-unicode string or a tree, based on the type of the input.
-Previously, the result was always a byte string or a tree.</li>
-<li>Support for Python 2.6 and 3.0 beta.</li>
-<li>File name handling now uses a heuristic to convert between byte
-strings (usually filenames) and unicode strings (usually URLs).</li>
-<li>Parsing from a plain file object frees the GIL under Python 2.x.</li>
-<li>Running <tt class="docutils literal">iterparse()</tt> on a plain file (or filename) frees the GIL
-on reading under Python 2.x.</li>
-<li>Conversion functions <tt class="docutils literal">html_to_xhtml()</tt> and <tt class="docutils literal">xhtml_to_html()</tt> in
-lxml.html (experimental).</li>
-<li>Most features in lxml.html work for XHTML namespaced tag names
-(experimental).</li>
-</ul>
-</div>
-<div class="section" id="id163">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><tt class="docutils literal">ElementTree.parse()</tt> didn't handle target parser result.</li>
-<li>Crash in Element class lookup classes when the __init__() method of
-the super class is not called from Python subclasses.</li>
-<li>A number of problems related to unicode/byte string conversion of
-filenames and error messages were fixed.</li>
-<li>Building on MacOS-X now passes the &quot;flat_namespace&quot; option to the C
-compiler, which reportedly prevents build quirks and crashes on this
-platform.</li>
-<li>Windows build was broken.</li>
-<li>Rare crash when serialising to a file object with certain encodings.</li>
-</ul>
-</div>
-<div class="section" id="id164">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Non-ASCII characters in attribute values are no longer escaped on
-serialisation.</li>
-<li>Passing non-ASCII byte strings or invalid unicode strings as .tag,
-namespaces, etc. will result in a ValueError instead of an
-AssertionError (just like the tag well-formedness check).</li>
-<li>Up to several times faster attribute access (i.e. tree traversal) in
-lxml.objectify.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id165">
-<h1>2.0.6 (2008-05-31)</h1>
-<div class="section" id="id166">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id167">
-<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>
-<li>Windows build was broken.</li>
-<li>Moving a subtree from a document created in one thread into a
-document of another thread could crash when the rest of the source
-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="id168">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>lxml should now build without problems on MacOS-X.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="beta2-2008-05-02">
-<h1>2.1beta2 (2008-05-02)</h1>
-<div class="section" id="id169">
-<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>
-<li>lxml.html has a new parser class <tt class="docutils literal">XHTMLParser</tt> and a module
-attribute <tt class="docutils literal">xhtml_parser</tt> that provide XML parsers that are
-pre-configured for the lxml.html package.</li>
-</ul>
-</div>
-<div class="section" id="id170">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Moving a subtree from a document created in one thread into a
-document of another thread could crash when the rest of the source
-document is deleted while the subtree is still in use.</li>
-<li>Passing an nsmap when creating an Element will no longer strip
-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="id171">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>If the default namespace is redundantly defined with a prefix on the
-same Element, the prefix will now be preferred for subelements and
-attributes.  This allows users to work around a problem in libxml2
-where attributes from the default namespace could serialise without
-a prefix even when they appear on an Element with a different
-namespace (i.e. they would end up in the wrong namespace).</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id172">
-<h1>2.0.5 (2008-05-01)</h1>
-<div class="section" id="id173">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id174">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Resolving to a filename in custom resolvers didn't work.</li>
-<li>lxml did not honour libxslt's second error state &quot;STOPPED&quot;, which
-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="id175">
-<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="id176">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Error logging in Schematron (requires libxml2 2.6.32 or later).</li>
-<li>Parser option <tt class="docutils literal">strip_cdata</tt> for normalising or keeping CDATA
-sections.  Defaults to <tt class="docutils literal">True</tt> as before, thus replacing CDATA
-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="id177">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Resolving to a filename in custom resolvers didn't work.</li>
-<li>lxml did not honour libxslt's second error state &quot;STOPPED&quot;, which
-let some XSLT errors pass silently.</li>
-<li>Memory leak in Schematron with libxml2 &gt;= 2.6.31.</li>
-<li>lxml.etree accepted non well-formed namespace prefix names.</li>
-</ul>
-</div>
-<div class="section" id="id178">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Major cleanup in internal <tt class="docutils literal">moveNodeToDocument()</tt> function, which
-takes care of namespace cleanup when moving elements between
-different namespace contexts.</li>
-<li>New Elements created through the <tt class="docutils literal">makeelement()</tt> method of an HTML
-parser or through lxml.html now end up in a new HTML document
-(doctype HTML 4.01 Transitional) instead of a generic XML document.
-This mostly impacts the serialisation and the availability of a DTD
-context.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id179">
-<h1>2.0.4 (2008-04-13)</h1>
-<div class="section" id="id180">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id181">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Hanging thread in conjunction with GTK threading.</li>
-<li>Crash bug in iterparse when moving elements into other documents.</li>
-<li>HTML elements' <tt class="docutils literal">.cssselect()</tt> method was broken.</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="id182">
-<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="id183">
-<h2>Features added</h2>
-<ul class="simple">
-<li>New event types 'comment' and 'pi' in <tt class="docutils literal">iterparse()</tt>.</li>
-<li><tt class="docutils literal">XSLTAccessControl</tt> instances have a property <tt class="docutils literal">options</tt> that
-returns a dict of access configuration options.</li>
-<li>Constant instances <tt class="docutils literal">DENY_ALL</tt> and <tt class="docutils literal">DENY_WRITE</tt> on
-<tt class="docutils literal">XSLTAccessControl</tt> class.</li>
-<li>Extension elements for XSLT (experimental!)</li>
-<li><tt class="docutils literal">Element.base</tt> property returns the xml:base or HTML base URL of
-an Element.</li>
-<li><tt class="docutils literal">docinfo.URL</tt> property is writable.</li>
-</ul>
-</div>
-<div class="section" id="id184">
-<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="id185">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Minor API speed-ups.</li>
-<li>The benchmark suite now uses tail text in the trees, which makes the
-absolute numbers incomparable to previous results.</li>
-<li>Generating the HTML documentation now requires <a class="reference external" href="http://pygments.org/">Pygments</a>, which is
-used to enable syntax highlighting for the doctest examples.</li>
-</ul>
-<p>Most long-time deprecated functions and methods were removed:</p>
-<ul>
-<li><p class="first"><tt class="docutils literal">etree.clearErrorLog()</tt>, use <tt class="docutils literal">etree.clear_error_log()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">etree.useGlobalPythonLog()</tt>, use
-<tt class="docutils literal">etree.use_global_python_log()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">etree.ElementClassLookup.setFallback()</tt>, use
-<tt class="docutils literal">etree.ElementClassLookup.set_fallback()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">etree.getDefaultParser()</tt>, use <tt class="docutils literal">etree.get_default_parser()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">etree.setDefaultParser()</tt>, use <tt class="docutils literal">etree.set_default_parser()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">etree.setElementClassLookup()</tt>, use
-<tt class="docutils literal">etree.set_element_class_lookup()</tt></p>
-<p>Note that <tt class="docutils literal">parser.setElementClassLookup()</tt> has not been removed
-yet, although <tt class="docutils literal">parser.set_element_class_lookup()</tt> should be used
-instead.</p>
-</li>
-<li><p class="first"><tt class="docutils literal">xpath_evaluator.registerNamespace()</tt>, use
-<tt class="docutils literal">xpath_evaluator.register_namespace()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">xpath_evaluator.registerNamespaces()</tt>, use
-<tt class="docutils literal">xpath_evaluator.register_namespaces()</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">objectify.setPytypeAttributeTag</tt>, use
-<tt class="docutils literal">objectify.set_pytype_attribute_tag</tt></p>
-</li>
-<li><p class="first"><tt class="docutils literal">objectify.setDefaultParser()</tt>, use
-<tt class="docutils literal">objectify.set_default_parser()</tt></p>
-</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id186">
-<h1>2.0.3 (2008-03-26)</h1>
-<div class="section" id="id187">
-<h2>Features added</h2>
-<ul class="simple">
-<li>soupparser.parse() allows passing keyword arguments on to
-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="id188">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li><tt class="docutils literal">lxml.html.diff</tt> didn't treat empty tags properly (e.g.,
-<tt class="docutils literal">&lt;br&gt;</tt>).</li>
-<li>Handle entity replacements correctly in target parser.</li>
-<li>Crash when using <tt class="docutils literal">iterparse()</tt> with XML Schema validation.</li>
-<li>The BeautifulSoup parser (soupparser.py) did not replace entities,
-which made them turn up in text content.</li>
-<li>Attribute assignment of custom PyTypes in objectify could fail to
-correctly serialise the value to a string.</li>
-</ul>
-</div>
-<div class="section" id="id189">
-<h2>Other changes</h2>
-<ul class="simple">
-<li><tt class="docutils literal">lxml.html.ElementSoup</tt> was replaced by a new module
-<tt class="docutils literal">lxml.html.soupparser</tt> with a more consistent API.  The old module
-remains for compatibility with ElementTree's own ElementSoup module.</li>
-<li>Setting the XSLT_CONFIG and XML2_CONFIG environment variables at
-build time will let setup.py pick up the <tt class="docutils literal"><span class="pre">xml2-config</span></tt> and
-<tt class="docutils literal"><span class="pre">xslt-config</span></tt> scripts from the supplied path name.</li>
-<li>Passing <tt class="docutils literal"><span class="pre">--with-xml2-config=/path/to/xml2-config</span></tt> to setup.py will
-override the <tt class="docutils literal"><span class="pre">xml2-config</span></tt> script that is used to determine the C
-compiler options.  The same applies for the <tt class="docutils literal"><span class="pre">--with-xslt-config</span></tt>
-option.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id190">
-<h1>2.0.2 (2008-02-22)</h1>
-<div class="section" id="id191">
-<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="id192">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>The prefix for objectify's pytype namespace was missing from the set
-of default prefixes.</li>
-<li>Memory leak in Schematron (fixed only for libxml2 2.6.31+).</li>
-<li>Error type names in RelaxNG were reported incorrectly.</li>
-<li>Slice deletion bug fixed in objectify.</li>
-</ul>
-</div>
-<div class="section" id="id193">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Enabled doctests for some Python modules (especially <tt class="docutils literal">lxml.html</tt>).</li>
-<li>Add a <tt class="docutils literal">method</tt> argument to <tt class="docutils literal">lxml.html.tostring()</tt>
-(<tt class="docutils literal"><span class="pre">method=&quot;xml&quot;</span></tt> for XHTML output).</li>
-<li>Make it clearer that methods like <tt class="docutils literal">lxml.html.fromstring()</tt> take a
-<tt class="docutils literal">base_url</tt> argument.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id194">
-<h1>2.0.1 (2008-02-13)</h1>
-<div class="section" id="id195">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Child iteration in <tt class="docutils literal">lxml.pyclasslookup</tt>.</li>
-<li>Loads of new docstrings reflect the signature of functions and
-methods to make them visible in API docs and <tt class="docutils literal">help()</tt></li>
-</ul>
-</div>
-<div class="section" id="id196">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>The module <tt class="docutils literal">lxml.html.builder</tt> was duplicated as
-<tt class="docutils literal">lxml.htmlbuilder</tt></li>
-<li>Form elements would return None for <tt class="docutils literal">form.fields.keys()</tt> if there
-was an unnamed input field.  Now unnamed input fields are completely
-ignored.</li>
-<li>Setting an element slice in objectify could insert slice-overlapping
-elements at the wrong position.</li>
-</ul>
-</div>
-<div class="section" id="id197">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>The generated API documentation was cleaned up and disburdened from
-non-public classes etc.</li>
-<li>The previously public module <tt class="docutils literal">lxml.html.setmixin</tt> was renamed to
-<tt class="docutils literal">lxml.html._setmixin</tt> as it is not an official part of lxml.  If
-you want to use it, feel free to copy it over to your own source
-base.</li>
-<li>Passing <tt class="docutils literal"><span class="pre">--with-xslt-config=/path/to/xslt-config</span></tt> to setup.py will
-override the <tt class="docutils literal"><span class="pre">xslt-config</span></tt> script that is used to determine the C
-compiler options.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id198">
-<h1>2.0 (2008-02-01)</h1>
-<div class="section" id="id199">
-<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
-serialise to unicode.  The <tt class="docutils literal">tounicode()</tt> function is now
-deprecated.</li>
-<li><tt class="docutils literal">XMLSchema()</tt> and <tt class="docutils literal">RelaxNG()</tt> can parse from StringIO.</li>
-<li><tt class="docutils literal">makeparser()</tt> function in <tt class="docutils literal">lxml.objectify</tt> to create a new
-parser with the usual objectify setup.</li>
-<li>Plain ASCII XPath string results are no longer forced into unicode
-objects as in 2.0beta1, but are returned as plain strings as before.</li>
-<li>All XPath string results are 'smart' objects that have a
-<tt class="docutils literal">getparent()</tt> method to retrieve their parent Element.</li>
-<li><tt class="docutils literal">with_tail</tt> option in serialiser functions.</li>
-<li>More accurate exception messages in validator creation.</li>
-<li>Parse-time XML schema validation (<tt class="docutils literal">schema</tt> parser keyword).</li>
-<li>XPath string results of the <tt class="docutils literal">text()</tt> function and attribute
-selection make their Element container accessible through a
-<tt class="docutils literal">getparent()</tt> method.  As a side-effect, they are now always
-unicode objects (even ASCII strings).</li>
-<li><tt class="docutils literal">XSLT</tt> objects are usable in any thread - at the cost of a deep
-copy if they were not created in that thread.</li>
-<li>Invalid entity names and character references will be rejected by
-the <tt class="docutils literal">Entity()</tt> factory.</li>
-<li><tt class="docutils literal">entity.text</tt> returns the textual representation of the entity,
-e.g. <tt class="docutils literal">&amp;amp;</tt>.</li>
-<li>New properties <tt class="docutils literal">position</tt> and <tt class="docutils literal">code</tt> on ParseError exception (as
-in ET 1.3)</li>
-<li>Rich comparison of <tt class="docutils literal">element.attrib</tt> proxies.</li>
-<li>ElementTree compatible TreeBuilder class.</li>
-<li>Use default prefixes for some common XML namespaces.</li>
-<li><tt class="docutils literal">lxml.html.clean.Cleaner</tt> now allows for a <tt class="docutils literal">host_whitelist</tt>, and
-two overridable methods: <tt class="docutils literal">allow_embedded_url(el, url)</tt> and the
-more general <tt class="docutils literal">allow_element(el)</tt>.</li>
-<li>Extended slicing of Elements as in <tt class="docutils literal"><span class="pre">element[1:-1:2]</span></tt>, both in
-etree and in objectify</li>
-<li>Resolvers can now provide a <tt class="docutils literal">base_url</tt> keyword argument when
-resolving a document as string data.</li>
-<li>When using <tt class="docutils literal">lxml.doctestcompare</tt> you can give the doctest option
-<tt class="docutils literal">NOPARSE_MARKUP</tt> (like <tt class="docutils literal"># doctest: +NOPARSE_MARKUP</tt>) to suppress
-the special checking for one test.</li>
-<li>Separate <tt class="docutils literal">feed_error_log</tt> property for the feed parser interface.
-The normal parser interface and <tt class="docutils literal">iterparse</tt> continue to use
-<tt class="docutils literal">error_log</tt>.</li>
-<li>The normal parsers and the feed parser interface are now separated
-and can be used concurrently on the same parser instance.</li>
-<li><tt class="docutils literal">fromstringlist()</tt> and <tt class="docutils literal">tostringlist()</tt> functions as in
-ElementTree 1.3</li>
-<li><tt class="docutils literal">iterparse()</tt> accepts an <tt class="docutils literal">html</tt> boolean keyword argument for
-parsing with the HTML parser (note that this interface may be
-subject to change)</li>
-<li>Parsers accept an <tt class="docutils literal">encoding</tt> keyword argument that overrides the encoding
-of the parsed documents.</li>
-<li>New C-API function <tt class="docutils literal">hasChild()</tt> to test for children</li>
-<li><tt class="docutils literal">annotate()</tt> function in objectify can annotate with Python types and XSI
-types in one step.  Accompanied by <tt class="docutils literal">xsiannotate()</tt> and <tt class="docutils literal">pyannotate()</tt>.</li>
-<li><tt class="docutils literal">ET.write()</tt>, <tt class="docutils literal">tostring()</tt> and <tt class="docutils literal">tounicode()</tt> now accept a keyword
-argument <tt class="docutils literal">method</tt> that can be one of 'xml' (or None), 'html' or 'text' to
-serialise as XML, HTML or plain text content.</li>
-<li><tt class="docutils literal">iterfind()</tt> method on Elements returns an iterator equivalent to
-<tt class="docutils literal">findall()</tt></li>
-<li><tt class="docutils literal">itertext()</tt> method on Elements</li>
-<li>Setting a QName object as value of the .text property or as an attribute
-will resolve its prefix in the respective context</li>
-<li>ElementTree-like parser target interface as described in
-<a class="reference external" href="http://effbot.org/elementtree/elementtree-xmlparser.htm">http://effbot.org/elementtree/elementtree-xmlparser.htm</a></li>
-<li>ElementTree-like feed parser interface on XMLParser and HTMLParser
-(<tt class="docutils literal">feed()</tt> and <tt class="docutils literal">close()</tt> methods)</li>
-<li>Reimplemented <tt class="docutils literal">objectify.E</tt> for better performance and improved
-integration with objectify.  Provides extended type support based on
-registered PyTypes.</li>
-<li>XSLT objects now support deep copying</li>
-<li>New <tt class="docutils literal">makeSubElement()</tt> C-API function that allows creating a new
-subelement straight with text, tail and attributes.</li>
-<li>XPath extension functions can now access the current context node
-(<tt class="docutils literal">context.context_node</tt>) and use a context dictionary
-(<tt class="docutils literal">context.eval_context</tt>) from the context provided in their first
-parameter</li>
-<li>HTML tag soup parser based on BeautifulSoup in <tt class="docutils literal">lxml.html.ElementSoup</tt></li>
-<li>New module <tt class="docutils literal">lxml.doctestcompare</tt> by Ian Bicking for writing simplified
-doctests based on XML/HTML output.  Use by importing <tt class="docutils literal">lxml.usedoctest</tt> or
-<tt class="docutils literal">lxml.html.usedoctest</tt> from within a doctest.</li>
-<li>New module <tt class="docutils literal">lxml.cssselect</tt> by Ian Bicking for selecting Elements with CSS
-selectors.</li>
-<li>New package <tt class="docutils literal">lxml.html</tt> written by Ian Bicking for advanced HTML
-treatment.</li>
-<li>Namespace class setup is now local to the <tt class="docutils literal">ElementNamespaceClassLookup</tt>
-instance and no longer global.</li>
-<li>Schematron validation (incomplete in libxml2)</li>
-<li>Additional <tt class="docutils literal">stringify</tt> argument to <tt class="docutils literal">objectify.PyType()</tt> takes a
-conversion function to strings to support setting text values from arbitrary
-types.</li>
-<li>Entity support through an <tt class="docutils literal">Entity</tt> factory and element classes.  XML
-parsers now have a <tt class="docutils literal">resolve_entities</tt> keyword argument that can be set to
-False to keep entities in the document.</li>
-<li><tt class="docutils literal">column</tt> field on error log entries to accompany the <tt class="docutils literal">line</tt> field</li>
-<li>Error specific messages in XPath parsing and evaluation
-NOTE: for evaluation errors, you will now get an XPathEvalError instead of
-an XPathSyntaxError.  To catch both, you can except on <tt class="docutils literal">XPathError</tt></li>
-<li>The regular expression functions in XPath now support passing a node-set
-instead of a string</li>
-<li>Extended type annotation in objectify: new <tt class="docutils literal">xsiannotate()</tt> function</li>
-<li>EXSLT RegExp support in standard XPath (not only XSLT)</li>
-</ul>
-</div>
-<div class="section" id="id200">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Missing import in <tt class="docutils literal">lxml.html.clean</tt>.</li>
-<li>Some Python 2.4-isms prevented lxml from building/running under
-Python 2.3.</li>
-<li>XPath on ElementTrees could crash when selecting the virtual root
-node of the ElementTree.</li>
-<li>Compilation <tt class="docutils literal"><span class="pre">--without-threading</span></tt> was buggy in alpha5/6.</li>
-<li>Memory leak in the <tt class="docutils literal">parse()</tt> function.</li>
-<li>Minor bugs in XSLT error message formatting.</li>
-<li>Result document memory leak in target parser.</li>
-<li>Target parser failed to report comments.</li>
-<li>In the <tt class="docutils literal">lxml.html</tt> <tt class="docutils literal">iter_links</tt> method, links in <tt class="docutils literal">&lt;object&gt;</tt>
-tags weren't recognized.  (Note: plugin-specific link parameters
-still aren't recognized.)  Also, the <tt class="docutils literal">&lt;embed&gt;</tt> tag, though not
-standard, is now included in <tt class="docutils literal">lxml.html.defs.special_inline_tags</tt>.</li>
-<li>Using custom resolvers on XSLT stylesheets parsed from a string
-could request ill-formed URLs.</li>
-<li>With <tt class="docutils literal">lxml.doctestcompare</tt> if you do <tt class="docutils literal">&lt;tag <span class="pre">xmlns=&quot;...&quot;&gt;</span></tt> in your
-output, it will then be namespace-neutral (before the ellipsis was
-treated as a real namespace).</li>
-<li>AttributeError in feed parser on parse errors</li>
-<li>XML feed parser setup problem</li>
-<li>Type annotation for unicode strings in <tt class="docutils literal">DataElement()</tt></li>
-<li>lxml failed to serialise namespace declarations of elements other than the
-root node of a tree</li>
-<li>Race condition in XSLT where the resolver context leaked between concurrent
-XSLT calls</li>
-<li>lxml.etree did not check tag/attribute names</li>
-<li>The XML parser did not report undefined entities as error</li>
-<li>The text in exceptions raised by XML parsers, validators and XPath
-evaluators now reports the first error that occurred instead of the last</li>
-<li>Passing '' as XPath namespace prefix did not raise an error</li>
-<li>Thread safety in XPath evaluators</li>
-</ul>
-</div>
-<div class="section" id="id201">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>Exceptions carry only the part of the error log that is related to
-the operation that caused the error.</li>
-<li><tt class="docutils literal">XMLSchema()</tt> and <tt class="docutils literal">RelaxNG()</tt> now enforce passing the source
-file/filename through the <tt class="docutils literal">file</tt> keyword argument.</li>
-<li>The test suite now skips most doctests under Python 2.3.</li>
-<li><tt class="docutils literal">make clean</tt> no longer removes the .c files (use <tt class="docutils literal">make
-realclean</tt> instead)</li>
-<li>Minor performance tweaks for Element instantiation and subelement
-creation</li>
-<li>Various places in the XPath, XSLT and iteration APIs now require
-keyword-only arguments.</li>
-<li>The argument order in <tt class="docutils literal">element.itersiblings()</tt> was changed to
-match the order used in all other iteration methods.  The second
-argument ('preceding') is now a keyword-only argument.</li>
-<li>The <tt class="docutils literal">getiterator()</tt> method on Elements and ElementTrees was
-reverted to return an iterator as it did in lxml 1.x.  The ET API
-specification allows it to return either a sequence or an iterator,
-and it traditionally returned a sequence in ET and an iterator in
-lxml.  However, it is now deprecated in favour of the <tt class="docutils literal">iter()</tt>
-method, which should be used in new code wherever possible.</li>
-<li>The 'pretty printed' serialisation of ElementTree objects now
-inserts newlines at the root level between processing instructions,
-comments and the root tag.</li>
-<li>A 'pretty printed' serialisation is now terminated with a newline.</li>
-<li>Second argument to <tt class="docutils literal">lxml.etree.Extension()</tt> helper is no longer
-required, third argument is now a keyword-only argument <tt class="docutils literal">ns</tt>.</li>
-<li><tt class="docutils literal">lxml.html.tostring</tt> takes an <tt class="docutils literal">encoding</tt> argument.</li>
-<li>The module source files were renamed to &quot;lxml.*.pyx&quot;, such as
-&quot;lxml.etree.pyx&quot;.  This was changed for consistency with the way
-Pyrex commonly handles package imports.  The main effect is that
-classes now know about their fully qualified class name, including
-the package name of their module.</li>
-<li>Keyword-only arguments in some API functions, especially in the
-parsers and serialisers.</li>
-<li>Tag name validation in lxml.etree (and lxml.html) now distinguishes
-between HTML tags and XML tags based on the parser that was used to
-parse or create them.  HTML tags no longer reject any non-ASCII
-characters in tag names but only spaces and the special characters
-<tt class="docutils literal"><span class="pre">&lt;&gt;&amp;/&quot;'</span></tt>.</li>
-<li>lxml.etree now emits a warning if you use XPath with libxml2 2.6.27
-(which can crash on certain XPath errors)</li>
-<li>Type annotation in objectify now preserves the already annotated type by
-default to prevent loosing type information that is already there.</li>
-<li><tt class="docutils literal">element.getiterator()</tt> returns a list, use <tt class="docutils literal">element.iter()</tt> to retrieve
-an iterator (ElementTree 1.3 compatible behaviour)</li>
-<li>objectify.PyType for None is now called &quot;NoneType&quot;</li>
-<li><tt class="docutils literal">el.getiterator()</tt> renamed to <tt class="docutils literal">el.iter()</tt>, following ElementTree 1.3 -
-original name is still available as alias</li>
-<li>In the public C-API, <tt class="docutils literal">findOrBuildNodeNs()</tt> was replaced by the more
-generic <tt class="docutils literal">findOrBuildNodeNsPrefix</tt></li>
-<li>Major refactoring in XPath/XSLT extension function code</li>
-<li>Network access in parsers disabled by default</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id202">
-<h1>1.3.6 (2007-10-29)</h1>
-<div class="section" id="id203">
-<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="id204">
-<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>
-methods.  While this makes them take a lot longer to run, it also
-makes it easier to link a specific test to garbage collection
-problems that would otherwise appear in later tests.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id205">
-<h1>1.3.5 (2007-10-22)</h1>
-<div class="section" id="id206">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id207">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>lxml.etree could crash when adding more than 10000 namespaces to a
-document</li>
-<li>lxml failed to serialise namespace declarations of elements other
-than the root node of a tree</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id208">
-<h1>1.3.4 (2007-08-30)</h1>
-<div class="section" id="id209">
-<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
-<tt class="docutils literal">namespace</tt> and <tt class="docutils literal">nsmap</tt> to set a namespace and nsmap for the Elements it
-creates.</li>
-<li>The <tt class="docutils literal">docinfo</tt> on ElementTree objects has new properties <tt class="docutils literal">internalDTD</tt>
-and <tt class="docutils literal">externalDTD</tt> that return a DTD object for the internal or external
-subset of the document respectively.</li>
-<li>Serialising an ElementTree now includes any internal DTD subsets that are
-part of the document, as well as comments and PIs that are siblings of the
-root node.</li>
-</ul>
-</div>
-<div class="section" id="id210">
-<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="id211">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>lxml now raises a TagNameWarning about tag names containing ':' instead of
-an Error as 1.3.3 did.  The reason is that a number of projects currently
-misuse the previous lack of tag name validation to generate namespace
-prefixes without declaring namespaces.  Apart from the danger of generating
-broken XML this way, it also breaks most of the namespace-aware tools in
-XML, including XPath, XSLT and validation.  lxml 1.3.x will continue to
-support this bug with a Warning, while lxml 2.0 will be strict about
-well-formed tag names (not only regarding ':').</li>
-<li>Serialising an Element no longer includes its comment and PI siblings (only
-ElementTree serialisation includes them).</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id212">
-<h1>1.3.3 (2007-07-26)</h1>
-<div class="section" id="id213">
-<h2>Features added</h2>
-<ul class="simple">
-<li>ElementTree compatible parser <tt class="docutils literal">ETCompatXMLParser</tt> strips processing
-instructions and comments while parsing XML</li>
-<li>Parsers now support stripping PIs (keyword argument 'remove_pis')</li>
-<li><tt class="docutils literal">etree.fromstring()</tt> now supports parsing both HTML and XML, depending on
-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="id214">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Parsing from Python Unicode strings failed on some platforms</li>
-<li><tt class="docutils literal">Element()</tt> did not raise an exception on tag names containing ':'</li>
-<li><tt class="docutils literal">Element.getiterator(tag)</tt> did not accept <tt class="docutils literal">Comment</tt> and
-<tt class="docutils literal">ProcessingInstruction</tt> as tags. It also accepts <tt class="docutils literal">Element</tt> now.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id215">
-<h1>1.3.2 (2007-07-03)</h1>
-<div class="section" id="id216">
-<h2>Features added</h2>
-</div>
-<div class="section" id="id217">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>&quot;deallocating None&quot; crash bug</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id218">
-<h1>1.3.1 (2007-07-02)</h1>
-<div class="section" id="id219">
-<h2>Features added</h2>
-<ul class="simple">
-<li>objectify.DataElement now supports setting values from existing data
-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="id220">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Better way to prevent crashes in Element proxy cleanup code</li>
-<li>objectify.DataElement didn't set up None value correctly</li>
-<li>objectify.DataElement didn't check the value against the provided type hints</li>
-<li>Reference-counting bug in <tt class="docutils literal">Element.attrib.pop()</tt></li>
-</ul>
-</div>
-</div>
-<div class="section" id="id221">
-<h1>1.3 (2007-06-24)</h1>
-<div class="section" id="id222">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Module <tt class="docutils literal">lxml.pyclasslookup</tt> module implements an Element class lookup
-scheme that can access the entire tree in read-only mode to help determining
-a suitable Element class</li>
-<li>Parsers take a <tt class="docutils literal">remove_comments</tt> keyword argument that skips over comments</li>
-<li><tt class="docutils literal">parse()</tt> function in <tt class="docutils literal">objectify</tt>, corresponding to <tt class="docutils literal">XML()</tt> etc.</li>
-<li><tt class="docutils literal">Element.addnext(el)</tt> and <tt class="docutils literal">Element.addprevious(el)</tt> methods to support
-adding processing instructions and comments around the root node</li>
-<li><tt class="docutils literal">Element.attrib</tt> was missing <tt class="docutils literal">clear()</tt> and <tt class="docutils literal">pop()</tt> methods</li>
-<li>Extended type annotation in objectify: cleaner annotation namespace setup
-plus new <tt class="docutils literal">deannotate()</tt> function</li>
-<li>Support for custom Element class instantiation in lxml.sax: passing a
-<tt class="docutils literal">makeelement</tt> function to the ElementTreeContentHandler will reuse the
-lookup context of that function</li>
-<li>'.' represents empty ObjectPath (identity)</li>
-<li><tt class="docutils literal">Element.values()</tt> to accompany the existing <tt class="docutils literal">.keys()</tt> and <tt class="docutils literal">.items()</tt></li>
-<li><tt class="docutils literal">collectAttributes()</tt> C-function to build a list of attribute
-keys/values/items for a libxml2 node</li>
-<li><tt class="docutils literal">DTD</tt> validator class (like <tt class="docutils literal">RelaxNG</tt> and <tt class="docutils literal">XMLSchema</tt>)</li>
-<li>HTML generator helpers by Fredrik Lundh in <tt class="docutils literal">lxml.htmlbuilder</tt></li>
-<li><tt class="docutils literal">ElementMaker</tt> XML generator by Fredrik Lundh in <tt class="docutils literal">lxml.builder.E</tt></li>
-<li>Support for pickeling <tt class="docutils literal">objectify.ObjectifiedElement</tt> objects to XML</li>
-<li><tt class="docutils literal">update()</tt> method on Element.attrib</li>
-<li>Optimised replacement for libxml2's _xmlReconsiliateNs(). This allows lxml
-a better handling of namespaces when moving elements between documents.</li>
-</ul>
-</div>
-<div class="section" id="id223">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Removing Elements from a tree could make them loose their namespace
-declarations</li>
-<li><tt class="docutils literal">ElementInclude</tt> didn't honour base URL of original document</li>
-<li>Replacing the children slice of an Element would cut off the tails of the
-original children</li>
-<li><tt class="docutils literal">Element.getiterator(tag)</tt> did not accept <tt class="docutils literal">Comment</tt> and
-<tt class="docutils literal">ProcessingInstruction</tt> as tags</li>
-<li>API functions now check incoming strings for XML conformity.  Zero bytes or
-low ASCII characters are no longer accepted (AssertionError).</li>
-<li>XSLT parsing failed to pass resolver context on to imported documents</li>
-<li>passing '' as namespace prefix in nsmap could be passed through to libxml2</li>
-<li>Objectify couldn't handle prefixed XSD type names in <tt class="docutils literal">xsi:type</tt></li>
-<li>More ET compatible behaviour when writing out XML declarations or not</li>
-<li>More robust error handling in <tt class="docutils literal">iterparse()</tt></li>
-<li>Documents lost their top-level PIs and comments on serialisation</li>
-<li>lxml.sax failed on comments and PIs. Comments are now properly ignored and
-PIs are copied.</li>
-<li>Possible memory leaks in namespace handling when moving elements between
-documents</li>
-</ul>
-</div>
-<div class="section" id="id224">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>major restructuring in the documentation</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id225">
-<h1>1.2.1 (2007-02-27)</h1>
-<div class="section" id="id226">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Build fixes for MS compiler</li>
-<li>Item assignments to special names like <tt class="docutils literal"><span class="pre">element[&quot;text&quot;]</span></tt> failed</li>
-<li>Renamed ObjectifiedDataElement.__setText() to _setText() to make it easier
-to access</li>
-<li>The pattern for attribute names in ObjectPath was too restrictive</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id227">
-<h1>1.2 (2007-02-20)</h1>
-<div class="section" id="id228">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Rich comparison of QName objects</li>
-<li>Support for regular expressions in benchmark selection</li>
-<li>get/set emulation (not .attrib!) for attributes on processing instructions</li>
-<li>ElementInclude Python module for ElementTree compatible XInclude processing
-that honours custom resolvers registered with the source document</li>
-<li>ElementTree.parser property holds the parser used to parse the document</li>
-<li>setup.py has been refactored for greater readability and flexibility</li>
-<li>--rpath flag to setup.py to induce automatic linking-in of dynamic library
-runtime search paths has been renamed to --auto-rpath. This makes it
-possible to pass an --rpath directly to distutils; previously this was being
-shadowed.</li>
-</ul>
-</div>
-<div class="section" id="id229">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Element instantiation now uses locks to prevent race conditions with threads</li>
-<li>ElementTree.write() did not raise an exception when the file was not writable</li>
-<li>Error handling could crash under Python &lt;= 2.4.1 - fixed by disabling thread
-support in these environments</li>
-<li>Element.find*() did not accept QName objects as path</li>
-</ul>
-</div>
-<div class="section" id="id230">
-<h2>Other changes</h2>
-<ul class="simple">
-<li>code cleanup: redundant _NodeBase super class merged into _Element class
-Note: although the impact should be zero in most cases, this change breaks
-the compatibiliy of the public C-API</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id231">
-<h1>1.1.2 (2006-10-30)</h1>
-<div class="section" id="id232">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Data elements in objectify support repr(), which is now used by dump()</li>
-<li>Source distribution now ships with a patched Pyrex</li>
-<li>New C-API function makeElement() to create new elements with text,
-tail, attributes and namespaces</li>
-<li>Reuse original parser flags for XInclude</li>
-<li>Simplified support for handling XSLT processing instructions</li>
-</ul>
-</div>
-<div class="section" id="id233">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Parser resources were not freed before the next parser run</li>
-<li>Open files and XML strings returned by Python resolvers were not
-closed/freed</li>
-<li>Crash in the IDDict returned by XMLDTDID</li>
-<li>Copying Comments and ProcessingInstructions failed</li>
-<li>Memory leak for external URLs in _XSLTProcessingInstruction.parseXSL()</li>
-<li>Memory leak when garbage collecting tailed root elements</li>
-<li>HTML script/style content was not propagated to .text</li>
-<li>Show text xincluded between text nodes correctly in .text and .tail</li>
-<li>'integer * objectify.StringElement' operation was not supported</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id234">
-<h1>1.1.1 (2006-09-21)</h1>
-<div class="section" id="id235">
-<h2>Features added</h2>
-<ul class="simple">
-<li>XSLT profiling support (<tt class="docutils literal">profile_run</tt> keyword)</li>
-<li>countchildren() method on objectify.ObjectifiedElement</li>
-<li>Support custom elements for tree nodes in lxml.objectify</li>
-</ul>
-</div>
-<div class="section" id="id236">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>lxml.objectify failed to support long data values (e.g., &quot;123L&quot;)</li>
-<li>Error messages from XSLT did not reach <tt class="docutils literal">XSLT.error_log</tt></li>
-<li>Factories objectify.Element() and objectify.DataElement() were missing
-<tt class="docutils literal">attrib</tt> and <tt class="docutils literal">nsmap</tt> keyword arguments</li>
-<li>Changing the default parser in lxml.objectify did not update the factories
-Element() and DataElement()</li>
-<li>Let lxml.objectify.Element() always generate tree elements (not data
-elements)</li>
-<li>Build under Windows failed ('0' bug in patched Pyrex version)</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id237">
-<h1>1.1 (2006-09-13)</h1>
-<div class="section" id="id238">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Comments and processing instructions return '&lt;!-- coment --&gt;' and
-'&lt;?pi-target content?&gt;' for repr()</li>
-<li>Parsers are now the preferred (and default) place where element class lookup
-schemes should be registered.  Namespace lookup is no longer supported by
-default.</li>
-<li>Support for Python 2.5 beta</li>
-<li>Unlock the GIL for deep copying documents and for XPath()</li>
-<li>New <tt class="docutils literal">compact</tt> keyword argument for parsing read-only documents</li>
-<li>Support for parser options in iterparse()</li>
-<li>The <tt class="docutils literal">namespace</tt> axis is supported in XPath and returns (prefix, URI)
-tuples</li>
-<li>The XPath expression &quot;/&quot; now returns an empty list instead of raising an
-exception</li>
-<li>XML-Object API on top of lxml (lxml.objectify)</li>
-<li>Customizable Element class lookup:<ul>
-<li>different pre-implemented lookup mechanisms</li>
-<li>support for externally provided lookup functions</li>
-</ul>
-</li>
-<li>Support for processing instructions (ET-like, not compatible)</li>
-<li>Public C-level API for independent extension modules</li>
-<li>Module level <tt class="docutils literal">iterwalk()</tt> function as 'iterparse' for trees</li>
-<li>Module level <tt class="docutils literal">iterparse()</tt> function similar to ElementTree (see
-documentation for differences)</li>
-<li>Element.nsmap property returns a mapping of all namespace prefixes known at
-the Element to their namespace URI</li>
-<li>Reentrant threading support in RelaxNG, XMLSchema and XSLT</li>
-<li>Threading support in parsers and serializers:<ul>
-<li>All in-memory operations (tostring, parse(StringIO), etc.) free the GIL</li>
-<li>File operations (on file names) free the GIL</li>
-<li>Reading from file-like objects frees the GIL and reacquires it for reading</li>
-<li>Serialisation to file-like objects is single-threaded (high lock overhead)</li>
-</ul>
-</li>
-<li>Element iteration over XPath axes:<ul>
-<li>Element.iterdescendants() iterates over the descendants of an element</li>
-<li>Element.iterancestors() iterates over the ancestors of an element (from
-parent to parent)</li>
-<li>Element.itersiblings() iterates over either the following or preceding
-siblings of an element</li>
-<li>Element.iterchildren() iterates over the children of an element in either
-direction</li>
-<li>All iterators support the <tt class="docutils literal">tag</tt> keyword argument to restrict the
-generated elements</li>
-</ul>
-</li>
-<li>Element.getnext() and Element.getprevious() return the direct siblings of an
-element</li>
-</ul>
-</div>
-<div class="section" id="id239">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>filenames with local 8-bit encoding were not supported</li>
-<li>1.1beta did not compile under Python 2.3</li>
-<li>ignore unknown 'pyval' attribute values in objectify</li>
-<li>objectify.ObjectifiedElement.addattr() failed to accept Elements and Lists</li>
-<li>objectify.ObjectPath.setattr() failed to accept Elements and Lists</li>
-<li>XPathSyntaxError now inherits from XPathError</li>
-<li>Threading race conditions in RelaxNG and XMLSchema</li>
-<li>Crash when mixing elements from XSLT results into other trees, concurrent
-XSLT is only allowed when the stylesheet was parsed in the main thread</li>
-<li>The EXSLT <tt class="docutils literal">regexp:match</tt> function now works as defined (except for some
-differences in the regular expression syntax)</li>
-<li>Setting element.text to '' returned None on request, not the empty string</li>
-<li><tt class="docutils literal">iterparse()</tt> could crash on long XML files</li>
-<li>Creating documents no longer copies the parser for later URL resolving.  For
-performance reasons, only a reference is kept.  Resolver updates on the
-parser will now be reflected by documents that were parsed before the
-change.  Although this should rarely become visible, it is a behavioral
-change from 1.0.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id240">
-<h1>1.0.4 (2006-09-09)</h1>
-<div class="section" id="id241">
-<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="id242">
-<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="id243">
-<h1>1.0.3 (2006-08-08)</h1>
-<div class="section" id="id244">
-<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="id245">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Crash when mixing elements from XSLT results into other trees</li>
-<li>Copying/deepcopying did not work for ElementTree objects</li>
-<li>Setting an attribute to a non-string value did not raise an exception</li>
-<li>Element.remove() deleted the tail text from the removed Element</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id246">
-<h1>1.0.2 (2006-06-27)</h1>
-<div class="section" id="id247">
-<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="id248">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Rare exceptions in Python list functions were not handled</li>
-<li>Parsing accepted unicode strings with XML encoding declaration in certain
-cases</li>
-<li>Parsing 8-bit encoded strings from StringIO objects raised an exception</li>
-<li>Module function <tt class="docutils literal">initThread()</tt> was removed - useless (and never worked)</li>
-<li>XSLT and parser exception messages include the error line number</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id249">
-<h1>1.0.1 (2006-06-09)</h1>
-<div class="section" id="id250">
-<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="id251">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Document deallocation could crash in certain garbage collection scenarios</li>
-<li>Extension function calls in XSLT variable declarations could break the
-stylesheet and crash on repeated calls</li>
-<li>Deep copying Elements could loose namespaces declared in parents</li>
-<li>Deep copying Elements did not copy tail</li>
-<li>Parsing file(-like) objects failed to load external entities</li>
-<li>Parsing 8-bit strings from file(-like) objects raised an exception</li>
-<li>xsl:include failed when the stylesheet was parsed from a file-like object</li>
-<li>lxml.sax.ElementTreeProducer did not call startDocument() / endDocument()</li>
-<li>MSVC compiler complained about long strings (supports only 2048 bytes)</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id252">
-<h1>1.0 (2006-06-01)</h1>
-<div class="section" id="id253">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Element.getiterator() and the findall() methods support finding arbitrary
-elements from a namespace (pattern <tt class="docutils literal">{namespace}*</tt>)</li>
-<li>Another speedup in tree iteration code</li>
-<li>General speedup of Python Element object creation and deallocation</li>
-<li>Writing C14N no longer serializes in memory (reduced memory footprint)</li>
-<li>PyErrorLog for error logging through the Python <tt class="docutils literal">logging</tt> module</li>
-<li><tt class="docutils literal">Element.getroottree()</tt> returns an ElementTree for the root node of the
-document that contains the element.</li>
-<li>ElementTree.getpath(element) returns a simple, absolute XPath expression to
-find the element in the tree structure</li>
-<li>Error logs have a <tt class="docutils literal">last_error</tt> attribute for convenience</li>
-<li>Comment texts can be changed through the API</li>
-<li>Formatted output via <tt class="docutils literal">pretty_print</tt> keyword in serialization functions</li>
-<li>XSLT can block access to file system and network via <tt class="docutils literal">XSLTAccessControl</tt></li>
-<li>ElementTree.write() no longer serializes in memory (reduced memory
-footprint)</li>
-<li>Speedup of Element.findall(tag) and Element.getiterator(tag)</li>
-<li>Support for writing the XML representation of Elements and ElementTrees to
-Python unicode strings via <tt class="docutils literal">etree.tounicode()</tt></li>
-<li>Support for writing XSLT results to Python unicode strings via <tt class="docutils literal">unicode()</tt></li>
-<li>Parsing a unicode string no longer copies the string (reduced memory
-footprint)</li>
-<li>Parsing file-like objects reads chunks rather than the whole file (reduced
-memory footprint)</li>
-<li>Parsing StringIO objects from the start avoids copying the string (reduced
-memory footprint)</li>
-<li>Read-only 'docinfo' attribute in ElementTree class holds DOCTYPE
-information, original encoding and XML version as seen by the parser</li>
-<li>etree module can be compiled without libxslt by commenting out the line
-<tt class="docutils literal">include &quot;xslt.pxi&quot;</tt> near the end of the etree.pyx source file</li>
-<li>Better error messages in parser exceptions</li>
-<li>Error reporting also works in XSLT</li>
-<li>Support for custom document loaders (URI resolvers) in parsers and XSLT,
-resolvers are registered at parser level</li>
-<li>Implementation of exslt:regexp for XSLT based on the Python 're' module,
-enabled by default, can be switched off with 'regexp=False' keyword argument</li>
-<li>Support for exslt extensions (libexslt) and libxslt extra functions
-(node-set, document, write, output)</li>
-<li>Substantial speedup in XPath.evaluate()</li>
-<li>HTMLParser for parsing (broken) HTML</li>
-<li>XMLDTDID function parses XML into tuple (root node, ID dict) based on xml:id
-implementation of libxml2 (as opposed to ET compatible XMLID)</li>
-</ul>
-</div>
-<div class="section" id="id254">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Memory leak in Element.__setitem__</li>
-<li>Memory leak in Element.attrib.items() and Element.attrib.values()</li>
-<li>Memory leak in XPath extension functions</li>
-<li>Memory leak in unicode related setup code</li>
-<li>Element now raises ValueError on empty tag names</li>
-<li>Namespace fixing after moving elements between documents could fail if the
-source document was freed too early</li>
-<li>Setting namespace-less tag names on namespaced elements ('{ns}t' -&gt; 't')
-didn't reset the namespace</li>
-<li>Unknown constants from newer libxml2 versions could raise exceptions in the
-error handlers</li>
-<li>lxml.etree compiles much faster</li>
-<li>On libxml2 &lt;= 2.6.22, parsing strings with encoding declaration could fail
-in certain cases</li>
-<li>Document reference in ElementTree objects was not updated when the root
-element was moved to a different document</li>
-<li>Running absolute XPath expressions on an Element now evaluates against the
-root tree</li>
-<li>Evaluating absolute XPath expressions (<tt class="docutils literal">/*</tt>) on an ElementTree could fail</li>
-<li>Crashes when calling XSLT, RelaxNG, etc. with uninitialized ElementTree
-objects</li>
-<li>Removed public function <tt class="docutils literal">initThreadLogging()</tt>, replaced by more general
-<tt class="docutils literal">initThread()</tt> which fixes a number of setup problems in threads</li>
-<li>Memory leak when using iconv encoders in tostring/write</li>
-<li>Deep copying Elements and ElementTrees maintains the document information</li>
-<li>Serialization functions raise LookupError for unknown encodings</li>
-<li>Memory deallocation crash resulting from deep copying elements</li>
-<li>Some ElementTree methods could crash if the root node was not initialized
-(neither file nor element passed to the constructor)</li>
-<li>Element/SubElement failed to set attribute namespaces from passed <tt class="docutils literal">attrib</tt>
-dictionary</li>
-<li><tt class="docutils literal">tostring()</tt> adds an XML declaration for non-ASCII encodings</li>
-<li><tt class="docutils literal">tostring()</tt> failed to serialize encodings that contain 0-bytes</li>
-<li>ElementTree.xpath() and XPathDocumentEvaluator were not using the
-ElementTree root node as reference point</li>
-<li>Calling <tt class="docutils literal"><span class="pre">document('')</span></tt> in XSLT failed to return the stylesheet</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id255">
-<h1>0.9.2 (2006-05-10)</h1>
-<div class="section" id="id256">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Speedup for Element.makeelement(): the new element reuses the original
-libxml2 document instead of creating a new empty one</li>
-<li>Speedup for reversed() iteration over element children (Py2.4+ only)</li>
-<li>ElementTree compatible QName class</li>
-<li>RelaxNG and XMLSchema accept any Element, not only ElementTrees</li>
-</ul>
-</div>
-<div class="section" id="id257">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>str(xslt_result) was broken for XSLT output other than UTF-8</li>
-<li>Memory leak if write_c14n fails to write the file after conversion</li>
-<li>Crash in XMLSchema and RelaxNG when passing non-schema documents</li>
-<li>Memory leak in RelaxNG() when RelaxNGParseError is raised</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id258">
-<h1>0.9.1 (2006-03-30)</h1>
-<div class="section" id="id259">
-<h2>Features added</h2>
-<ul class="simple">
-<li>lxml.sax.ElementTreeContentHandler checks closing elements and raises
-SaxError on mismatch</li>
-<li>lxml.sax.ElementTreeContentHandler supports namespace-less SAX events
-(startElement, endElement) and defaults to empty attributes (keyword
-argument)</li>
-<li>Speedup for repeatedly accessing element tag names</li>
-<li>Minor API performance improvements</li>
-</ul>
-</div>
-<div class="section" id="id260">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Memory deallocation bug when using XSLT output method &quot;html&quot;</li>
-<li>sax.py was handling UTF-8 encoded tag names where it shouldn't</li>
-<li>lxml.tests package will no longer be installed (is still in source tar)</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id261">
-<h1>0.9 (2006-03-20)</h1>
-<div class="section" id="id262">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Error logging API for libxml2 error messages</li>
-<li>Various performance improvements</li>
-<li>Benchmark script for lxml, ElementTree and cElementTree</li>
-<li>Support for registering extension functions through new FunctionNamespace
-class (see doc/extensions.txt)</li>
-<li>ETXPath class for XPath expressions in ElementTree notation ('//{ns}tag')</li>
-<li>Support for variables in XPath expressions (also in XPath class)</li>
-<li>XPath class for compiled XPath expressions</li>
-<li>XMLID module level function (ElementTree compatible)</li>
-<li>XMLParser API for customized libxml2 parser configuration</li>
-<li>Support for custom Element classes through new Namespace API (see
-doc/namespace_extensions.txt)</li>
-<li>Common exception base class LxmlError for module exceptions</li>
-<li>real iterator support in iter(Element), Element.getiterator()</li>
-<li>XSLT objects are callable, result trees support str()</li>
-<li>Added MANIFEST.in for easier creation of RPM files.</li>
-<li>'getparent' method on elements allows navigation to an element's
-parent element.</li>
-<li>Python core compatible SAX tree builder and SAX event generator. See
-doc/sax.txt for more information.</li>
-</ul>
-</div>
-<div class="section" id="id263">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Segfaults and memory leaks in various API functions of Element</li>
-<li>Segfault in XSLT.tostring()</li>
-<li>ElementTree objects no longer interfere, Elements can be root of different
-ElementTrees at the same time</li>
-<li>document('') works in XSLT documents read from files (in-memory documents
-cannot support this due to libxslt deficiencies)</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id264">
-<h1>0.8 (2005-11-03)</h1>
-<div class="section" id="id265">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Support for copy.deepcopy() on elements. copy.copy() works also, but
-does the same thing, and does <em>not</em> create a shallow copy, as that
-makes no sense in the context of libxml2 trees. This means a
-potential incompatibility with ElementTree, but there's more chance
-that it works than if copy.copy() isn't supported at all.</li>
-<li>Increased compatibility with (c)ElementTree; .parse() on ElementTree is
-supported and parsing of gzipped XML files works.</li>
-<li>implemented index() on elements, allowing one to find the index of a
-SubElement.</li>
-</ul>
-</div>
-<div class="section" id="id266">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Use xslt-config instead of xml2-config to find out libxml2
-directories to take into account a case where libxslt is installed
-in a different directory than libxslt.</li>
-<li>Eliminate crash condition in iteration when text nodes are changed.</li>
-<li>Passing 'None' to tostring() does not result in a segfault anymore,
-but an AssertionError.</li>
-<li>Some test fixes for Windows.</li>
-<li>Raise XMLSyntaxError and XPathSyntaxError instead of plain python
-syntax errors. This should be less confusing.</li>
-<li>Fixed error with uncaught exception in Pyrex code.</li>
-<li>Calling lxml.etree.fromstring('') throws XMLSyntaxError instead of a
-segfault.</li>
-<li>has_key() works on attrib. 'in' tests also work correctly on attrib.</li>
-<li>INSTALL.txt was saying 2.2.16 instead of 2.6.16 as a supported
-libxml2 version, as it should.</li>
-<li>Passing a UTF-8 encoded string to the XML() function would fail;
-fixed.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id267">
-<h1>0.7 (2005-06-15)</h1>
-<div class="section" id="id268">
-<h2>Features added</h2>
-<ul class="simple">
-<li>parameters (XPath expressions) can be passed to XSLT using keyword
-parameters.</li>
-<li>Simple XInclude support. Calling the xinclude() method on a tree
-will process any XInclude statements in the document.</li>
-<li>XMLSchema support. Use the XMLSchema class or the convenience
-xmlschema() method on a tree to do XML Schema (XSD) validation.</li>
-<li>Added convenience xslt() method on tree. This is less efficient
-than the XSLT object, but makes it easier to write quick code.</li>
-<li>Added convenience relaxng() method on tree. This is less efficient
-than the RelaxNG object, but makes it easier to write quick code.</li>
-<li>Make it possible to use XPathEvaluator with elements as well. The
-XPathEvaluator in this case will retain the element so multiple
-XPath queries can be made against one element efficiently. This
-replaces the second argument to the .evaluate() method that existed
-previously.</li>
-<li>Allow registerNamespace() to be called on an XPathEvaluator, after
-creation, to add additional namespaces. Also allow registerNamespaces(),
-which does the same for a namespace dictionary.</li>
-<li>Add 'prefix' attribute to element to be able to read prefix information.
-This is entirely read-only.</li>
-<li>It is possible to supply an extra nsmap keyword parameter to
-the Element() and SubElement() constructors, which supplies a
-prefix to namespace URI mapping. This will create namespace
-prefix declarations on these elements and these prefixes will show up
-in XML serialization.</li>
-</ul>
-</div>
-<div class="section" id="id269">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Killed yet another memory management related bug: trees created
-using newDoc would not get a libxml2-level dictionary, which caused
-problems when deallocating these documents later if they contained a
-node that came from a document with a dictionary.</li>
-<li>Moving namespaced elements between documents was problematic as
-references to the original document would remain. This has been fixed
-by applying xmlReconciliateNs() after each move operation.</li>
-<li>Can pass None to 'dump()' without segfaults.</li>
-<li>tostring() works properly for non-root elements as well.</li>
-<li>Cleaned out the tostring() method so it should handle encoding
-correctly.</li>
-<li>Cleaned out the ElementTree.write() method so it should handle encoding
-correctly. Writing directly to a file should also be faster, as there is no
-need to go through a Python string in that case. Made sure the test cases
-test both serializing to StringIO as well as serializing to a real file.</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id270">
-<h1>0.6 (2005-05-14)</h1>
-<div class="section" id="id271">
-<h2>Features added</h2>
-<ul class="simple">
-<li>Changed setup.py so that library_dirs is also guessed. This should
-help with compilation on the Mac OS X platform, where otherwise the
-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="id272">
-<h2>Bugs fixed</h2>
-<ul class="simple">
-<li>Do the right thing when handling namespaced attributes.</li>
-<li>fix bug where tostring() moved nodes into new documents. tostring()
-had very nasty side-effects before this fix, sorry!</li>
-</ul>
-</div>
-</div>
-<div class="section" id="id273">
-<h1>0.5.1 (2005-04-09)</h1>
-<ul class="simple">
-<li>Python 2.2 compatibility fixes.</li>
-<li>unicode fixes in Element() and Comment() as well as XML(); unicode
-input wasn't properly being UTF-8 encoded.</li>
-</ul>
-</div>
-<div class="section" id="id274">
-<h1>0.5 (2005-04-08)</h1>
-<p>Initial public release.</p>
-</div>
-</div>
-<div class="footer">
-<hr class="footer" />
-Generated on: 2013-11-07.
-
-</div>
-</body>
-</html>
diff --git a/doc/html/changes-3.2.5.html b/doc/html/changes-3.2.5.html
new file mode 100644 (file)
index 0000000..30eac51
--- /dev/null
@@ -0,0 +1,2607 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+<meta name="generator" content="Docutils 0.10: http://docutils.sourceforge.net/" />
+<title>lxml changelog</title>
+<link rel="stylesheet" href="style.css" type="text/css" />
+</head>
+<body>
+<div class="document" id="lxml-changelog">
+<h1 class="title">lxml changelog</h1>
+
+<div class="section" id="id1">
+<h1>3.2.5 (2014-01-02)</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>Crash in xmlfile() when closing open elements out of order in an error case.</li>
+<li>Crash in target parsing with attributes.</li>
+<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.
+comment or PI).</li>
+</ul>
+</div>
+<div class="section" id="other-changes">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id2">
+<h1>3.2.4 (2013-11-07)</h1>
+<div class="section" id="id3">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id4">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Memory leak when creating an XPath evaluator in a thread.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1228881">LP#1228881</a>: <tt class="docutils literal">repr(XSLTAccessControl)</tt> failed in Python 3.</li>
+<li>Raise <tt class="docutils literal">ValueError</tt> when trying to append an Element to itself or
+to one of its own descendants.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1206077">LP#1206077</a>: htmldiff discarded whitespace from the output.</li>
+<li>Compressed plain-text serialisation to file-like objects was broken.</li>
+</ul>
+</div>
+<div class="section" id="id5">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id6">
+<h1>3.2.3 (2013-07-28)</h1>
+<div class="section" id="id7">
+<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="id8">
+<h1>3.2.2 (2013-07-28)</h1>
+<div class="section" id="id9">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id10">
+<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="id11">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Return values of user provided element class lookup methods are now
+validated against the type of the XML node they represent to prevent
+API class mismatches.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id12">
+<h1>3.2.1 (2013-05-11)</h1>
+<div class="section" id="id13">
+<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
+extension elements have gained two new boolean options <tt class="docutils literal">elements_only</tt>
+and <tt class="docutils literal">remove_blank_text</tt> that discard either all strings or whitespace-only
+strings from the result list.</li>
+</ul>
+</div>
+<div class="section" id="id14">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>When moving Elements to another tree, the namespace cleanup mechanism
+no longer drops namespace prefixes from attributes for which it finds
+a default namespace declaration, to prevent them from appearing as
+unnamespaced attributes after serialisation.</li>
+<li>Returning non-type objects from a custom class lookup method could lead
+to a crash.</li>
+<li>Instantiating and using subtypes of Comments and ProcessingInstructions
+crashed.</li>
+</ul>
+</div>
+<div class="section" id="id15">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id16">
+<h1>3.2.0 (2013-04-28)</h1>
+<div class="section" id="id17">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id18">
+<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
+parsing functions in <tt class="docutils literal">lxml.html</tt>.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/599318">LP#599318</a>: The string parsing functions in <tt class="docutils literal">lxml.html</tt> are more robust
+in the face of uncommon HTML content like framesets or missing body tags.
+Patch by Stefan Seelmann.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/712941">LP#712941</a>: I/O errors while trying to access files with paths that contain
+non-ASCII characters could raise <tt class="docutils literal">UnicodeDecodeError</tt> instead of properly
+reporting the <tt class="docutils literal">IOError</tt>.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/673205">LP#673205</a>: Parsing from in-memory strings disabled network access in the
+default parser and made subsequent attempts to parse from a URL fail.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/971754">LP#971754</a>: lxml.html.clean appends 'nofollow' to 'rel' attributes instead
+of overwriting the current value.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/715687">LP#715687</a>: lxml.html.clean no longer discards scripts that are explicitly
+allowed by the user provided whitelist.  Patch by Christine Koppelt.</li>
+</ul>
+</div>
+<div class="section" id="id19">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id20">
+<h1>3.1.2 (2013-04-12)</h1>
+<div class="section" id="id21">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id22">
+<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
+the sax bridge (i.e. the <tt class="docutils literal">handler.startElement()</tt> method) failed
+with a <tt class="docutils literal">TypeError</tt>.  Patch by Mike Bayer.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1123074">LP#1123074</a>: Fix serialisation error in XSLT output when converting
+the result tree to a Unicode string.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/105">GH#105</a>: Replace illegal usage of <tt class="docutils literal">xmlBufLength()</tt> in libxml2 2.9.0
+by properly exported API function <tt class="docutils literal">xmlBufUse()</tt>.</li>
+</ul>
+</div>
+<div class="section" id="id23">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id24">
+<h1>3.1.1 (2013-03-29)</h1>
+<div class="section" id="id25">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id26">
+<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
+an AttributeError in Py3.</li>
+<li>Illegal memory access during cleanup in incremental xmlfile writer.</li>
+</ul>
+</div>
+<div class="section" id="id27">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The externally useless class <tt class="docutils literal">lxml.etree._BaseParser</tt> was removed
+from the module dict.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id28">
+<h1>3.1.0 (2013-02-10)</h1>
+<div class="section" id="id29">
+<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="id30">
+<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
+a copy of the attributes as a plain Python dict.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/95">GH#95</a>: When used with namespace prefixes, the  <tt class="docutils literal"><span class="pre">el.find*()</span></tt> methods
+always used the first namespace mapping that was provided for each
+path expression instead of using the one that was actually passed
+in for the current run.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1092521">LP#1092521</a>, <a class="reference external" href="https://github.com/lxml/lxml/issues/91">GH#91</a>: Fix undefined C symbol in Python runtimes compiled
+without threading support.  Patch by Ulrich Seidl.</li>
+</ul>
+</div>
+<div class="section" id="id31">
+<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="id32">
+<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
+makes the API always return Unicode strings for names and text
+instead of byte strings for plain ASCII content.</li>
+<li>New incremental XML file writing API <tt class="docutils literal">etree.xmlfile()</tt>.</li>
+<li>E factory in lxml.objectify is callable to simplify the creation of
+tags with non-identifier names without having to resort to getattr().</li>
+</ul>
+</div>
+<div class="section" id="id33">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>When starting from a non-namespaced element in lxml.objectify, searching
+for a child without explicitly specifying a namespace incorrectly found
+namespaced elements with the requested local name, instead of restricting
+the search to non-namespaced children.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/85">GH#85</a>: Deprecation warnings were fixed for Python 3.x.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/33">GH#33</a>: lxml.html.fromstring() failed to accept bytes input in Py3.</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="id34">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The externally useless class <tt class="docutils literal">_ObjectifyElementMakerCaller</tt> was
+removed from the module API of lxml.objectify.</li>
+<li><a class="reference external" href="https://bugs.launchpad.net/lxml/+bug/1075622">LP#1075622</a>: lxml.builder is faster for adding text to elements with
+many children.  Patch by Anders Hammarquist.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id35">
+<h1>3.0.2 (2012-12-14)</h1>
+<div class="section" id="id36">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id37">
+<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="id38">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id39">
+<h1>3.0.1 (2012-10-14)</h1>
+<div class="section" id="id40">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id41">
+<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
+in PyPy without proper cleanup.</li>
+<li><a class="reference external" href="https://github.com/lxml/lxml/issues/71">GH#71</a>: Failure to work with libxml2 2.6.x.</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="id42">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id43">
+<h1>3.0 (2012-10-08)</h1>
+<div class="section" id="id44">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id45">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>End-of-file handling was incorrect in iterparse() when reading from
+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="id46">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The build no longer uses Cython by default unless the generated C files
+are missing.  To use Cython, pass the option &quot;--with-cython&quot;.  To ignore
+the fatal build error when Cython is required but not available (e.g. to
+run special setup.py commands that do not actually run a build), pass
+&quot;--without-cython&quot;.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta1-2012-09-26">
+<h1>3.0beta1 (2012-09-26)</h1>
+<div class="section" id="id47">
+<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="id48">
+<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="id49">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The code was adapted to work with the upcoming libxml2 2.9.0 release.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="alpha2-2012-08-23">
+<h1>3.0alpha2 (2012-08-23)</h1>
+<div class="section" id="id50">
+<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
+<tt class="docutils literal"><span class="pre">&quot;{*}name&quot;</span></tt> to search for elements with a given local name in any
+namespace. With this addition, all combinations of wildcards now work
+as expected:
+<tt class="docutils literal">&quot;{ns}name&quot;</tt>, <tt class="docutils literal"><span class="pre">&quot;{}name&quot;</span></tt>, <tt class="docutils literal"><span class="pre">&quot;{*}name&quot;</span></tt>, <tt class="docutils literal"><span class="pre">&quot;{ns}*&quot;</span></tt>, <tt class="docutils literal"><span class="pre">&quot;{}*&quot;</span></tt>
+and <tt class="docutils literal"><span class="pre">&quot;{*}*&quot;</span></tt>.  Note that <tt class="docutils literal">&quot;name&quot;</tt> is equivalent to <tt class="docutils literal"><span class="pre">&quot;{}name&quot;</span></tt>,
+but <tt class="docutils literal">&quot;*&quot;</tt> is <tt class="docutils literal"><span class="pre">&quot;{*}*&quot;</span></tt>.
+The same change applies to the <tt class="docutils literal">.getiterator()</tt>, <tt class="docutils literal">.itersiblings()</tt>,
+<tt class="docutils literal">.iterancestors()</tt>, <tt class="docutils literal">.iterdescendants()</tt>, <tt class="docutils literal">.iterchildren()</tt>
+and <tt class="docutils literal">.itertext()</tt> methods;the <tt class="docutils literal">strip_attributes()</tt>,
+<tt class="docutils literal">strip_elements()</tt> and <tt class="docutils literal">strip_tags()</tt> functions as well as the
+<tt class="docutils literal">iterparse()</tt> class.  Patch by Simon Sapin.</li>
+<li>C14N allows specifying the inclusive prefixes to be promoted
+to top-level during exclusive serialisation.</li>
+</ul>
+</div>
+<div class="section" id="id51">
+<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="id52">
+<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="id53">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Initial support for building in PyPy (through cpyext).</li>
+<li>DTD objects gained an API that allows read access to their
+declarations.</li>
+<li><tt class="docutils literal">xpathgrep.py</tt> gained support for parsing line-by-line (e.g.
+from grep output) and for surrounding the output with a new root
+tag.</li>
+<li><tt class="docutils literal"><span class="pre">E-factory</span></tt> in <tt class="docutils literal">lxml.builder</tt> accepts subtypes of known data
+types (such as string subtypes) when building elements around them.</li>
+<li>Tree iteration and <tt class="docutils literal">iterparse()</tt> with a selective <tt class="docutils literal">tag</tt>
+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="id54">
+<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
+internally, which makes them faster in many cases (especially when
+short circuiting after a single or couple of elements) and fixes
+some behavioural differences compared to <tt class="docutils literal">lxml.etree</tt>.  Note that
+this means that they no longer support arbitrary XPath expressions
+but only the subset that the <tt class="docutils literal">ElementPath</tt> language supports.
+The previous implementation was also redundant with the normal
+XPath support, which can be used as a replacement.</li>
+<li><tt class="docutils literal"><span class="pre">el.find('*')</span></tt> could accidentally return a comment or processing
+instruction that happened to be in the wrong spot.  (Same for the
+other <tt class="docutils literal"><span class="pre">.find*()</span></tt> methods.)</li>
+<li>The error logging is less intrusive and avoids a global setup where
+possible.</li>
+<li>Fixed undefined names in html5lib parser.</li>
+<li><tt class="docutils literal">xpathgrep.py</tt> did not work in Python 3.</li>
+<li><tt class="docutils literal">Element.attrib.update()</tt> did not accept an <tt class="docutils literal">attrib</tt> of
+another Element as parameter.</li>
+<li>For subtypes of <tt class="docutils literal">ElementBase</tt> that make the <tt class="docutils literal">.text</tt> or <tt class="docutils literal">.tail</tt>
+properties immutable (as in objectify, for example), inserting text
+when creating Elements through the E-Factory feature of the class
+constructor would fail with an exception, stating that the text
+cannot be modified.</li>
+</ul>
+</div>
+<div class="section" id="id55">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The code base was overhauled to properly use 'const' where the API
+of libxml2 and libxslt requests it.  This also has an impact on the
+public C-API of lxml itself, as defined in <tt class="docutils literal">etreepublic.pxd</tt>, as
+well as the provided declarations in the <tt class="docutils literal">lxml/includes/</tt> directory.
+Code that uses these declarations may have to be adapted.  On the
+plus side, this fixes several C compiler warnings, also for user
+code, thus making it easier to spot real problems again.</li>
+<li>The functionality of &quot;lxml.cssselect&quot; was moved into a separate PyPI
+package called &quot;cssselect&quot;.  To continue using it, you must install
+that package separately.  The &quot;lxml.cssselect&quot; module is still
+available and provides the same interface, provided the &quot;cssselect&quot;
+package can be imported at runtime.</li>
+<li>Element attributes passed in as an <tt class="docutils literal">attrib</tt> dict or as keyword
+arguments are now sorted by (namespaced) name before being created
+to make their order predictable for serialisation and iteration.
+Note that adding or deleting attributes afterwards does not take
+that order into account, i.e. setting a new attribute appends it
+after the existing ones.</li>
+<li>Several classes that are for internal use only were removed
+from the <tt class="docutils literal">lxml.etree</tt> module dict:
+<tt class="docutils literal">_InputDocument, _ResolverRegistry, _ResolverContext, _BaseContext,
+_ExsltRegExp, _IterparseContext, _TempStore, _ExceptionContext,
+__ContentOnlyElement, _AttribIterator, _NamespaceRegistry,
+_ClassNamespaceRegistry, _FunctionNamespaceRegistry,
+_XPathFunctionNamespaceRegistry, _ParserDictionaryContext,
+_FileReaderContext, _ParserContext, _PythonSaxParserTarget,
+_TargetParserContext, _ReadOnlyProxy, _ReadOnlyPIProxy,
+_ReadOnlyEntityProxy, _ReadOnlyElementProxy, _OpaqueNodeWrapper,
+_OpaqueDocumentWrapper, _ModifyContentOnlyProxy,
+_ModifyContentOnlyPIProxy, _ModifyContentOnlyEntityProxy,
+_AppendOnlyElementProxy, _SaxParserContext, _FilelikeWriter,
+_ParserSchemaValidationContext, _XPathContext,
+_XSLTResolverContext, _XSLTContext, _XSLTQuotedStringParam</tt></li>
+<li>Several internal classes can no longer be inherited from:
+<tt class="docutils literal">_InputDocument, _ResolverRegistry, _ExsltRegExp, _ElementUnicodeResult,
+_IterparseContext, _TempStore, _AttribIterator, _ClassNamespaceRegistry,
+_XPathFunctionNamespaceRegistry, _ParserDictionaryContext,
+_FileReaderContext, _PythonSaxParserTarget, _TargetParserContext,
+_ReadOnlyPIProxy, _ReadOnlyEntityProxy, _OpaqueDocumentWrapper,
+_ModifyContentOnlyPIProxy, _ModifyContentOnlyEntityProxy,
+_AppendOnlyElementProxy, _FilelikeWriter, _ParserSchemaValidationContext,
+_XPathContext, _XSLTResolverContext, _XSLTContext, _XSLTQuotedStringParam,
+_XSLTResultTree, _XSLTProcessingInstruction</tt></li>
+</ul>
+</div>
+</div>
+<div class="section" id="id56">
+<h1>2.3.6 (2012-09-28)</h1>
+<div class="section" id="id57">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id58">
+<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="id59">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id60">
+<h1>2.3.5 (2012-07-31)</h1>
+<div class="section" id="id61">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id62">
+<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="id63">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id64">
+<h1>2.3.4 (2012-03-26)</h1>
+<div class="section" id="id65">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id66">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when building an nsmap (Element property) with empty
+namespace URIs.</li>
+<li>Crash due to race condition when errors (or user messages) occur
+during threaded XSLT processing.</li>
+<li>XSLT stylesheet compilation could ignore compilation errors.</li>
+</ul>
+</div>
+<div class="section" id="id67">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id68">
+<h1>2.3.3 (2012-01-04)</h1>
+<div class="section" id="id69">
+<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="id70">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Fixed a crash when using <tt class="docutils literal">iterparse()</tt> for HTML parsing and
+requesting start events.</li>
+<li>Fixed parsing of more selectors in cssselect.  Whitespace before
+pseudo-elements and pseudo-classes is significant as it is a
+descendant combinator.
+&quot;E :pseudo&quot; should parse the same as &quot;E *:pseudo&quot;, not &quot;E:pseudo&quot;.
+Patch by Simon Sapin.</li>
+<li>lxml.html.diff no longer raises an exception when hitting
+'img' tags without 'src' attribute.</li>
+</ul>
+</div>
+<div class="section" id="id71">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id72">
+<h1>2.3.2 (2011-11-11)</h1>
+<div class="section" id="id73">
+<h2>Features added</h2>
+<ul class="simple">
+<li><tt class="docutils literal">lxml.objectify.deannotate()</tt> has a new boolean option
+<tt class="docutils literal">cleanup_namespaces</tt> to remove the objectify namespace
+declarations (and generally clean up the namespace declarations)
+after removing the type annotations.</li>
+<li><tt class="docutils literal">lxml.objectify</tt> gained its own <tt class="docutils literal">SubElement()</tt> function as a
+copy of <tt class="docutils literal">etree.SubElement</tt> to avoid an otherwise redundant import
+of <tt class="docutils literal">lxml.etree</tt> on the user side.</li>
+</ul>
+</div>
+<div class="section" id="id74">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Fixed the &quot;descendant&quot; bug in cssselect a second time (after a first
+fix in lxml 2.3.1).  The previous change resulted in a serious
+performance regression for the XPath based evaluation of the
+translated expression.  Note that this breaks the usage of some of
+the generated XPath expressions as XSLT location paths that
+previously worked in 2.3.1.</li>
+<li>Fixed parsing of some selectors in cssselect. Whitespace after combinators
+&quot;&gt;&quot;, &quot;+&quot; and &quot;~&quot; is now correctly ignored. Previously is was parsed as
+a descendant combinator. For example, &quot;div&gt; .foo&quot; was parsed the same as
+&quot;div&gt;* .foo&quot; instead of &quot;div&gt;.foo&quot;. Patch by Simon Sapin.</li>
+</ul>
+</div>
+<div class="section" id="id75">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id76">
+<h1>2.3.1 (2011-09-25)</h1>
+<div class="section" id="id77">
+<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
+tags and their content (i.e. their whole subtree).</li>
+<li><tt class="docutils literal">pi.get()</tt> and <tt class="docutils literal">pi.attrib</tt> on processing instructions to parse
+pseudo-attributes from the text content of processing instructions.</li>
+<li><tt class="docutils literal">lxml.get_include()</tt> returns a list of include paths that can be
+used to compile external C code against lxml.etree.  This is
+specifically required for statically linked lxml builds when code
+needs to compile against the exact same header file versions as lxml
+itself.</li>
+<li><tt class="docutils literal">Resolver.resolve_file()</tt> takes an additional option
+<tt class="docutils literal">close_file</tt> that configures if the file(-like) object will be
+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="id78">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>HTML cleaning didn't remove 'data:' links.</li>
+<li>The html5lib parser integration now uses the 'official'
+implementation in html5lib itself, which makes it work with newer
+releases of the library.</li>
+<li>In <tt class="docutils literal">lxml.sax</tt>, <tt class="docutils literal">endElementNS()</tt> could incorrectly reject a plain
+tag name when the corresponding start event inferred the same plain
+tag name to be in the default namespace.</li>
+<li>When an open file-like object is passed into <tt class="docutils literal">parse()</tt> or
+<tt class="docutils literal">iterparse()</tt>, the parser will no longer close it after use.  This
+reverts a change in lxml 2.3 where all files would be closed.  It is
+the users responsibility to properly close the file(-like) object,
+also in error cases.</li>
+<li>Assertion error in lxml.html.cleaner when discarding top-level elements.</li>
+<li>In lxml.cssselect, use the xpath 'A//B' (short for
+'A/descendant-or-self::node()/B') instead of 'A/descendant::B' for
+the css descendant selector ('A B').  This makes a few edge cases
+like <tt class="docutils literal">&quot;div <span class="pre">*:last-child&quot;</span></tt> consistent with the selector behavior in
+WebKit and Firefox, and makes more css expressions valid location
+paths (for use in xsl:template match).</li>
+<li>In lxml.html, non-selected <tt class="docutils literal">&lt;option&gt;</tt> tags no longer show up in the
+collected form values.</li>
+<li>Adding/removing <tt class="docutils literal">&lt;option&gt;</tt> values to/from a multiple select form
+field properly selects them and unselects them.</li>
+</ul>
+</div>
+<div class="section" id="id79">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Static builds can specify the download directory with the
+<tt class="docutils literal"><span class="pre">--download-dir</span></tt> option.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id80">
+<h1>2.3 (2011-02-06)</h1>
+<div class="section" id="id81">
+<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="id82">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>When finished reading from a file-like object, the parser
+immediately calls its <tt class="docutils literal">.close()</tt> method.</li>
+<li>When finished parsing, <tt class="docutils literal">iterparse()</tt> immediately closes the input
+file.</li>
+<li>Work-around for libxml2 bug that can leave the HTML parser in a
+non-functional state after parsing a severly broken document (fixed
+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="id83">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Some public functions in the Cython-level C-API have more explicit
+return types.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta1-2010-09-06">
+<h1>2.3beta1 (2010-09-06)</h1>
+<div class="section" id="id84">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id85">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash in newer libxml2 versions when moving elements between
+documents that had attributes on replaced XInclude nodes.</li>
+<li><tt class="docutils literal">XMLID()</tt> function was missing the optional <tt class="docutils literal">parser</tt> and
+<tt class="docutils literal">base_url</tt> parameters.</li>
+<li>Searching for wildcard tags in <tt class="docutils literal">iterparse()</tt> was broken in Py3.</li>
+<li><tt class="docutils literal">lxml.html.open_in_browser()</tt> didn't work in Python 3 due to the
+use of os.tempnam.  It now takes an optional 'encoding' parameter.</li>
+</ul>
+</div>
+<div class="section" id="id86">
+<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="id87">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id88">
+<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="id89">
+<h2>Other changes</h2>
+<ul class="simple">
+<li><tt class="docutils literal">repr()</tt> of Element objects shows the hex ID with leading 0x
+(following ElementTree 1.3).</li>
+</ul>
+</div>
+</div>
+<div class="section" id="alpha1-2010-06-19">
+<h1>2.3alpha1 (2010-06-19)</h1>
+<div class="section" id="id90">
+<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>
+to pass a prefix-to-namespace mapping for the selector.</li>
+<li>New function <tt class="docutils literal">lxml.etree.register_namespace(prefix, uri)</tt> that
+globally registers a namespace prefix for a namespace that newly
+created Elements in that namespace will use automatically.  Follows
+ElementTree 1.3.</li>
+<li>Support 'unicode' string name as encoding parameter in
+<tt class="docutils literal">tostring()</tt>, following ElementTree 1.3.</li>
+<li>Support 'c14n' serialisation method in <tt class="docutils literal">ElementTree.write()</tt> and
+<tt class="docutils literal">tostring()</tt>, following ElementTree 1.3.</li>
+<li>The ElementPath expression syntax (<tt class="docutils literal"><span class="pre">el.find*()</span></tt>) was extended to
+match the upcoming ElementTree 1.3 that will ship in the standard
+library of Python 3.2/2.7.  This includes extended support for
+predicates as well as namespace prefixes (as known from XPath).</li>
+<li>During regular XPath evaluation, various ESXLT functions are
+available within their namespace when using libxslt 1.1.26 or later.</li>
+<li>Support passing a readily configured logger instance into
+<tt class="docutils literal">PyErrorLog</tt>, instead of a logger name.</li>
+<li>On serialisation, the new <tt class="docutils literal">doctype</tt> parameter can be used to
+override the DOCTYPE (internal subset) of the document.</li>
+<li>New parameter <tt class="docutils literal">output_parent</tt> to <tt class="docutils literal">XSLTExtension.apply_templates()</tt>
+to append the resulting content directly to an output element.</li>
+<li><tt class="docutils literal">XSLTExtension.process_children()</tt> to process the content of the
+XSLT extension element itself.</li>
+<li>ISO-Schematron support based on the de-facto Schematron reference
+'skeleton implementation'.</li>
+<li>XSLT objects now take XPath object as <tt class="docutils literal">__call__</tt> stylesheet
+parameters.</li>
+<li>Enable path caching in ElementPath (<tt class="docutils literal"><span class="pre">el.find*()</span></tt>) to avoid parsing
+overhead.</li>
+<li>Setting the value of a namespaced attribute always uses a prefixed
+namespace instead of the default namespace even if both declare the
+same namespace URI.  This avoids serialisation problems when an
+attribute from a default namespace is set on an element from a
+different namespace.</li>
+<li>XSLT extension elements: support for XSLT context nodes other than
+elements: document root, comments, processing instructions.</li>
+<li>Support for strings (in addition to Elements) in node-sets returned
+by extension functions.</li>
+<li>Forms that lack an <tt class="docutils literal">action</tt> attribute default to the base URL of
+the document on submit.</li>
+<li>XPath attribute result strings have an <tt class="docutils literal">attrname</tt> property.</li>
+<li>Namespace URIs get validated against RFC 3986 at the API level
+(required by the XML namespace specification).</li>
+<li>Target parsers show their target object in the <tt class="docutils literal">.target</tt> property
+(compatible with ElementTree).</li>
+</ul>
+</div>
+<div class="section" id="id91">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>API is hardened against invalid proxy instances to prevent crashes
+due to incorrectly instantiated Element instances.</li>
+<li>Prevent crash when instantiating <tt class="docutils literal">CommentBase</tt> and friends.</li>
+<li>Export ElementTree compatible XML parser class as
+<tt class="docutils literal">XMLTreeBuilder</tt>, as it is called in ET 1.2.</li>
+<li>ObjectifiedDataElements in lxml.objectify were not hashable.  They
+now use the hash value of the underlying Python value (string,
+number, etc.) to which they compare equal.</li>
+<li>Parsing broken fragments in lxml.html could fail if the fragment
+contained an orphaned closing '&lt;/div&gt;' tag.</li>
+<li>Using XSLT extension elements around the root of the output document
+crashed.</li>
+<li><tt class="docutils literal">lxml.cssselect</tt> did not distinguish between <tt class="docutils literal"><span class="pre">x[attr=&quot;val&quot;]</span></tt> and
+<tt class="docutils literal">x <span class="pre">[attr=&quot;val&quot;]</span></tt> (with a space).  The latter now matches the
+attribute independent of the element.</li>
+<li>Rewriting multiple links inside of HTML text content could end up
+replacing unrelated content as replacements could impact the
+reported position of subsequent matches.  Modifications are now
+simplified by letting the <tt class="docutils literal">iterlinks()</tt> generator in <tt class="docutils literal">lxml.html</tt>
+return links in reversed order if they appear inside the same text
+node.  Thus, replacements and link-internal modifications no longer
+change the position of links reported afterwards.</li>
+<li>The <tt class="docutils literal">.value</tt> attribute of <tt class="docutils literal">textarea</tt> elements in lxml.html did
+not represent the complete raw value (including child tags etc.). It
+now serialises the complete content on read and replaces the
+complete content by a string on write.</li>
+<li>Target parser didn't call <tt class="docutils literal">.close()</tt> on the target object if
+parsing failed.  Now it is guaranteed that <tt class="docutils literal">.close()</tt> will be
+called after parsing, regardless of the outcome.</li>
+</ul>
+</div>
+<div class="section" id="id92">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Official support for Python 3.1.2 and later.</li>
+<li>Static MS Windows builds can now download their dependencies
+themselves.</li>
+<li><tt class="docutils literal">Element.attrib</tt> no longer uses a cyclic reference back to its
+Element object.  It therefore no longer requires the garbage
+collector to clean up.</li>
+<li>Static builds include libiconv, in addition to libxml2 and libxslt.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id93">
+<h1>2.2.8 (2010-09-02)</h1>
+<div class="section" id="id94">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash in newer libxml2 versions when moving elements between
+documents that had attributes on replaced XInclude nodes.</li>
+<li>Import fix for urljoin in Python 3.1+.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id95">
+<h1>2.2.7 (2010-07-24)</h1>
+<div class="section" id="id96">
+<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>
+<div class="section" id="id97">
+<h1>2.2.6 (2010-03-02)</h1>
+<div class="section" id="id98">
+<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="id99">
+<h1>2.2.5 (2010-02-28)</h1>
+<div class="section" id="id100">
+<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="id101">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash in XPath evaluation when reading smart strings from a document
+other than the original context document.</li>
+<li>Support recent versions of html5lib by not requiring its
+<tt class="docutils literal">XHTMLParser</tt> in <tt class="docutils literal">htmlparser.py</tt> anymore.</li>
+<li>Manually instantiating the custom element classes in
+<tt class="docutils literal">lxml.objectify</tt> could crash.</li>
+<li>Invalid XML text characters were not rejected by the API when they
+appeared in unicode strings directly after non-ASCII characters.</li>
+<li>lxml.html.open_http_urllib() did not work in Python 3.</li>
+<li>The functions <tt class="docutils literal">strip_tags()</tt> and <tt class="docutils literal">strip_elements()</tt> in
+<tt class="docutils literal">lxml.etree</tt> did not remove all occurrences of a tag in all cases.</li>
+<li>Crash in XSLT extension elements when the XSLT context node is not
+an element.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id102">
+<h1>2.2.4 (2009-11-11)</h1>
+<div class="section" id="id103">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Static build of libxml2/libxslt was broken.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id104">
+<h1>2.2.3 (2009-10-30)</h1>
+<div class="section" id="id105">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id106">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>The <tt class="docutils literal">resolve_entities</tt> option did not work in the incremental feed
+parser.</li>
+<li>Looking up and deleting attributes without a namespace could hit a
+namespaced attribute of the same name instead.</li>
+<li>Late errors during calls to <tt class="docutils literal">SubElement()</tt> (e.g. attribute related
+ones) could leave a partially initialised element in the tree.</li>
+<li>Modifying trees that contain parsed entity references could result
+in an infinite loop.</li>
+<li>ObjectifiedElement.__setattr__ created an empty-string child element when the
+attribute value was rejected as a non-unicode/non-ascii string</li>
+<li>Syntax errors in <tt class="docutils literal">lxml.cssselect</tt> could result in misleading error
+messages.</li>
+<li>Invalid syntax in CSS expressions could lead to an infinite loop in
+the parser of <tt class="docutils literal">lxml.cssselect</tt>.</li>
+<li>CSS special character escapes were not properly handled in
+<tt class="docutils literal">lxml.cssselect</tt>.</li>
+<li>CSS Unicode escapes were not properly decoded in <tt class="docutils literal">lxml.cssselect</tt>.</li>
+<li>Select options in HTML forms that had no explicit <tt class="docutils literal">value</tt>
+attribute were not handled correctly.  The HTML standard dictates
+that their value is defined by their text content.  This is now
+supported by lxml.html.</li>
+<li>XPath raised a TypeError when finding CDATA sections.  This is now
+fully supported.</li>
+<li>Calling <tt class="docutils literal">help(lxml.objectify)</tt> didn't work at the prompt.</li>
+<li>The <tt class="docutils literal">ElementMaker</tt> in lxml.objectify no longer defines the default
+namespaces when annotation is disabled.</li>
+<li>Feed parser failed to honout the 'recover' option on parse errors.</li>
+<li>Diverting the error logging to Python's logging system was broken.</li>
+</ul>
+</div>
+<div class="section" id="id107">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id108">
+<h1>2.2.2 (2009-06-21)</h1>
+<div class="section" id="id109">
+<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>,
+<tt class="docutils literal">strip_tags()</tt> in lxml.etree to remove attributes/subtrees/tags
+from a subtree.</li>
+</ul>
+</div>
+<div class="section" id="id110">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Namespace cleanup on subtree insertions could result in missing
+namespace declarations (and potentially crashes) if the element
+defining a namespace was deleted and the namespace was not used by
+the top element of the inserted subtree but only in deeper subtrees.</li>
+<li>Raising an exception from a parser target callback didn't always
+terminate the parser.</li>
+<li>Only {true, false, 1, 0} are accepted as the lexical representation for
+BoolElement ({True, False, T, F, t, f} not any more), restoring lxml &lt;= 2.0
+behaviour.</li>
+</ul>
+</div>
+<div class="section" id="id111">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id112">
+<h1>2.2.1 (2009-06-02)</h1>
+<div class="section" id="id113">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Injecting default attributes into a document during XML Schema
+validation (also at parse time).</li>
+<li>Pass <tt class="docutils literal">huge_tree</tt> parser option to disable parser security
+restrictions imposed by libxml2 2.7.</li>
+</ul>
+</div>
+<div class="section" id="id114">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>The script for statically building libxml2 and libxslt didn't work
+in Py3.</li>
+<li><tt class="docutils literal">XMLSchema()</tt> also passes invalid schema documents on to libxml2
+for parsing (which could lead to a crash before release 2.6.24).</li>
+</ul>
+</div>
+<div class="section" id="id115">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id116">
+<h1>2.2 (2009-03-21)</h1>
+<div class="section" id="id117">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Support for <tt class="docutils literal">standalone</tt> flag in XML declaration through
+<tt class="docutils literal">tree.docinfo.standalone</tt> and by passing <tt class="docutils literal">standalone=True/False</tt>
+on serialisation.</li>
+</ul>
+</div>
+<div class="section" id="id118">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when parsing an XML Schema with external imports from a
+filename.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta4-2009-02-27">
+<h1>2.2beta4 (2009-02-27)</h1>
+<div class="section" id="id119">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Support strings and instantiable Element classes as child arguments
+to the constructor of custom Element classes.</li>
+<li>GZip compression support for serialisation to files and file-like
+objects.</li>
+</ul>
+</div>
+<div class="section" id="id120">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Deep-copying an ElementTree copied neither its sibling PIs and
+comments nor its internal/external DTD subsets.</li>
+<li>Soupparser failed on broken attributes without values.</li>
+<li>Crash in XSLT when overwriting an already defined attribute using
+<tt class="docutils literal">xsl:attribute</tt>.</li>
+<li>Crash bug in exception handling code under Python 3.  This was due
+to a problem in Cython, not lxml itself.</li>
+<li><tt class="docutils literal">lxml.html.FormElement._name()</tt> failed for non top-level forms.</li>
+<li><tt class="docutils literal">TAG</tt> special attribute in constructor of custom Element classes
+was evaluated incorrectly.</li>
+</ul>
+</div>
+<div class="section" id="id121">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Official support for Python 3.0.1.</li>
+<li><tt class="docutils literal">Element.findtext()</tt> now returns an empty string instead of None
+for Elements without text content.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta3-2009-02-17">
+<h1>2.2beta3 (2009-02-17)</h1>
+<div class="section" id="id122">
+<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="id123">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Memory leak in XPath evaluators.</li>
+<li>Crash when parsing indented XML in one thread and merging it with
+other documents parsed in another thread.</li>
+<li>Setting the <tt class="docutils literal">base</tt> attribute in <tt class="docutils literal">lxml.objectify</tt> from a unicode
+string failed.</li>
+<li>Fixes following changes in Python 3.0.1.</li>
+<li>Minor fixes for Python 3.</li>
+</ul>
+</div>
+<div class="section" id="id124">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The global error log (which is copied into the exception log) is now
+local to a thread, which fixes some race conditions.</li>
+<li>More robust error handling on serialisation.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta2-2009-01-25">
+<h1>2.2beta2 (2009-01-25)</h1>
+<div class="section" id="id125">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Potential memory leak on exception handling.  This was due to a
+problem in Cython, not lxml itself.</li>
+<li><tt class="docutils literal">iter_links</tt> (and related link-rewriting functions) in
+<tt class="docutils literal">lxml.html</tt> would interpret CSS like <tt class="docutils literal"><span class="pre">url(&quot;link&quot;)</span></tt> incorrectly
+(treating the quotation marks as part of the link).</li>
+<li>Failing import on systems that have an <tt class="docutils literal">io</tt> module.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id126">
+<h1>2.1.5 (2009-01-06)</h1>
+<div class="section" id="id127">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Potential memory leak on exception handling.  This was due to a
+problem in Cython, not lxml itself.</li>
+<li>Failing import on systems that have an <tt class="docutils literal">io</tt> module.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta1-2008-12-12">
+<h1>2.2beta1 (2008-12-12)</h1>
+<div class="section" id="id128">
+<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="id129">
+<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="id130">
+<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="id131">
+<h1>2.1.4 (2008-12-12)</h1>
+<div class="section" id="id132">
+<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="id133">
+<h1>2.0.11 (2008-12-12)</h1>
+<div class="section" id="id134">
+<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="alpha1-2008-11-23">
+<h1>2.2alpha1 (2008-11-23)</h1>
+<div class="section" id="id135">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Support for XSLT result tree fragments in XPath/XSLT extension
+functions.</li>
+<li>QName objects have new properties <tt class="docutils literal">namespace</tt> and <tt class="docutils literal">localname</tt>.</li>
+<li>New options for exclusive C14N and C14N without comments.</li>
+<li>Instantiating a custom Element classes creates a new Element.</li>
+</ul>
+</div>
+<div class="section" id="id136">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>XSLT didn't inherit the parse options of the input document.</li>
+<li>0-bytes could slip through the API when used inside of Unicode
+strings.</li>
+<li>With <tt class="docutils literal">lxml.html.clean.autolink</tt>, links with balanced parenthesis,
+that end in a parenthesis, will be linked in their entirety (typical
+with Wikipedia links).</li>
+</ul>
+</div>
+<div class="section" id="id137">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id138">
+<h1>2.1.3 (2008-11-17)</h1>
+<div class="section" id="id139">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id140">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Ref-count leaks when lxml enters a try-except statement while an
+outside exception lives in sys.exc_*(). This was due to a problem in
+Cython, not lxml itself.</li>
+<li>Parser Unicode decoding errors could get swallowed by other
+exceptions.</li>
+<li>Name/import errors in some Python modules.</li>
+<li>Internal DTD subsets that did not specify a system or public ID were
+not serialised and did not appear in the docinfo property of
+ElementTrees.</li>
+<li>Fix a pre-Py3k warning when parsing from a gzip file in Py2.6.</li>
+<li>Test suite fixes for libxml2 2.7.</li>
+<li>Resolver.resolve_string() did not work for non-ASCII byte strings.</li>
+<li>Resolver.resolve_file() was broken.</li>
+<li>Overriding the parser encoding didn't work for many encodings.</li>
+</ul>
+</div>
+<div class="section" id="id141">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id142">
+<h1>2.0.10 (2008-11-17)</h1>
+<div class="section" id="id143">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Ref-count leaks when lxml enters a try-except statement while an
+outside exception lives in sys.exc_*(). This was due to a problem in
+Cython, not lxml itself.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id144">
+<h1>2.1.2 (2008-09-05)</h1>
+<div class="section" id="id145">
+<h2>Features added</h2>
+<ul class="simple">
+<li>lxml.etree now tries to find the absolute path name of files when
+parsing from a file-like object.  This helps custom resolvers when
+resolving relative URLs, as lixbml2 can prepend them with the path
+of the source document.</li>
+</ul>
+</div>
+<div class="section" id="id146">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Memory problem when passing documents between threads.</li>
+<li>Target parser did not honour the <tt class="docutils literal">recover</tt> option and raised an
+exception instead of calling <tt class="docutils literal">.close()</tt> on the target.</li>
+</ul>
+</div>
+<div class="section" id="id147">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id148">
+<h1>2.0.9 (2008-09-05)</h1>
+<div class="section" id="id149">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Memory problem when passing documents between threads.</li>
+<li>Target parser did not honour the <tt class="docutils literal">recover</tt> option and raised an
+exception instead of calling <tt class="docutils literal">.close()</tt> on the target.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id150">
+<h1>2.1.1 (2008-07-24)</h1>
+<div class="section" id="id151">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id152">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when parsing XSLT stylesheets in a thread and using them in
+another.</li>
+<li>Encoding problem when including text with ElementInclude under
+Python 3.</li>
+</ul>
+</div>
+<div class="section" id="id153">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id154">
+<h1>2.0.8 (2008-07-24)</h1>
+<div class="section" id="id155">
+<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="id156">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when parsing XSLT stylesheets in a thread and using them in
+another.</li>
+<li>CSS selector parser dropped remaining expression after a function
+with parameters.</li>
+</ul>
+</div>
+<div class="section" id="id157">
+<h2>Other changes</h2>
+</div>
+</div>
+<div class="section" id="id158">
+<h1>2.1 (2008-07-09)</h1>
+<div class="section" id="id159">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Smart strings can be switched off in XPath (<tt class="docutils literal">smart_strings</tt>
+keyword option).</li>
+<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="id160">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Custom resolvers were not used for XMLSchema includes/imports and
+XInclude processing.</li>
+<li>CSS selector parser dropped remaining expression after a function
+with parameters.</li>
+</ul>
+</div>
+<div class="section" id="id161">
+<h2>Other changes</h2>
+<ul class="simple">
+<li><tt class="docutils literal">objectify.enableRecursiveStr()</tt> was removed, use
+<tt class="docutils literal">objectify.enable_recursive_str()</tt> instead</li>
+<li>Speed-up when running XSLTs on documents from other threads</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id162">
+<h1>2.0.7 (2008-06-20)</h1>
+<div class="section" id="id163">
+<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="id164">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Descending dot-separated classes in CSS selectors were not resolved
+correctly.</li>
+<li><tt class="docutils literal">ElementTree.parse()</tt> didn't handle target parser result.</li>
+<li>Potential threading problem in XInclude.</li>
+<li>Crash in Element class lookup classes when the __init__() method of
+the super class is not called from Python subclasses.</li>
+</ul>
+</div>
+<div class="section" id="id165">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Non-ASCII characters in attribute values are no longer escaped on
+serialisation.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta3-2008-06-19">
+<h1>2.1beta3 (2008-06-19)</h1>
+<div class="section" id="id166">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Major overhaul of <tt class="docutils literal">tools/xpathgrep.py</tt> script.</li>
+<li>Pickling <tt class="docutils literal">ElementTree</tt> objects in lxml.objectify.</li>
+<li>Support for parsing from file-like objects that return unicode
+strings.</li>
+<li>New function <tt class="docutils literal">etree.cleanup_namespaces(el)</tt> that removes unused
+namespace declarations from a (sub)tree (experimental).</li>
+<li>XSLT results support the buffer protocol in Python 3.</li>
+<li>Polymorphic functions in <tt class="docutils literal">lxml.html</tt> that accept either a tree or
+a parsable string will return either a UTF-8 encoded byte string, a
+unicode string or a tree, based on the type of the input.
+Previously, the result was always a byte string or a tree.</li>
+<li>Support for Python 2.6 and 3.0 beta.</li>
+<li>File name handling now uses a heuristic to convert between byte
+strings (usually filenames) and unicode strings (usually URLs).</li>
+<li>Parsing from a plain file object frees the GIL under Python 2.x.</li>
+<li>Running <tt class="docutils literal">iterparse()</tt> on a plain file (or filename) frees the GIL
+on reading under Python 2.x.</li>
+<li>Conversion functions <tt class="docutils literal">html_to_xhtml()</tt> and <tt class="docutils literal">xhtml_to_html()</tt> in
+lxml.html (experimental).</li>
+<li>Most features in lxml.html work for XHTML namespaced tag names
+(experimental).</li>
+</ul>
+</div>
+<div class="section" id="id167">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><tt class="docutils literal">ElementTree.parse()</tt> didn't handle target parser result.</li>
+<li>Crash in Element class lookup classes when the __init__() method of
+the super class is not called from Python subclasses.</li>
+<li>A number of problems related to unicode/byte string conversion of
+filenames and error messages were fixed.</li>
+<li>Building on MacOS-X now passes the &quot;flat_namespace&quot; option to the C
+compiler, which reportedly prevents build quirks and crashes on this
+platform.</li>
+<li>Windows build was broken.</li>
+<li>Rare crash when serialising to a file object with certain encodings.</li>
+</ul>
+</div>
+<div class="section" id="id168">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Non-ASCII characters in attribute values are no longer escaped on
+serialisation.</li>
+<li>Passing non-ASCII byte strings or invalid unicode strings as .tag,
+namespaces, etc. will result in a ValueError instead of an
+AssertionError (just like the tag well-formedness check).</li>
+<li>Up to several times faster attribute access (i.e. tree traversal) in
+lxml.objectify.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id169">
+<h1>2.0.6 (2008-05-31)</h1>
+<div class="section" id="id170">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id171">
+<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>
+<li>Windows build was broken.</li>
+<li>Moving a subtree from a document created in one thread into a
+document of another thread could crash when the rest of the source
+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="id172">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>lxml should now build without problems on MacOS-X.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="beta2-2008-05-02">
+<h1>2.1beta2 (2008-05-02)</h1>
+<div class="section" id="id173">
+<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>
+<li>lxml.html has a new parser class <tt class="docutils literal">XHTMLParser</tt> and a module
+attribute <tt class="docutils literal">xhtml_parser</tt> that provide XML parsers that are
+pre-configured for the lxml.html package.</li>
+</ul>
+</div>
+<div class="section" id="id174">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Moving a subtree from a document created in one thread into a
+document of another thread could crash when the rest of the source
+document is deleted while the subtree is still in use.</li>
+<li>Passing an nsmap when creating an Element will no longer strip
+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="id175">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>If the default namespace is redundantly defined with a prefix on the
+same Element, the prefix will now be preferred for subelements and
+attributes.  This allows users to work around a problem in libxml2
+where attributes from the default namespace could serialise without
+a prefix even when they appear on an Element with a different
+namespace (i.e. they would end up in the wrong namespace).</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id176">
+<h1>2.0.5 (2008-05-01)</h1>
+<div class="section" id="id177">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id178">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Resolving to a filename in custom resolvers didn't work.</li>
+<li>lxml did not honour libxslt's second error state &quot;STOPPED&quot;, which
+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="id179">
+<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="id180">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Error logging in Schematron (requires libxml2 2.6.32 or later).</li>
+<li>Parser option <tt class="docutils literal">strip_cdata</tt> for normalising or keeping CDATA
+sections.  Defaults to <tt class="docutils literal">True</tt> as before, thus replacing CDATA
+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="id181">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Resolving to a filename in custom resolvers didn't work.</li>
+<li>lxml did not honour libxslt's second error state &quot;STOPPED&quot;, which
+let some XSLT errors pass silently.</li>
+<li>Memory leak in Schematron with libxml2 &gt;= 2.6.31.</li>
+<li>lxml.etree accepted non well-formed namespace prefix names.</li>
+</ul>
+</div>
+<div class="section" id="id182">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Major cleanup in internal <tt class="docutils literal">moveNodeToDocument()</tt> function, which
+takes care of namespace cleanup when moving elements between
+different namespace contexts.</li>
+<li>New Elements created through the <tt class="docutils literal">makeelement()</tt> method of an HTML
+parser or through lxml.html now end up in a new HTML document
+(doctype HTML 4.01 Transitional) instead of a generic XML document.
+This mostly impacts the serialisation and the availability of a DTD
+context.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id183">
+<h1>2.0.4 (2008-04-13)</h1>
+<div class="section" id="id184">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id185">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Hanging thread in conjunction with GTK threading.</li>
+<li>Crash bug in iterparse when moving elements into other documents.</li>
+<li>HTML elements' <tt class="docutils literal">.cssselect()</tt> method was broken.</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="id186">
+<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="id187">
+<h2>Features added</h2>
+<ul class="simple">
+<li>New event types 'comment' and 'pi' in <tt class="docutils literal">iterparse()</tt>.</li>
+<li><tt class="docutils literal">XSLTAccessControl</tt> instances have a property <tt class="docutils literal">options</tt> that
+returns a dict of access configuration options.</li>
+<li>Constant instances <tt class="docutils literal">DENY_ALL</tt> and <tt class="docutils literal">DENY_WRITE</tt> on
+<tt class="docutils literal">XSLTAccessControl</tt> class.</li>
+<li>Extension elements for XSLT (experimental!)</li>
+<li><tt class="docutils literal">Element.base</tt> property returns the xml:base or HTML base URL of
+an Element.</li>
+<li><tt class="docutils literal">docinfo.URL</tt> property is writable.</li>
+</ul>
+</div>
+<div class="section" id="id188">
+<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="id189">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Minor API speed-ups.</li>
+<li>The benchmark suite now uses tail text in the trees, which makes the
+absolute numbers incomparable to previous results.</li>
+<li>Generating the HTML documentation now requires <a class="reference external" href="http://pygments.org/">Pygments</a>, which is
+used to enable syntax highlighting for the doctest examples.</li>
+</ul>
+<p>Most long-time deprecated functions and methods were removed:</p>
+<ul>
+<li><p class="first"><tt class="docutils literal">etree.clearErrorLog()</tt>, use <tt class="docutils literal">etree.clear_error_log()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">etree.useGlobalPythonLog()</tt>, use
+<tt class="docutils literal">etree.use_global_python_log()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">etree.ElementClassLookup.setFallback()</tt>, use
+<tt class="docutils literal">etree.ElementClassLookup.set_fallback()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">etree.getDefaultParser()</tt>, use <tt class="docutils literal">etree.get_default_parser()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">etree.setDefaultParser()</tt>, use <tt class="docutils literal">etree.set_default_parser()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">etree.setElementClassLookup()</tt>, use
+<tt class="docutils literal">etree.set_element_class_lookup()</tt></p>
+<p>Note that <tt class="docutils literal">parser.setElementClassLookup()</tt> has not been removed
+yet, although <tt class="docutils literal">parser.set_element_class_lookup()</tt> should be used
+instead.</p>
+</li>
+<li><p class="first"><tt class="docutils literal">xpath_evaluator.registerNamespace()</tt>, use
+<tt class="docutils literal">xpath_evaluator.register_namespace()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">xpath_evaluator.registerNamespaces()</tt>, use
+<tt class="docutils literal">xpath_evaluator.register_namespaces()</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">objectify.setPytypeAttributeTag</tt>, use
+<tt class="docutils literal">objectify.set_pytype_attribute_tag</tt></p>
+</li>
+<li><p class="first"><tt class="docutils literal">objectify.setDefaultParser()</tt>, use
+<tt class="docutils literal">objectify.set_default_parser()</tt></p>
+</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id190">
+<h1>2.0.3 (2008-03-26)</h1>
+<div class="section" id="id191">
+<h2>Features added</h2>
+<ul class="simple">
+<li>soupparser.parse() allows passing keyword arguments on to
+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="id192">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li><tt class="docutils literal">lxml.html.diff</tt> didn't treat empty tags properly (e.g.,
+<tt class="docutils literal">&lt;br&gt;</tt>).</li>
+<li>Handle entity replacements correctly in target parser.</li>
+<li>Crash when using <tt class="docutils literal">iterparse()</tt> with XML Schema validation.</li>
+<li>The BeautifulSoup parser (soupparser.py) did not replace entities,
+which made them turn up in text content.</li>
+<li>Attribute assignment of custom PyTypes in objectify could fail to
+correctly serialise the value to a string.</li>
+</ul>
+</div>
+<div class="section" id="id193">
+<h2>Other changes</h2>
+<ul class="simple">
+<li><tt class="docutils literal">lxml.html.ElementSoup</tt> was replaced by a new module
+<tt class="docutils literal">lxml.html.soupparser</tt> with a more consistent API.  The old module
+remains for compatibility with ElementTree's own ElementSoup module.</li>
+<li>Setting the XSLT_CONFIG and XML2_CONFIG environment variables at
+build time will let setup.py pick up the <tt class="docutils literal"><span class="pre">xml2-config</span></tt> and
+<tt class="docutils literal"><span class="pre">xslt-config</span></tt> scripts from the supplied path name.</li>
+<li>Passing <tt class="docutils literal"><span class="pre">--with-xml2-config=/path/to/xml2-config</span></tt> to setup.py will
+override the <tt class="docutils literal"><span class="pre">xml2-config</span></tt> script that is used to determine the C
+compiler options.  The same applies for the <tt class="docutils literal"><span class="pre">--with-xslt-config</span></tt>
+option.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id194">
+<h1>2.0.2 (2008-02-22)</h1>
+<div class="section" id="id195">
+<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="id196">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>The prefix for objectify's pytype namespace was missing from the set
+of default prefixes.</li>
+<li>Memory leak in Schematron (fixed only for libxml2 2.6.31+).</li>
+<li>Error type names in RelaxNG were reported incorrectly.</li>
+<li>Slice deletion bug fixed in objectify.</li>
+</ul>
+</div>
+<div class="section" id="id197">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Enabled doctests for some Python modules (especially <tt class="docutils literal">lxml.html</tt>).</li>
+<li>Add a <tt class="docutils literal">method</tt> argument to <tt class="docutils literal">lxml.html.tostring()</tt>
+(<tt class="docutils literal"><span class="pre">method=&quot;xml&quot;</span></tt> for XHTML output).</li>
+<li>Make it clearer that methods like <tt class="docutils literal">lxml.html.fromstring()</tt> take a
+<tt class="docutils literal">base_url</tt> argument.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id198">
+<h1>2.0.1 (2008-02-13)</h1>
+<div class="section" id="id199">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Child iteration in <tt class="docutils literal">lxml.pyclasslookup</tt>.</li>
+<li>Loads of new docstrings reflect the signature of functions and
+methods to make them visible in API docs and <tt class="docutils literal">help()</tt></li>
+</ul>
+</div>
+<div class="section" id="id200">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>The module <tt class="docutils literal">lxml.html.builder</tt> was duplicated as
+<tt class="docutils literal">lxml.htmlbuilder</tt></li>
+<li>Form elements would return None for <tt class="docutils literal">form.fields.keys()</tt> if there
+was an unnamed input field.  Now unnamed input fields are completely
+ignored.</li>
+<li>Setting an element slice in objectify could insert slice-overlapping
+elements at the wrong position.</li>
+</ul>
+</div>
+<div class="section" id="id201">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>The generated API documentation was cleaned up and disburdened from
+non-public classes etc.</li>
+<li>The previously public module <tt class="docutils literal">lxml.html.setmixin</tt> was renamed to
+<tt class="docutils literal">lxml.html._setmixin</tt> as it is not an official part of lxml.  If
+you want to use it, feel free to copy it over to your own source
+base.</li>
+<li>Passing <tt class="docutils literal"><span class="pre">--with-xslt-config=/path/to/xslt-config</span></tt> to setup.py will
+override the <tt class="docutils literal"><span class="pre">xslt-config</span></tt> script that is used to determine the C
+compiler options.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id202">
+<h1>2.0 (2008-02-01)</h1>
+<div class="section" id="id203">
+<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
+serialise to unicode.  The <tt class="docutils literal">tounicode()</tt> function is now
+deprecated.</li>
+<li><tt class="docutils literal">XMLSchema()</tt> and <tt class="docutils literal">RelaxNG()</tt> can parse from StringIO.</li>
+<li><tt class="docutils literal">makeparser()</tt> function in <tt class="docutils literal">lxml.objectify</tt> to create a new
+parser with the usual objectify setup.</li>
+<li>Plain ASCII XPath string results are no longer forced into unicode
+objects as in 2.0beta1, but are returned as plain strings as before.</li>
+<li>All XPath string results are 'smart' objects that have a
+<tt class="docutils literal">getparent()</tt> method to retrieve their parent Element.</li>
+<li><tt class="docutils literal">with_tail</tt> option in serialiser functions.</li>
+<li>More accurate exception messages in validator creation.</li>
+<li>Parse-time XML schema validation (<tt class="docutils literal">schema</tt> parser keyword).</li>
+<li>XPath string results of the <tt class="docutils literal">text()</tt> function and attribute
+selection make their Element container accessible through a
+<tt class="docutils literal">getparent()</tt> method.  As a side-effect, they are now always
+unicode objects (even ASCII strings).</li>
+<li><tt class="docutils literal">XSLT</tt> objects are usable in any thread - at the cost of a deep
+copy if they were not created in that thread.</li>
+<li>Invalid entity names and character references will be rejected by
+the <tt class="docutils literal">Entity()</tt> factory.</li>
+<li><tt class="docutils literal">entity.text</tt> returns the textual representation of the entity,
+e.g. <tt class="docutils literal">&amp;amp;</tt>.</li>
+<li>New properties <tt class="docutils literal">position</tt> and <tt class="docutils literal">code</tt> on ParseError exception (as
+in ET 1.3)</li>
+<li>Rich comparison of <tt class="docutils literal">element.attrib</tt> proxies.</li>
+<li>ElementTree compatible TreeBuilder class.</li>
+<li>Use default prefixes for some common XML namespaces.</li>
+<li><tt class="docutils literal">lxml.html.clean.Cleaner</tt> now allows for a <tt class="docutils literal">host_whitelist</tt>, and
+two overridable methods: <tt class="docutils literal">allow_embedded_url(el, url)</tt> and the
+more general <tt class="docutils literal">allow_element(el)</tt>.</li>
+<li>Extended slicing of Elements as in <tt class="docutils literal"><span class="pre">element[1:-1:2]</span></tt>, both in
+etree and in objectify</li>
+<li>Resolvers can now provide a <tt class="docutils literal">base_url</tt> keyword argument when
+resolving a document as string data.</li>
+<li>When using <tt class="docutils literal">lxml.doctestcompare</tt> you can give the doctest option
+<tt class="docutils literal">NOPARSE_MARKUP</tt> (like <tt class="docutils literal"># doctest: +NOPARSE_MARKUP</tt>) to suppress
+the special checking for one test.</li>
+<li>Separate <tt class="docutils literal">feed_error_log</tt> property for the feed parser interface.
+The normal parser interface and <tt class="docutils literal">iterparse</tt> continue to use
+<tt class="docutils literal">error_log</tt>.</li>
+<li>The normal parsers and the feed parser interface are now separated
+and can be used concurrently on the same parser instance.</li>
+<li><tt class="docutils literal">fromstringlist()</tt> and <tt class="docutils literal">tostringlist()</tt> functions as in
+ElementTree 1.3</li>
+<li><tt class="docutils literal">iterparse()</tt> accepts an <tt class="docutils literal">html</tt> boolean keyword argument for
+parsing with the HTML parser (note that this interface may be
+subject to change)</li>
+<li>Parsers accept an <tt class="docutils literal">encoding</tt> keyword argument that overrides the encoding
+of the parsed documents.</li>
+<li>New C-API function <tt class="docutils literal">hasChild()</tt> to test for children</li>
+<li><tt class="docutils literal">annotate()</tt> function in objectify can annotate with Python types and XSI
+types in one step.  Accompanied by <tt class="docutils literal">xsiannotate()</tt> and <tt class="docutils literal">pyannotate()</tt>.</li>
+<li><tt class="docutils literal">ET.write()</tt>, <tt class="docutils literal">tostring()</tt> and <tt class="docutils literal">tounicode()</tt> now accept a keyword
+argument <tt class="docutils literal">method</tt> that can be one of 'xml' (or None), 'html' or 'text' to
+serialise as XML, HTML or plain text content.</li>
+<li><tt class="docutils literal">iterfind()</tt> method on Elements returns an iterator equivalent to
+<tt class="docutils literal">findall()</tt></li>
+<li><tt class="docutils literal">itertext()</tt> method on Elements</li>
+<li>Setting a QName object as value of the .text property or as an attribute
+will resolve its prefix in the respective context</li>
+<li>ElementTree-like parser target interface as described in
+<a class="reference external" href="http://effbot.org/elementtree/elementtree-xmlparser.htm">http://effbot.org/elementtree/elementtree-xmlparser.htm</a></li>
+<li>ElementTree-like feed parser interface on XMLParser and HTMLParser
+(<tt class="docutils literal">feed()</tt> and <tt class="docutils literal">close()</tt> methods)</li>
+<li>Reimplemented <tt class="docutils literal">objectify.E</tt> for better performance and improved
+integration with objectify.  Provides extended type support based on
+registered PyTypes.</li>
+<li>XSLT objects now support deep copying</li>
+<li>New <tt class="docutils literal">makeSubElement()</tt> C-API function that allows creating a new
+subelement straight with text, tail and attributes.</li>
+<li>XPath extension functions can now access the current context node
+(<tt class="docutils literal">context.context_node</tt>) and use a context dictionary
+(<tt class="docutils literal">context.eval_context</tt>) from the context provided in their first
+parameter</li>
+<li>HTML tag soup parser based on BeautifulSoup in <tt class="docutils literal">lxml.html.ElementSoup</tt></li>
+<li>New module <tt class="docutils literal">lxml.doctestcompare</tt> by Ian Bicking for writing simplified
+doctests based on XML/HTML output.  Use by importing <tt class="docutils literal">lxml.usedoctest</tt> or
+<tt class="docutils literal">lxml.html.usedoctest</tt> from within a doctest.</li>
+<li>New module <tt class="docutils literal">lxml.cssselect</tt> by Ian Bicking for selecting Elements with CSS
+selectors.</li>
+<li>New package <tt class="docutils literal">lxml.html</tt> written by Ian Bicking for advanced HTML
+treatment.</li>
+<li>Namespace class setup is now local to the <tt class="docutils literal">ElementNamespaceClassLookup</tt>
+instance and no longer global.</li>
+<li>Schematron validation (incomplete in libxml2)</li>
+<li>Additional <tt class="docutils literal">stringify</tt> argument to <tt class="docutils literal">objectify.PyType()</tt> takes a
+conversion function to strings to support setting text values from arbitrary
+types.</li>
+<li>Entity support through an <tt class="docutils literal">Entity</tt> factory and element classes.  XML
+parsers now have a <tt class="docutils literal">resolve_entities</tt> keyword argument that can be set to
+False to keep entities in the document.</li>
+<li><tt class="docutils literal">column</tt> field on error log entries to accompany the <tt class="docutils literal">line</tt> field</li>
+<li>Error specific messages in XPath parsing and evaluation
+NOTE: for evaluation errors, you will now get an XPathEvalError instead of
+an XPathSyntaxError.  To catch both, you can except on <tt class="docutils literal">XPathError</tt></li>
+<li>The regular expression functions in XPath now support passing a node-set
+instead of a string</li>
+<li>Extended type annotation in objectify: new <tt class="docutils literal">xsiannotate()</tt> function</li>
+<li>EXSLT RegExp support in standard XPath (not only XSLT)</li>
+</ul>
+</div>
+<div class="section" id="id204">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Missing import in <tt class="docutils literal">lxml.html.clean</tt>.</li>
+<li>Some Python 2.4-isms prevented lxml from building/running under
+Python 2.3.</li>
+<li>XPath on ElementTrees could crash when selecting the virtual root
+node of the ElementTree.</li>
+<li>Compilation <tt class="docutils literal"><span class="pre">--without-threading</span></tt> was buggy in alpha5/6.</li>
+<li>Memory leak in the <tt class="docutils literal">parse()</tt> function.</li>
+<li>Minor bugs in XSLT error message formatting.</li>
+<li>Result document memory leak in target parser.</li>
+<li>Target parser failed to report comments.</li>
+<li>In the <tt class="docutils literal">lxml.html</tt> <tt class="docutils literal">iter_links</tt> method, links in <tt class="docutils literal">&lt;object&gt;</tt>
+tags weren't recognized.  (Note: plugin-specific link parameters
+still aren't recognized.)  Also, the <tt class="docutils literal">&lt;embed&gt;</tt> tag, though not
+standard, is now included in <tt class="docutils literal">lxml.html.defs.special_inline_tags</tt>.</li>
+<li>Using custom resolvers on XSLT stylesheets parsed from a string
+could request ill-formed URLs.</li>
+<li>With <tt class="docutils literal">lxml.doctestcompare</tt> if you do <tt class="docutils literal">&lt;tag <span class="pre">xmlns=&quot;...&quot;&gt;</span></tt> in your
+output, it will then be namespace-neutral (before the ellipsis was
+treated as a real namespace).</li>
+<li>AttributeError in feed parser on parse errors</li>
+<li>XML feed parser setup problem</li>
+<li>Type annotation for unicode strings in <tt class="docutils literal">DataElement()</tt></li>
+<li>lxml failed to serialise namespace declarations of elements other than the
+root node of a tree</li>
+<li>Race condition in XSLT where the resolver context leaked between concurrent
+XSLT calls</li>
+<li>lxml.etree did not check tag/attribute names</li>
+<li>The XML parser did not report undefined entities as error</li>
+<li>The text in exceptions raised by XML parsers, validators and XPath
+evaluators now reports the first error that occurred instead of the last</li>
+<li>Passing '' as XPath namespace prefix did not raise an error</li>
+<li>Thread safety in XPath evaluators</li>
+</ul>
+</div>
+<div class="section" id="id205">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>Exceptions carry only the part of the error log that is related to
+the operation that caused the error.</li>
+<li><tt class="docutils literal">XMLSchema()</tt> and <tt class="docutils literal">RelaxNG()</tt> now enforce passing the source
+file/filename through the <tt class="docutils literal">file</tt> keyword argument.</li>
+<li>The test suite now skips most doctests under Python 2.3.</li>
+<li><tt class="docutils literal">make clean</tt> no longer removes the .c files (use <tt class="docutils literal">make
+realclean</tt> instead)</li>
+<li>Minor performance tweaks for Element instantiation and subelement
+creation</li>
+<li>Various places in the XPath, XSLT and iteration APIs now require
+keyword-only arguments.</li>
+<li>The argument order in <tt class="docutils literal">element.itersiblings()</tt> was changed to
+match the order used in all other iteration methods.  The second
+argument ('preceding') is now a keyword-only argument.</li>
+<li>The <tt class="docutils literal">getiterator()</tt> method on Elements and ElementTrees was
+reverted to return an iterator as it did in lxml 1.x.  The ET API
+specification allows it to return either a sequence or an iterator,
+and it traditionally returned a sequence in ET and an iterator in
+lxml.  However, it is now deprecated in favour of the <tt class="docutils literal">iter()</tt>
+method, which should be used in new code wherever possible.</li>
+<li>The 'pretty printed' serialisation of ElementTree objects now
+inserts newlines at the root level between processing instructions,
+comments and the root tag.</li>
+<li>A 'pretty printed' serialisation is now terminated with a newline.</li>
+<li>Second argument to <tt class="docutils literal">lxml.etree.Extension()</tt> helper is no longer
+required, third argument is now a keyword-only argument <tt class="docutils literal">ns</tt>.</li>
+<li><tt class="docutils literal">lxml.html.tostring</tt> takes an <tt class="docutils literal">encoding</tt> argument.</li>
+<li>The module source files were renamed to &quot;lxml.*.pyx&quot;, such as
+&quot;lxml.etree.pyx&quot;.  This was changed for consistency with the way
+Pyrex commonly handles package imports.  The main effect is that
+classes now know about their fully qualified class name, including
+the package name of their module.</li>
+<li>Keyword-only arguments in some API functions, especially in the
+parsers and serialisers.</li>
+<li>Tag name validation in lxml.etree (and lxml.html) now distinguishes
+between HTML tags and XML tags based on the parser that was used to
+parse or create them.  HTML tags no longer reject any non-ASCII
+characters in tag names but only spaces and the special characters
+<tt class="docutils literal"><span class="pre">&lt;&gt;&amp;/&quot;'</span></tt>.</li>
+<li>lxml.etree now emits a warning if you use XPath with libxml2 2.6.27
+(which can crash on certain XPath errors)</li>
+<li>Type annotation in objectify now preserves the already annotated type by
+default to prevent loosing type information that is already there.</li>
+<li><tt class="docutils literal">element.getiterator()</tt> returns a list, use <tt class="docutils literal">element.iter()</tt> to retrieve
+an iterator (ElementTree 1.3 compatible behaviour)</li>
+<li>objectify.PyType for None is now called &quot;NoneType&quot;</li>
+<li><tt class="docutils literal">el.getiterator()</tt> renamed to <tt class="docutils literal">el.iter()</tt>, following ElementTree 1.3 -
+original name is still available as alias</li>
+<li>In the public C-API, <tt class="docutils literal">findOrBuildNodeNs()</tt> was replaced by the more
+generic <tt class="docutils literal">findOrBuildNodeNsPrefix</tt></li>
+<li>Major refactoring in XPath/XSLT extension function code</li>
+<li>Network access in parsers disabled by default</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id206">
+<h1>1.3.6 (2007-10-29)</h1>
+<div class="section" id="id207">
+<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="id208">
+<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>
+methods.  While this makes them take a lot longer to run, it also
+makes it easier to link a specific test to garbage collection
+problems that would otherwise appear in later tests.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id209">
+<h1>1.3.5 (2007-10-22)</h1>
+<div class="section" id="id210">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id211">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>lxml.etree could crash when adding more than 10000 namespaces to a
+document</li>
+<li>lxml failed to serialise namespace declarations of elements other
+than the root node of a tree</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id212">
+<h1>1.3.4 (2007-08-30)</h1>
+<div class="section" id="id213">
+<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
+<tt class="docutils literal">namespace</tt> and <tt class="docutils literal">nsmap</tt> to set a namespace and nsmap for the Elements it
+creates.</li>
+<li>The <tt class="docutils literal">docinfo</tt> on ElementTree objects has new properties <tt class="docutils literal">internalDTD</tt>
+and <tt class="docutils literal">externalDTD</tt> that return a DTD object for the internal or external
+subset of the document respectively.</li>
+<li>Serialising an ElementTree now includes any internal DTD subsets that are
+part of the document, as well as comments and PIs that are siblings of the
+root node.</li>
+</ul>
+</div>
+<div class="section" id="id214">
+<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="id215">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>lxml now raises a TagNameWarning about tag names containing ':' instead of
+an Error as 1.3.3 did.  The reason is that a number of projects currently
+misuse the previous lack of tag name validation to generate namespace
+prefixes without declaring namespaces.  Apart from the danger of generating
+broken XML this way, it also breaks most of the namespace-aware tools in
+XML, including XPath, XSLT and validation.  lxml 1.3.x will continue to
+support this bug with a Warning, while lxml 2.0 will be strict about
+well-formed tag names (not only regarding ':').</li>
+<li>Serialising an Element no longer includes its comment and PI siblings (only
+ElementTree serialisation includes them).</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id216">
+<h1>1.3.3 (2007-07-26)</h1>
+<div class="section" id="id217">
+<h2>Features added</h2>
+<ul class="simple">
+<li>ElementTree compatible parser <tt class="docutils literal">ETCompatXMLParser</tt> strips processing
+instructions and comments while parsing XML</li>
+<li>Parsers now support stripping PIs (keyword argument 'remove_pis')</li>
+<li><tt class="docutils literal">etree.fromstring()</tt> now supports parsing both HTML and XML, depending on
+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="id218">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Parsing from Python Unicode strings failed on some platforms</li>
+<li><tt class="docutils literal">Element()</tt> did not raise an exception on tag names containing ':'</li>
+<li><tt class="docutils literal">Element.getiterator(tag)</tt> did not accept <tt class="docutils literal">Comment</tt> and
+<tt class="docutils literal">ProcessingInstruction</tt> as tags. It also accepts <tt class="docutils literal">Element</tt> now.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id219">
+<h1>1.3.2 (2007-07-03)</h1>
+<div class="section" id="id220">
+<h2>Features added</h2>
+</div>
+<div class="section" id="id221">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>&quot;deallocating None&quot; crash bug</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id222">
+<h1>1.3.1 (2007-07-02)</h1>
+<div class="section" id="id223">
+<h2>Features added</h2>
+<ul class="simple">
+<li>objectify.DataElement now supports setting values from existing data
+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="id224">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Better way to prevent crashes in Element proxy cleanup code</li>
+<li>objectify.DataElement didn't set up None value correctly</li>
+<li>objectify.DataElement didn't check the value against the provided type hints</li>
+<li>Reference-counting bug in <tt class="docutils literal">Element.attrib.pop()</tt></li>
+</ul>
+</div>
+</div>
+<div class="section" id="id225">
+<h1>1.3 (2007-06-24)</h1>
+<div class="section" id="id226">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Module <tt class="docutils literal">lxml.pyclasslookup</tt> module implements an Element class lookup
+scheme that can access the entire tree in read-only mode to help determining
+a suitable Element class</li>
+<li>Parsers take a <tt class="docutils literal">remove_comments</tt> keyword argument that skips over comments</li>
+<li><tt class="docutils literal">parse()</tt> function in <tt class="docutils literal">objectify</tt>, corresponding to <tt class="docutils literal">XML()</tt> etc.</li>
+<li><tt class="docutils literal">Element.addnext(el)</tt> and <tt class="docutils literal">Element.addprevious(el)</tt> methods to support
+adding processing instructions and comments around the root node</li>
+<li><tt class="docutils literal">Element.attrib</tt> was missing <tt class="docutils literal">clear()</tt> and <tt class="docutils literal">pop()</tt> methods</li>
+<li>Extended type annotation in objectify: cleaner annotation namespace setup
+plus new <tt class="docutils literal">deannotate()</tt> function</li>
+<li>Support for custom Element class instantiation in lxml.sax: passing a
+<tt class="docutils literal">makeelement</tt> function to the ElementTreeContentHandler will reuse the
+lookup context of that function</li>
+<li>'.' represents empty ObjectPath (identity)</li>
+<li><tt class="docutils literal">Element.values()</tt> to accompany the existing <tt class="docutils literal">.keys()</tt> and <tt class="docutils literal">.items()</tt></li>
+<li><tt class="docutils literal">collectAttributes()</tt> C-function to build a list of attribute
+keys/values/items for a libxml2 node</li>
+<li><tt class="docutils literal">DTD</tt> validator class (like <tt class="docutils literal">RelaxNG</tt> and <tt class="docutils literal">XMLSchema</tt>)</li>
+<li>HTML generator helpers by Fredrik Lundh in <tt class="docutils literal">lxml.htmlbuilder</tt></li>
+<li><tt class="docutils literal">ElementMaker</tt> XML generator by Fredrik Lundh in <tt class="docutils literal">lxml.builder.E</tt></li>
+<li>Support for pickeling <tt class="docutils literal">objectify.ObjectifiedElement</tt> objects to XML</li>
+<li><tt class="docutils literal">update()</tt> method on Element.attrib</li>
+<li>Optimised replacement for libxml2's _xmlReconsiliateNs(). This allows lxml
+a better handling of namespaces when moving elements between documents.</li>
+</ul>
+</div>
+<div class="section" id="id227">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Removing Elements from a tree could make them loose their namespace
+declarations</li>
+<li><tt class="docutils literal">ElementInclude</tt> didn't honour base URL of original document</li>
+<li>Replacing the children slice of an Element would cut off the tails of the
+original children</li>
+<li><tt class="docutils literal">Element.getiterator(tag)</tt> did not accept <tt class="docutils literal">Comment</tt> and
+<tt class="docutils literal">ProcessingInstruction</tt> as tags</li>
+<li>API functions now check incoming strings for XML conformity.  Zero bytes or
+low ASCII characters are no longer accepted (AssertionError).</li>
+<li>XSLT parsing failed to pass resolver context on to imported documents</li>
+<li>passing '' as namespace prefix in nsmap could be passed through to libxml2</li>
+<li>Objectify couldn't handle prefixed XSD type names in <tt class="docutils literal">xsi:type</tt></li>
+<li>More ET compatible behaviour when writing out XML declarations or not</li>
+<li>More robust error handling in <tt class="docutils literal">iterparse()</tt></li>
+<li>Documents lost their top-level PIs and comments on serialisation</li>
+<li>lxml.sax failed on comments and PIs. Comments are now properly ignored and
+PIs are copied.</li>
+<li>Possible memory leaks in namespace handling when moving elements between
+documents</li>
+</ul>
+</div>
+<div class="section" id="id228">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>major restructuring in the documentation</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id229">
+<h1>1.2.1 (2007-02-27)</h1>
+<div class="section" id="id230">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Build fixes for MS compiler</li>
+<li>Item assignments to special names like <tt class="docutils literal"><span class="pre">element[&quot;text&quot;]</span></tt> failed</li>
+<li>Renamed ObjectifiedDataElement.__setText() to _setText() to make it easier
+to access</li>
+<li>The pattern for attribute names in ObjectPath was too restrictive</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id231">
+<h1>1.2 (2007-02-20)</h1>
+<div class="section" id="id232">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Rich comparison of QName objects</li>
+<li>Support for regular expressions in benchmark selection</li>
+<li>get/set emulation (not .attrib!) for attributes on processing instructions</li>
+<li>ElementInclude Python module for ElementTree compatible XInclude processing
+that honours custom resolvers registered with the source document</li>
+<li>ElementTree.parser property holds the parser used to parse the document</li>
+<li>setup.py has been refactored for greater readability and flexibility</li>
+<li>--rpath flag to setup.py to induce automatic linking-in of dynamic library
+runtime search paths has been renamed to --auto-rpath. This makes it
+possible to pass an --rpath directly to distutils; previously this was being
+shadowed.</li>
+</ul>
+</div>
+<div class="section" id="id233">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Element instantiation now uses locks to prevent race conditions with threads</li>
+<li>ElementTree.write() did not raise an exception when the file was not writable</li>
+<li>Error handling could crash under Python &lt;= 2.4.1 - fixed by disabling thread
+support in these environments</li>
+<li>Element.find*() did not accept QName objects as path</li>
+</ul>
+</div>
+<div class="section" id="id234">
+<h2>Other changes</h2>
+<ul class="simple">
+<li>code cleanup: redundant _NodeBase super class merged into _Element class
+Note: although the impact should be zero in most cases, this change breaks
+the compatibiliy of the public C-API</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id235">
+<h1>1.1.2 (2006-10-30)</h1>
+<div class="section" id="id236">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Data elements in objectify support repr(), which is now used by dump()</li>
+<li>Source distribution now ships with a patched Pyrex</li>
+<li>New C-API function makeElement() to create new elements with text,
+tail, attributes and namespaces</li>
+<li>Reuse original parser flags for XInclude</li>
+<li>Simplified support for handling XSLT processing instructions</li>
+</ul>
+</div>
+<div class="section" id="id237">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Parser resources were not freed before the next parser run</li>
+<li>Open files and XML strings returned by Python resolvers were not
+closed/freed</li>
+<li>Crash in the IDDict returned by XMLDTDID</li>
+<li>Copying Comments and ProcessingInstructions failed</li>
+<li>Memory leak for external URLs in _XSLTProcessingInstruction.parseXSL()</li>
+<li>Memory leak when garbage collecting tailed root elements</li>
+<li>HTML script/style content was not propagated to .text</li>
+<li>Show text xincluded between text nodes correctly in .text and .tail</li>
+<li>'integer * objectify.StringElement' operation was not supported</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id238">
+<h1>1.1.1 (2006-09-21)</h1>
+<div class="section" id="id239">
+<h2>Features added</h2>
+<ul class="simple">
+<li>XSLT profiling support (<tt class="docutils literal">profile_run</tt> keyword)</li>
+<li>countchildren() method on objectify.ObjectifiedElement</li>
+<li>Support custom elements for tree nodes in lxml.objectify</li>
+</ul>
+</div>
+<div class="section" id="id240">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>lxml.objectify failed to support long data values (e.g., &quot;123L&quot;)</li>
+<li>Error messages from XSLT did not reach <tt class="docutils literal">XSLT.error_log</tt></li>
+<li>Factories objectify.Element() and objectify.DataElement() were missing
+<tt class="docutils literal">attrib</tt> and <tt class="docutils literal">nsmap</tt> keyword arguments</li>
+<li>Changing the default parser in lxml.objectify did not update the factories
+Element() and DataElement()</li>
+<li>Let lxml.objectify.Element() always generate tree elements (not data
+elements)</li>
+<li>Build under Windows failed ('0' bug in patched Pyrex version)</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id241">
+<h1>1.1 (2006-09-13)</h1>
+<div class="section" id="id242">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Comments and processing instructions return '&lt;!-- coment --&gt;' and
+'&lt;?pi-target content?&gt;' for repr()</li>
+<li>Parsers are now the preferred (and default) place where element class lookup
+schemes should be registered.  Namespace lookup is no longer supported by
+default.</li>
+<li>Support for Python 2.5 beta</li>
+<li>Unlock the GIL for deep copying documents and for XPath()</li>
+<li>New <tt class="docutils literal">compact</tt> keyword argument for parsing read-only documents</li>
+<li>Support for parser options in iterparse()</li>
+<li>The <tt class="docutils literal">namespace</tt> axis is supported in XPath and returns (prefix, URI)
+tuples</li>
+<li>The XPath expression &quot;/&quot; now returns an empty list instead of raising an
+exception</li>
+<li>XML-Object API on top of lxml (lxml.objectify)</li>
+<li>Customizable Element class lookup:<ul>
+<li>different pre-implemented lookup mechanisms</li>
+<li>support for externally provided lookup functions</li>
+</ul>
+</li>
+<li>Support for processing instructions (ET-like, not compatible)</li>
+<li>Public C-level API for independent extension modules</li>
+<li>Module level <tt class="docutils literal">iterwalk()</tt> function as 'iterparse' for trees</li>
+<li>Module level <tt class="docutils literal">iterparse()</tt> function similar to ElementTree (see
+documentation for differences)</li>
+<li>Element.nsmap property returns a mapping of all namespace prefixes known at
+the Element to their namespace URI</li>
+<li>Reentrant threading support in RelaxNG, XMLSchema and XSLT</li>
+<li>Threading support in parsers and serializers:<ul>
+<li>All in-memory operations (tostring, parse(StringIO), etc.) free the GIL</li>
+<li>File operations (on file names) free the GIL</li>
+<li>Reading from file-like objects frees the GIL and reacquires it for reading</li>
+<li>Serialisation to file-like objects is single-threaded (high lock overhead)</li>
+</ul>
+</li>
+<li>Element iteration over XPath axes:<ul>
+<li>Element.iterdescendants() iterates over the descendants of an element</li>
+<li>Element.iterancestors() iterates over the ancestors of an element (from
+parent to parent)</li>
+<li>Element.itersiblings() iterates over either the following or preceding
+siblings of an element</li>
+<li>Element.iterchildren() iterates over the children of an element in either
+direction</li>
+<li>All iterators support the <tt class="docutils literal">tag</tt> keyword argument to restrict the
+generated elements</li>
+</ul>
+</li>
+<li>Element.getnext() and Element.getprevious() return the direct siblings of an
+element</li>
+</ul>
+</div>
+<div class="section" id="id243">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>filenames with local 8-bit encoding were not supported</li>
+<li>1.1beta did not compile under Python 2.3</li>
+<li>ignore unknown 'pyval' attribute values in objectify</li>
+<li>objectify.ObjectifiedElement.addattr() failed to accept Elements and Lists</li>
+<li>objectify.ObjectPath.setattr() failed to accept Elements and Lists</li>
+<li>XPathSyntaxError now inherits from XPathError</li>
+<li>Threading race conditions in RelaxNG and XMLSchema</li>
+<li>Crash when mixing elements from XSLT results into other trees, concurrent
+XSLT is only allowed when the stylesheet was parsed in the main thread</li>
+<li>The EXSLT <tt class="docutils literal">regexp:match</tt> function now works as defined (except for some
+differences in the regular expression syntax)</li>
+<li>Setting element.text to '' returned None on request, not the empty string</li>
+<li><tt class="docutils literal">iterparse()</tt> could crash on long XML files</li>
+<li>Creating documents no longer copies the parser for later URL resolving.  For
+performance reasons, only a reference is kept.  Resolver updates on the
+parser will now be reflected by documents that were parsed before the
+change.  Although this should rarely become visible, it is a behavioral
+change from 1.0.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id244">
+<h1>1.0.4 (2006-09-09)</h1>
+<div class="section" id="id245">
+<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="id246">
+<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="id247">
+<h1>1.0.3 (2006-08-08)</h1>
+<div class="section" id="id248">
+<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="id249">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Crash when mixing elements from XSLT results into other trees</li>
+<li>Copying/deepcopying did not work for ElementTree objects</li>
+<li>Setting an attribute to a non-string value did not raise an exception</li>
+<li>Element.remove() deleted the tail text from the removed Element</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id250">
+<h1>1.0.2 (2006-06-27)</h1>
+<div class="section" id="id251">
+<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="id252">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Rare exceptions in Python list functions were not handled</li>
+<li>Parsing accepted unicode strings with XML encoding declaration in certain
+cases</li>
+<li>Parsing 8-bit encoded strings from StringIO objects raised an exception</li>
+<li>Module function <tt class="docutils literal">initThread()</tt> was removed - useless (and never worked)</li>
+<li>XSLT and parser exception messages include the error line number</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id253">
+<h1>1.0.1 (2006-06-09)</h1>
+<div class="section" id="id254">
+<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="id255">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Document deallocation could crash in certain garbage collection scenarios</li>
+<li>Extension function calls in XSLT variable declarations could break the
+stylesheet and crash on repeated calls</li>
+<li>Deep copying Elements could loose namespaces declared in parents</li>
+<li>Deep copying Elements did not copy tail</li>
+<li>Parsing file(-like) objects failed to load external entities</li>
+<li>Parsing 8-bit strings from file(-like) objects raised an exception</li>
+<li>xsl:include failed when the stylesheet was parsed from a file-like object</li>
+<li>lxml.sax.ElementTreeProducer did not call startDocument() / endDocument()</li>
+<li>MSVC compiler complained about long strings (supports only 2048 bytes)</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id256">
+<h1>1.0 (2006-06-01)</h1>
+<div class="section" id="id257">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Element.getiterator() and the findall() methods support finding arbitrary
+elements from a namespace (pattern <tt class="docutils literal">{namespace}*</tt>)</li>
+<li>Another speedup in tree iteration code</li>
+<li>General speedup of Python Element object creation and deallocation</li>
+<li>Writing C14N no longer serializes in memory (reduced memory footprint)</li>
+<li>PyErrorLog for error logging through the Python <tt class="docutils literal">logging</tt> module</li>
+<li><tt class="docutils literal">Element.getroottree()</tt> returns an ElementTree for the root node of the
+document that contains the element.</li>
+<li>ElementTree.getpath(element) returns a simple, absolute XPath expression to
+find the element in the tree structure</li>
+<li>Error logs have a <tt class="docutils literal">last_error</tt> attribute for convenience</li>
+<li>Comment texts can be changed through the API</li>
+<li>Formatted output via <tt class="docutils literal">pretty_print</tt> keyword in serialization functions</li>
+<li>XSLT can block access to file system and network via <tt class="docutils literal">XSLTAccessControl</tt></li>
+<li>ElementTree.write() no longer serializes in memory (reduced memory
+footprint)</li>
+<li>Speedup of Element.findall(tag) and Element.getiterator(tag)</li>
+<li>Support for writing the XML representation of Elements and ElementTrees to
+Python unicode strings via <tt class="docutils literal">etree.tounicode()</tt></li>
+<li>Support for writing XSLT results to Python unicode strings via <tt class="docutils literal">unicode()</tt></li>
+<li>Parsing a unicode string no longer copies the string (reduced memory
+footprint)</li>
+<li>Parsing file-like objects reads chunks rather than the whole file (reduced
+memory footprint)</li>
+<li>Parsing StringIO objects from the start avoids copying the string (reduced
+memory footprint)</li>
+<li>Read-only 'docinfo' attribute in ElementTree class holds DOCTYPE
+information, original encoding and XML version as seen by the parser</li>
+<li>etree module can be compiled without libxslt by commenting out the line
+<tt class="docutils literal">include &quot;xslt.pxi&quot;</tt> near the end of the etree.pyx source file</li>
+<li>Better error messages in parser exceptions</li>
+<li>Error reporting also works in XSLT</li>
+<li>Support for custom document loaders (URI resolvers) in parsers and XSLT,
+resolvers are registered at parser level</li>
+<li>Implementation of exslt:regexp for XSLT based on the Python 're' module,
+enabled by default, can be switched off with 'regexp=False' keyword argument</li>
+<li>Support for exslt extensions (libexslt) and libxslt extra functions
+(node-set, document, write, output)</li>
+<li>Substantial speedup in XPath.evaluate()</li>
+<li>HTMLParser for parsing (broken) HTML</li>
+<li>XMLDTDID function parses XML into tuple (root node, ID dict) based on xml:id
+implementation of libxml2 (as opposed to ET compatible XMLID)</li>
+</ul>
+</div>
+<div class="section" id="id258">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Memory leak in Element.__setitem__</li>
+<li>Memory leak in Element.attrib.items() and Element.attrib.values()</li>
+<li>Memory leak in XPath extension functions</li>
+<li>Memory leak in unicode related setup code</li>
+<li>Element now raises ValueError on empty tag names</li>
+<li>Namespace fixing after moving elements between documents could fail if the
+source document was freed too early</li>
+<li>Setting namespace-less tag names on namespaced elements ('{ns}t' -&gt; 't')
+didn't reset the namespace</li>
+<li>Unknown constants from newer libxml2 versions could raise exceptions in the
+error handlers</li>
+<li>lxml.etree compiles much faster</li>
+<li>On libxml2 &lt;= 2.6.22, parsing strings with encoding declaration could fail
+in certain cases</li>
+<li>Document reference in ElementTree objects was not updated when the root
+element was moved to a different document</li>
+<li>Running absolute XPath expressions on an Element now evaluates against the
+root tree</li>
+<li>Evaluating absolute XPath expressions (<tt class="docutils literal">/*</tt>) on an ElementTree could fail</li>
+<li>Crashes when calling XSLT, RelaxNG, etc. with uninitialized ElementTree
+objects</li>
+<li>Removed public function <tt class="docutils literal">initThreadLogging()</tt>, replaced by more general
+<tt class="docutils literal">initThread()</tt> which fixes a number of setup problems in threads</li>
+<li>Memory leak when using iconv encoders in tostring/write</li>
+<li>Deep copying Elements and ElementTrees maintains the document information</li>
+<li>Serialization functions raise LookupError for unknown encodings</li>
+<li>Memory deallocation crash resulting from deep copying elements</li>
+<li>Some ElementTree methods could crash if the root node was not initialized
+(neither file nor element passed to the constructor)</li>
+<li>Element/SubElement failed to set attribute namespaces from passed <tt class="docutils literal">attrib</tt>
+dictionary</li>
+<li><tt class="docutils literal">tostring()</tt> adds an XML declaration for non-ASCII encodings</li>
+<li><tt class="docutils literal">tostring()</tt> failed to serialize encodings that contain 0-bytes</li>
+<li>ElementTree.xpath() and XPathDocumentEvaluator were not using the
+ElementTree root node as reference point</li>
+<li>Calling <tt class="docutils literal"><span class="pre">document('')</span></tt> in XSLT failed to return the stylesheet</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id259">
+<h1>0.9.2 (2006-05-10)</h1>
+<div class="section" id="id260">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Speedup for Element.makeelement(): the new element reuses the original
+libxml2 document instead of creating a new empty one</li>
+<li>Speedup for reversed() iteration over element children (Py2.4+ only)</li>
+<li>ElementTree compatible QName class</li>
+<li>RelaxNG and XMLSchema accept any Element, not only ElementTrees</li>
+</ul>
+</div>
+<div class="section" id="id261">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>str(xslt_result) was broken for XSLT output other than UTF-8</li>
+<li>Memory leak if write_c14n fails to write the file after conversion</li>
+<li>Crash in XMLSchema and RelaxNG when passing non-schema documents</li>
+<li>Memory leak in RelaxNG() when RelaxNGParseError is raised</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id262">
+<h1>0.9.1 (2006-03-30)</h1>
+<div class="section" id="id263">
+<h2>Features added</h2>
+<ul class="simple">
+<li>lxml.sax.ElementTreeContentHandler checks closing elements and raises
+SaxError on mismatch</li>
+<li>lxml.sax.ElementTreeContentHandler supports namespace-less SAX events
+(startElement, endElement) and defaults to empty attributes (keyword
+argument)</li>
+<li>Speedup for repeatedly accessing element tag names</li>
+<li>Minor API performance improvements</li>
+</ul>
+</div>
+<div class="section" id="id264">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Memory deallocation bug when using XSLT output method &quot;html&quot;</li>
+<li>sax.py was handling UTF-8 encoded tag names where it shouldn't</li>
+<li>lxml.tests package will no longer be installed (is still in source tar)</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id265">
+<h1>0.9 (2006-03-20)</h1>
+<div class="section" id="id266">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Error logging API for libxml2 error messages</li>
+<li>Various performance improvements</li>
+<li>Benchmark script for lxml, ElementTree and cElementTree</li>
+<li>Support for registering extension functions through new FunctionNamespace
+class (see doc/extensions.txt)</li>
+<li>ETXPath class for XPath expressions in ElementTree notation ('//{ns}tag')</li>
+<li>Support for variables in XPath expressions (also in XPath class)</li>
+<li>XPath class for compiled XPath expressions</li>
+<li>XMLID module level function (ElementTree compatible)</li>
+<li>XMLParser API for customized libxml2 parser configuration</li>
+<li>Support for custom Element classes through new Namespace API (see
+doc/namespace_extensions.txt)</li>
+<li>Common exception base class LxmlError for module exceptions</li>
+<li>real iterator support in iter(Element), Element.getiterator()</li>
+<li>XSLT objects are callable, result trees support str()</li>
+<li>Added MANIFEST.in for easier creation of RPM files.</li>
+<li>'getparent' method on elements allows navigation to an element's
+parent element.</li>
+<li>Python core compatible SAX tree builder and SAX event generator. See
+doc/sax.txt for more information.</li>
+</ul>
+</div>
+<div class="section" id="id267">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Segfaults and memory leaks in various API functions of Element</li>
+<li>Segfault in XSLT.tostring()</li>
+<li>ElementTree objects no longer interfere, Elements can be root of different
+ElementTrees at the same time</li>
+<li>document('') works in XSLT documents read from files (in-memory documents
+cannot support this due to libxslt deficiencies)</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id268">
+<h1>0.8 (2005-11-03)</h1>
+<div class="section" id="id269">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Support for copy.deepcopy() on elements. copy.copy() works also, but
+does the same thing, and does <em>not</em> create a shallow copy, as that
+makes no sense in the context of libxml2 trees. This means a
+potential incompatibility with ElementTree, but there's more chance
+that it works than if copy.copy() isn't supported at all.</li>
+<li>Increased compatibility with (c)ElementTree; .parse() on ElementTree is
+supported and parsing of gzipped XML files works.</li>
+<li>implemented index() on elements, allowing one to find the index of a
+SubElement.</li>
+</ul>
+</div>
+<div class="section" id="id270">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Use xslt-config instead of xml2-config to find out libxml2
+directories to take into account a case where libxslt is installed
+in a different directory than libxslt.</li>
+<li>Eliminate crash condition in iteration when text nodes are changed.</li>
+<li>Passing 'None' to tostring() does not result in a segfault anymore,
+but an AssertionError.</li>
+<li>Some test fixes for Windows.</li>
+<li>Raise XMLSyntaxError and XPathSyntaxError instead of plain python
+syntax errors. This should be less confusing.</li>
+<li>Fixed error with uncaught exception in Pyrex code.</li>
+<li>Calling lxml.etree.fromstring('') throws XMLSyntaxError instead of a
+segfault.</li>
+<li>has_key() works on attrib. 'in' tests also work correctly on attrib.</li>
+<li>INSTALL.txt was saying 2.2.16 instead of 2.6.16 as a supported
+libxml2 version, as it should.</li>
+<li>Passing a UTF-8 encoded string to the XML() function would fail;
+fixed.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id271">
+<h1>0.7 (2005-06-15)</h1>
+<div class="section" id="id272">
+<h2>Features added</h2>
+<ul class="simple">
+<li>parameters (XPath expressions) can be passed to XSLT using keyword
+parameters.</li>
+<li>Simple XInclude support. Calling the xinclude() method on a tree
+will process any XInclude statements in the document.</li>
+<li>XMLSchema support. Use the XMLSchema class or the convenience
+xmlschema() method on a tree to do XML Schema (XSD) validation.</li>
+<li>Added convenience xslt() method on tree. This is less efficient
+than the XSLT object, but makes it easier to write quick code.</li>
+<li>Added convenience relaxng() method on tree. This is less efficient
+than the RelaxNG object, but makes it easier to write quick code.</li>
+<li>Make it possible to use XPathEvaluator with elements as well. The
+XPathEvaluator in this case will retain the element so multiple
+XPath queries can be made against one element efficiently. This
+replaces the second argument to the .evaluate() method that existed
+previously.</li>
+<li>Allow registerNamespace() to be called on an XPathEvaluator, after
+creation, to add additional namespaces. Also allow registerNamespaces(),
+which does the same for a namespace dictionary.</li>
+<li>Add 'prefix' attribute to element to be able to read prefix information.
+This is entirely read-only.</li>
+<li>It is possible to supply an extra nsmap keyword parameter to
+the Element() and SubElement() constructors, which supplies a
+prefix to namespace URI mapping. This will create namespace
+prefix declarations on these elements and these prefixes will show up
+in XML serialization.</li>
+</ul>
+</div>
+<div class="section" id="id273">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Killed yet another memory management related bug: trees created
+using newDoc would not get a libxml2-level dictionary, which caused
+problems when deallocating these documents later if they contained a
+node that came from a document with a dictionary.</li>
+<li>Moving namespaced elements between documents was problematic as
+references to the original document would remain. This has been fixed
+by applying xmlReconciliateNs() after each move operation.</li>
+<li>Can pass None to 'dump()' without segfaults.</li>
+<li>tostring() works properly for non-root elements as well.</li>
+<li>Cleaned out the tostring() method so it should handle encoding
+correctly.</li>
+<li>Cleaned out the ElementTree.write() method so it should handle encoding
+correctly. Writing directly to a file should also be faster, as there is no
+need to go through a Python string in that case. Made sure the test cases
+test both serializing to StringIO as well as serializing to a real file.</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id274">
+<h1>0.6 (2005-05-14)</h1>
+<div class="section" id="id275">
+<h2>Features added</h2>
+<ul class="simple">
+<li>Changed setup.py so that library_dirs is also guessed. This should
+help with compilation on the Mac OS X platform, where otherwise the
+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="id276">
+<h2>Bugs fixed</h2>
+<ul class="simple">
+<li>Do the right thing when handling namespaced attributes.</li>
+<li>fix bug where tostring() moved nodes into new documents. tostring()
+had very nasty side-effects before this fix, sorry!</li>
+</ul>
+</div>
+</div>
+<div class="section" id="id277">
+<h1>0.5.1 (2005-04-09)</h1>
+<ul class="simple">
+<li>Python 2.2 compatibility fixes.</li>
+<li>unicode fixes in Element() and Comment() as well as XML(); unicode
+input wasn't properly being UTF-8 encoded.</li>
+</ul>
+</div>
+<div class="section" id="id278">
+<h1>0.5 (2005-04-08)</h1>
+<p>Initial public release.</p>
+</div>
+</div>
+<div class="footer">
+<hr class="footer" />
+Generated on: 2014-01-02.
+
+</div>
+</body>
+</html>
index 415dcc461c8b87050e365bdf0a22a0065978adb5..c1e73f9fbdc513ea71a0c8c3c66116787445d266 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index 29a49095cc7f43098ec0fc74dd600085e26e97e2..9838da0ddf5e9402c79206f392d05153f0735095 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index 1c78e5584bed493b154624ca251abad5771621a1..1bf5a526a70e70343671cf262372d5d6ab41f127 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index fb12486b5b18adb5166fc3a3b7ceeb2b267dc012..01b48c6baa709742b9d9619521d0115f7840f739 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index 435cd528f520315e1c41c70785250c889b15b645..e1c48d28cff1f6bb890418f60168b3adcd1646ba 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index 82d5ac12aab3414a1a657b84959f059f20f21ed2..1657ee72bd23a5b60b50349f868ff07c9d94d8d2 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index ff86eae6e0e8fd4500719251a639429785df39d4..a5b657f5343a6c8499e775cdbae6c262e550d524 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index 1b5fd547d89ca4a673b73231bd4a61585d8d1b3a..8a8542aab094f10b2fad0b4bfe44dd66717ff45f 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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.2.4.pdf">PDF
+<p>The complete lxml documentation is available for download as <a class="reference external" href="lxmldoc-3.2.5.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.2.4.tgz">lxml 3.2.4</a>, released 2013-11-07
-(<a class="reference external" href="/changes-3.2.4.html">changes for 3.2.4</a>).  <a class="reference external" href="#old-versions">Older versions</a>
+<p>The latest version is <a class="reference external" href="/files/lxml-3.2.5.tgz">lxml 3.2.5</a>, released 2014-01-02
+(<a class="reference external" href="/changes-3.2.5.html">changes for 3.2.5</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.2.4.pdf">PDF documentation</a>.</p>
+<a class="reference external" href="lxmldoc-3.2.5.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
@@ -178,6 +178,7 @@ obstacle to using lxml in your codebase.</p>
 <a class="reference external" href="http://lxml.de/3.1/">3.1</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.2.4.tgz">lxml 3.2.4</a>, released 2013-11-07 (<a class="reference external" href="/changes-3.2.4.html">changes for 3.2.4</a>)</li>
 <li><a class="reference external" href="/files/lxml-3.2.3.tgz">lxml 3.2.3</a>, released 2013-07-28 (<a class="reference external" href="/changes-3.2.3.html">changes for 3.2.3</a>)</li>
 <li><a class="reference external" href="/files/lxml-3.2.2.tgz">lxml 3.2.2</a>, released 2013-07-28 (<a class="reference external" href="/changes-3.2.2.html">changes for 3.2.2</a>)</li>
 <li><a class="reference external" href="/files/lxml-3.2.1.tgz">lxml 3.2.1</a>, released 2013-05-11 (<a class="reference external" href="/changes-3.2.1.html">changes for 3.2.1</a>)</li>
@@ -212,7 +213,7 @@ donation is non-refundable.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index d47a587ca8c319e19a568055b935db053c2b0949..6af029fb9da147cb6054f839d3117c0c98afea99 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index 865a871311de1ed4bf07da43b39a82b6d4a93aec..f0157fa2da3be52cd0ae1ef50d94e281c9528ec8 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index bd764b34ff437aae5b6ff4db7d0776e2ec8288d0..b4e8a20afe752a4a40e87ac37feebbf94350aa55 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index 3056daa9c5c6163daa5ab7af32555807fd8d8c39..1eadb838999119852e715ffee800be1dd981ae21 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index d1cdfdf54eca072dd2eb906fbc14f76d00a943e6..cad407de0e988cb976af05fdb9614343105abf71 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index b2177e5ebeb10a4f0806ada97d84e90b10998feb..9c3bdd09591382e76dcdbd9d5f67c78d12c8a5cf 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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
@@ -674,7 +674,7 @@ with UTF-8 is also considerably faster in most cases.</p>
 </div>
 <div class="footer">
 <hr class="footer" />
-Generated on: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index d855893b107714deeea75ccb7556f057aa3582da..c998815d80c52e45c7adf91cbe0b78cbc7e0c26e 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index 3007c97f65046357fb65405c5435cd346171fdf2..0c3c549887dce9d06f03e0e029b1facd1ddcdc25 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index be26655cb550762b69932242ee64f9ea66596750..2500d962c43f38219b528d1f95809a00db27fecb 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index 3b9fc0344c0870b2ae7409b20853ab945b67f09b..a3163e979ff7056e0747404e8212b03be24c8acf 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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 1721ae176b9d124a025d133135ff9f32fb1ff1da..c43394ae1b63cf9e68e8ad42412da3094cd84f51 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index 707baaca5c63df533d3633c4a97ea884b1b2a101..b2cdba41202b02c983fc5301fd10a5e0c6e915ab 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index 3e413fe8d69db17053a8f86306fe6eca31f538ef..4a651c463cb7a395c6fc3762ae9aabeb64c7b19c 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#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 2 4-menu"><li class="menu title"><a href="changes-3.2.4.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#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 2 5-menu"><li class="menu title"><a href="changes-3.2.5.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: 2013-11-07.
+Generated on: 2014-01-02.
 
 </div>
 </body>
index f91d14a643bc486b024aa9dd5b70274acf46f82e..a49ec0ce7601d4085e93c94d512b3ec4531f195f 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.2.4`_, released 2013-11-07
-(`changes for 3.2.4`_).  `Older versions <#old-versions>`_
+The latest version is `lxml 3.2.5`_, released 2014-01-02
+(`changes for 3.2.5`_).  `Older versions <#old-versions>`_
 are listed below.
 
 Please take a look at the
@@ -239,7 +239,9 @@ See the web sites of lxml
 `3.1 <http://lxml.de/3.1/>`_
 and the `latest in-development version <http://lxml.de/dev/>`_.
 
-.. _`PDF documentation`: lxmldoc-3.2.4.pdf
+.. _`PDF documentation`: lxmldoc-3.2.5.pdf
+
+* `lxml 3.2.4`_, released 2013-11-07 (`changes for 3.2.4`_)
 
 * `lxml 3.2.3`_, released 2013-07-28 (`changes for 3.2.3`_)
 
@@ -265,6 +267,7 @@ and the `latest in-development version <http://lxml.de/dev/>`_.
 
 * `older releases <http://lxml.de/3.0/#old-versions>`_
 
+.. _`lxml 3.2.5`: /files/lxml-3.2.5.tgz
 .. _`lxml 3.2.4`: /files/lxml-3.2.4.tgz
 .. _`lxml 3.2.3`: /files/lxml-3.2.3.tgz
 .. _`lxml 3.2.2`: /files/lxml-3.2.2.tgz
@@ -278,6 +281,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.2.5`: /changes-3.2.5.html
 .. _`changes for 3.2.4`: /changes-3.2.4.html
 .. _`changes for 3.2.3`: /changes-3.2.3.html
 .. _`changes for 3.2.2`: /changes-3.2.2.html
diff --git a/doc/pdf/pubkey.asc b/doc/pdf/pubkey.asc
new file mode 100644 (file)
index 0000000..f72804c
--- /dev/null
@@ -0,0 +1,36 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.2 (GNU/Linux)
+
+mQGiBEQf3JQRBACciSqxoX0q3VurkRENVVtG/pVqtFh/d2CohbVJlLCrO4s7nnPj
+CTfZFt6tmykZjsLJl24XpEJt0O/C0jLcaBqvXVgVvRXHz4DjEYYuQF4LPthhI4MA
+4T7ExptX4lU5g3BVJ46vPU8uRBbbxarBRas9rYewgnrYKWpZZCa7yMq+9wCgnyyR
+Si4E3viLwi77jda135nA6vcD/iqu8zIl9/dFuUcOvxJrhrm+UdY72puZ1TVczSAH
+GOqMjrKkfyHlaJh/ZzWENpTZIfOdVhy7Chvva18vH4Wz7jKj5UeIpRrBvjAD28r3
+Y3W5bfsnpPkvDOyU1vqBsw4q+/250GXEX0JqV2Rbf5yLVgEZPdGrswO460dr4UVS
+8RS0BACYTmyrz57AugHc5tRkqNw6o7ux2deOT0c3AbUcOWtOocGumCsUf+M1nOrc
+VWkeBWTv4HIIiecWYY/KwIemTthQGjxywaZDxOlBT0BOL/+vfYTq/plZULXr+g90
+rSe82+kLl9N5onkBDJKeDIcJDzRoxIRPV1i0Om/5JBI4jmUnv7QnU3RlZmFuIEJl
+aG5lbCA8c2NvZGVyQHVzZXJzLmJlcmxpb3MuZGU+iF8EExECACAFAkQiqKYCGwMG
+CwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRANPVNpCNOgHi+2AJ0a0JH8iP3RqrOL
+JefvHz1dSl3MxACYo7Ma6CeIgsGnyaSSdNOmNVXn+IhGBBARAgAGBQJEIqk0AAoJ
+ELO5mMzzmgZbmCcAoKZ2En1IlsxBpaPPxgWYrUOWfc6hAKCBWODMMOYptCBkSrjg
+m3gsrjHgYbQsU3RlZmFuIEJlaG5lbCA8c2NvZGVyQHVzZXJzLnNvdXJjZWZvcmdl
+Lm5ldD6IYAQTEQIAIAUCRB/clAIbAwYLCQgHAwIEFQIIAwQWAgMBAh4BAheAAAoJ
+EA09U2kI06Aen2YAn0hvuDs+Gslq9vPRFFbsFNJI40PmAJ0chjiiEy0xV5C+n6YX
+XFuldRDILYhGBBARAgAGBQJEIp4AAAoJELO5mMzzmgZbgKQAn3pWrmFdj8YaEyuR
+tEjKVZJDQ6ZVAJ0Y1igwADT40BPra+G/xiLa3YbCrrkCDQREH9ynEAgAiR4/0r0d
+doViNECfSLClllu5K0Bo1SEiMtvVNC3sJYgVzBddD8Xn8UAdjyAgmaL5FC2FsNQu
+RxxKkNlHNYCq8ZSWtZaL2MQ+SyMUyHv6VXVCGuSW0COpzbx58u+SZpjyESJ1kaZc
+73SaIw6kv/dVQHjurwmlo1lg3dLZ3PG08WGCYUMqkkv2K+J7+puzE2Cjo31gTq4s
+LYDCV26wjVQ6BqT2EcHQhVEjh0xq5ugc908cr/2FQAKkTifEbF+OVBGWiFMGgri+
+6+G54/BV/RakpvNCFYBiZHn/M9mQaWt7XoTmnEQ1ldq5KNlRhkqnQRF/NK5VpGcQ
+29As28aqpZTECwADBgf/WlRvBRI1Q1eIv2falEv7C6sOxqc3kr5z1uUBTRG5v9t6
+ff9k/J4oC6cnQx00GK3ZR8ija6bl8zwu+0m0M3rW49Krb1rsiT7r4ahOZ7p9RRro
+oG3NbUJYgMG10D1nxpaioYqa/m+PpILJM0wfYZZEuX0xkZcOB24yb+J7EIcGR09T
+mMd5sXtdTU+w/p7Xi2cP61uQ8qixyHBH8E06qgW2JtVFV9rGn7CNUOvkNaUBRnY5
+QxhdkvKJRx7voOLYWZFUBIWgto+6vmTgKmc2Ho6qddzME9UgwUNcknRgm0cf6Cxr
+6zPtxZl8a6KemjQcK7kARSmMNCDkqp/Pohe519A5vYhJBBgRAgAJBQJEH9ynAhsM
+AAoJEA09U2kI06Aesv4AnjiVQVLzqnNS/64vvMMP1UARY3HtAJ90YxNGhRNIhWYL
+UU16oJlGD/9M1Q==
+=gWy2
+-----END PGP PUBLIC KEY BLOCK-----
index fd88f4e3bb7db07027b76b5c7ef0a19e3fde3c41..2dc00cd67c27c17942e1926f7d3249e95869adf4 100644 (file)
@@ -1,12 +1,12 @@
 Metadata-Version: 1.1
 Name: lxml
-Version: 3.2.4
+Version: 3.2.5
 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.2.4.tar.gz
+Download-URL: http://pypi.python.org/packages/source/l/lxml/lxml-3.2.5.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.2.4 (2013-11-07)
+        3.2.5 (2014-01-02)
         ==================
         
         Features added
@@ -46,16 +46,12 @@ Description: lxml is a Pythonic, mature binding for the libxml2 and libxslt libr
         Bugs fixed
         ----------
         
-        * Memory leak when creating an XPath evaluator in a thread.
+        * Crash in xmlfile() when closing open elements out of order in an error case.
         
-        * LP#1228881: ``repr(XSLTAccessControl)`` failed in Python 3.
+        * Crash in target parsing with attributes.
         
-        * Raise ``ValueError`` when trying to append an Element to itself or
-          to one of its own descendants.
-        
-        * LP#1206077: htmldiff discarded whitespace from the output.
-        
-        * Compressed plain-text serialisation to file-like objects was broken.
+        * LP#1255132: crash when trying to run validation over non-Element (e.g.
+          comment or PI).
         
         Other changes
         -------------
index 17a3197467af33745f824ce8e2fb526d7b043d5b..8a415db783f8fa3ef6b5ed6e845e16ec6bb6b7ee 100644 (file)
@@ -59,7 +59,7 @@ doc/html/FAQ.html
 doc/html/api.html
 doc/html/build.html
 doc/html/capi.html
-doc/html/changes-3.2.4.html
+doc/html/changes-3.2.5.html
 doc/html/compatibility.html
 doc/html/credits.html
 doc/html/cssselect.html
@@ -516,6 +516,7 @@ doc/licenses/BSD.txt
 doc/licenses/GPL.txt
 doc/licenses/ZopePublicLicense.txt
 doc/licenses/elementtree.txt
+doc/pdf/pubkey.asc
 doc/s5/Makefile
 doc/s5/lxml-ep2008.html
 doc/s5/lxml-ep2008.txt
index 41df5ee38713353045e30b750053b2f020ebd472..476d06e982d0f237fd9a8ee1fbaf7fa55895c710 100644 (file)
@@ -58,7 +58,8 @@ cdef _Element _rootNodeOrRaise(object input):
     else:
         raise TypeError, u"Invalid input object: %s" % \
             python._fqtypename(input)
-    if node is None:
+    if (node is None or not node._c_node or
+            node._c_node.type != tree.XML_ELEMENT_NODE):
         raise ValueError, u"Input object has no element: %s" % \
             python._fqtypename(input)
     _assertValidNode(node)
index 7ffe0bf343004e886fab01049dd864b8e66a273e..c052ccf49a24d3444493317a5ae7844a1e49e8e2 100644 (file)
@@ -1,3 +1,3 @@
 #ifndef LXML_VERSION_STRING
-#define LXML_VERSION_STRING "3.2.4"
+#define LXML_VERSION_STRING "3.2.5"
 #endif
index 5695a013a4347efc20f56e0efac61295099edabe..e634c3a6f8b95a17be7ababee0769cf0f7328675 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.19.2 on Thu Nov  7 17:43:30 2013 */
+/* Generated by Cython 0.19.2 on Thu Jan  2 15:49:40 2014 */
 
 #define PY_SSIZE_T_CLEAN
 #ifndef CYTHON_USE_PYLONG_INTERNALS
@@ -779,7 +779,7 @@ struct __pyx_t_4lxml_5etree__nscache {
   size_t last;
 };
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":273
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":274
  *                                   _xcstr(attr_name_utf), _xcstr(value_utf))
  * 
  * ctypedef struct _ns_node_ref:             # <<<<<<<<<<<<<<
@@ -1313,7 +1313,7 @@ struct __pyx_obj_4lxml_5etree__IncrementalFileWriter {
   xmlOutputBuffer *_c_out;
   PyObject *_encoding;
   const char *_c_encoding;
-  PyObject *_target;
+  struct __pyx_obj_4lxml_5etree__FilelikeWriter *_target;
   PyObject *_element_stack;
   int _status;
 };
@@ -2165,7 +2165,7 @@ struct __pyx_obj_4lxml_5etree__ReadOnlyEntityProxy {
 };
 
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":880
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":883
  * @cython.final
  * @cython.internal
  * cdef class _FileWriterElement:             # <<<<<<<<<<<<<<
@@ -6381,7 +6381,6 @@ static char __pyx_k__UNICODE[] = "UNICODE";
 static char __pyx_k__WARNING[] = "WARNING";
 static char __pyx_k____all__[] = "__all__";
 static char __pyx_k___parent[] = "_parent";
-static char __pyx_k___writer[] = "_writer";
 static char __pyx_k__abspath[] = "abspath";
 static char __pyx_k__comment[] = "comment";
 static char __pyx_k__compact[] = "compact";
@@ -6583,7 +6582,6 @@ static char __pyx_k__LXML_VERSION[] = "LXML_VERSION";
 static char __pyx_k__RelaxNGError[] = "RelaxNGError";
 static char __pyx_k____qualname__[] = "__qualname__";
 static char __pyx_k___elementpath[] = "_elementpath";
-static char __pyx_k___exc_context[] = "_exc_context";
 static char __pyx_k__filter_types[] = "filter_types";
 static char __pyx_k__is_attribute[] = "is_attribute";
 static char __pyx_k__iterelements[] = "iterelements";
@@ -6651,7 +6649,6 @@ static char __pyx_k__XPathResultError[] = "XPathResultError";
 static char __pyx_k__XPathSyntaxError[] = "XPathSyntaxError";
 static char __pyx_k____getattribute__[] = "__getattribute__";
 static char __pyx_k___clear_error_log[] = "_clear_error_log";
-static char __pyx_k___raise_if_stored[] = "_raise_if_stored";
 static char __pyx_k__backslashreplace[] = "backslashreplace";
 static char __pyx_k__default_resolver[] = "default_resolver";
 static char __pyx_k__etree_or_element[] = "etree_or_element";
@@ -7209,7 +7206,6 @@ static PyObject *__pyx_n_s___doc;
 static PyObject *__pyx_n_s___elementpath;
 static PyObject *__pyx_n_s___etree_or_element;
 static PyObject *__pyx_n_s___eval_arg;
-static PyObject *__pyx_n_s___exc_context;
 static PyObject *__pyx_n_s___extra;
 static PyObject *__pyx_n_s___getName;
 static PyObject *__pyx_n_s___init;
@@ -7217,9 +7213,7 @@ static PyObject *__pyx_n_s___input;
 static PyObject *__pyx_n_s___names;
 static PyObject *__pyx_n_s___parent;
 static PyObject *__pyx_n_s___path;
-static PyObject *__pyx_n_s___raise_if_stored;
 static PyObject *__pyx_n_s___tag;
-static PyObject *__pyx_n_s___writer;
 static PyObject *__pyx_n_s___xslt;
 static PyObject *__pyx_n_s__abspath;
 static PyObject *__pyx_n_s__access_control;
@@ -13190,6 +13184,8 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__rootNodeOrRaise(PyObject *__pyx
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
+  int __pyx_t_6;
+  int __pyx_t_7;
   int __pyx_lineno = 0;
   const char *__pyx_filename = NULL;
   int __pyx_clineno = 0;
@@ -13274,8 +13270,8 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__rootNodeOrRaise(PyObject *__pyx
  *     else:
  *         raise TypeError, u"Invalid input object: %s" % \
  *             python._fqtypename(input)             # <<<<<<<<<<<<<<
- *     if node is None:
- *         raise ValueError, u"Input object has no element: %s" % \
+ *     if (node is None or not node._c_node or
+ *             node._c_node.type != tree.XML_ELEMENT_NODE):
  */
     __pyx_t_3 = __Pyx_PyBytes_FromString(_fqtypename(__pyx_v_input)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 60; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
@@ -13291,43 +13287,62 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__rootNodeOrRaise(PyObject *__pyx
   /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":61
  *         raise TypeError, u"Invalid input object: %s" % \
  *             python._fqtypename(input)
- *     if node is None:             # <<<<<<<<<<<<<<
+ *     if (node is None or not node._c_node or             # <<<<<<<<<<<<<<
+ *             node._c_node.type != tree.XML_ELEMENT_NODE):
  *         raise ValueError, u"Input object has no element: %s" % \
- *             python._fqtypename(input)
  */
   __pyx_t_2 = (((PyObject *)__pyx_v_node) == Py_None);
-  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (!(__pyx_t_2 != 0)) {
+    __pyx_t_1 = ((!(__pyx_v_node->_c_node != 0)) != 0);
+    if (!__pyx_t_1) {
+
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":62
+ *             python._fqtypename(input)
+ *     if (node is None or not node._c_node or
+ *             node._c_node.type != tree.XML_ELEMENT_NODE):             # <<<<<<<<<<<<<<
+ *         raise ValueError, u"Input object has no element: %s" % \
+ *             python._fqtypename(input)
+ */
+      __pyx_t_5 = ((__pyx_v_node->_c_node->type != XML_ELEMENT_NODE) != 0);
+      __pyx_t_6 = __pyx_t_5;
+    } else {
+      __pyx_t_6 = __pyx_t_1;
+    }
+    __pyx_t_1 = __pyx_t_6;
+  } else {
+    __pyx_t_1 = (__pyx_t_2 != 0);
+  }
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":63
- *     if node is None:
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":64
+ *             node._c_node.type != tree.XML_ELEMENT_NODE):
  *         raise ValueError, u"Input object has no element: %s" % \
  *             python._fqtypename(input)             # <<<<<<<<<<<<<<
  *     _assertValidNode(node)
  *     return node
  */
-    __pyx_t_4 = __Pyx_PyBytes_FromString(_fqtypename(__pyx_v_input)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyBytes_FromString(_fqtypename(__pyx_v_input)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_22), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_22), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_3), 0, 0);
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 62; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 63; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L4;
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":64
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":65
  *         raise ValueError, u"Input object has no element: %s" % \
  *             python._fqtypename(input)
  *     _assertValidNode(node)             # <<<<<<<<<<<<<<
  *     return node
  * 
  */
-  __pyx_t_5 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_node); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 64; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_node); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 65; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":65
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":66
  *             python._fqtypename(input)
  *     _assertValidNode(node)
  *     return node             # <<<<<<<<<<<<<<
@@ -13353,7 +13368,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__rootNodeOrRaise(PyObject *__pyx
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":67
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":68
  *     return node
  * 
  * cdef _Element _makeElement(tag, xmlDoc* c_doc, _Document doc,             # <<<<<<<<<<<<<<
@@ -13387,7 +13402,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
   __Pyx_RefNannySetupContext("_makeElement", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_doc);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":85
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":86
  *     """
  *     cdef xmlNode* c_node
  *     if doc is not None:             # <<<<<<<<<<<<<<
@@ -13398,7 +13413,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":86
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":87
  *     cdef xmlNode* c_node
  *     if doc is not None:
  *         c_doc = doc._c_doc             # <<<<<<<<<<<<<<
@@ -13411,14 +13426,14 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":87
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":88
  *     if doc is not None:
  *         c_doc = doc._c_doc
  *     ns_utf, name_utf = _getNsTag(tag)             # <<<<<<<<<<<<<<
  *     if parser is not None and parser._for_html:
  *         _htmlTagValidOrRaise(name_utf)
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_tag)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_tag)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   if (likely(PyTuple_CheckExact(__pyx_t_4))) {
     PyObject* sequence = __pyx_t_4;
@@ -13430,7 +13445,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
@@ -13438,18 +13453,18 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
     __Pyx_INCREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_t_6);
     #else
-    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     #endif
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   } else if (1) {
-    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   } else
   {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -13457,7 +13472,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
     __Pyx_GOTREF(__pyx_t_5);
     index = 1; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L4_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_6);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L5_unpacking_done;
@@ -13465,7 +13480,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 87; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 88; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_L5_unpacking_done:;
   }
   __pyx_v_ns_utf = __pyx_t_5;
@@ -13473,7 +13488,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
   __pyx_v_name_utf = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":88
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":89
  *         c_doc = doc._c_doc
  *     ns_utf, name_utf = _getNsTag(tag)
  *     if parser is not None and parser._for_html:             # <<<<<<<<<<<<<<
@@ -13488,16 +13503,16 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
   }
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":89
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":90
  *     ns_utf, name_utf = _getNsTag(tag)
  *     if parser is not None and parser._for_html:
  *         _htmlTagValidOrRaise(name_utf)             # <<<<<<<<<<<<<<
  *         if c_doc is NULL:
  *             c_doc = _newHTMLDoc()
  */
-    __pyx_t_9 = __pyx_f_4lxml_5etree__htmlTagValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 89; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_4lxml_5etree__htmlTagValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 90; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":90
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":91
  *     if parser is not None and parser._for_html:
  *         _htmlTagValidOrRaise(name_utf)
  *         if c_doc is NULL:             # <<<<<<<<<<<<<<
@@ -13507,14 +13522,14 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
     __pyx_t_1 = ((__pyx_v_c_doc == NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":91
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":92
  *         _htmlTagValidOrRaise(name_utf)
  *         if c_doc is NULL:
  *             c_doc = _newHTMLDoc()             # <<<<<<<<<<<<<<
  *     else:
  *         _tagValidOrRaise(name_utf)
  */
-      __pyx_t_3 = __pyx_f_4lxml_5etree__newHTMLDoc(); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 91; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_4lxml_5etree__newHTMLDoc(); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 92; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_v_c_doc = __pyx_t_3;
       goto __pyx_L7;
     }
@@ -13523,16 +13538,16 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":93
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":94
  *             c_doc = _newHTMLDoc()
  *     else:
  *         _tagValidOrRaise(name_utf)             # <<<<<<<<<<<<<<
  *         if c_doc is NULL:
  *             c_doc = _newXMLDoc()
  */
-    __pyx_t_9 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 93; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 94; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":94
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":95
  *     else:
  *         _tagValidOrRaise(name_utf)
  *         if c_doc is NULL:             # <<<<<<<<<<<<<<
@@ -13542,14 +13557,14 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
     __pyx_t_1 = ((__pyx_v_c_doc == NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":95
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":96
  *         _tagValidOrRaise(name_utf)
  *         if c_doc is NULL:
  *             c_doc = _newXMLDoc()             # <<<<<<<<<<<<<<
  *     c_node = _createElement(c_doc, name_utf)
  *     if c_node is NULL:
  */
-      __pyx_t_3 = __pyx_f_4lxml_5etree__newXMLDoc(); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 95; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_4lxml_5etree__newXMLDoc(); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_v_c_doc = __pyx_t_3;
       goto __pyx_L8;
     }
@@ -13557,17 +13572,17 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
   }
   __pyx_L6:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":96
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":97
  *         if c_doc is NULL:
  *             c_doc = _newXMLDoc()
  *     c_node = _createElement(c_doc, name_utf)             # <<<<<<<<<<<<<<
  *     if c_node is NULL:
  *         if doc is None and c_doc is not NULL:
  */
-  __pyx_t_10 = __pyx_f_4lxml_5etree__createElement(__pyx_v_c_doc, __pyx_v_name_utf); if (unlikely(__pyx_t_10 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 96; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_10 = __pyx_f_4lxml_5etree__createElement(__pyx_v_c_doc, __pyx_v_name_utf); if (unlikely(__pyx_t_10 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 97; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_c_node = __pyx_t_10;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":97
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":98
  *             c_doc = _newXMLDoc()
  *     c_node = _createElement(c_doc, name_utf)
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -13577,7 +13592,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":98
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":99
  *     c_node = _createElement(c_doc, name_utf)
  *     if c_node is NULL:
  *         if doc is None and c_doc is not NULL:             # <<<<<<<<<<<<<<
@@ -13593,7 +13608,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
     }
     if (__pyx_t_11) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":99
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":100
  *     if c_node is NULL:
  *         if doc is None and c_doc is not NULL:
  *             tree.xmlFreeDoc(c_doc)             # <<<<<<<<<<<<<<
@@ -13605,19 +13620,19 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
     }
     __pyx_L10:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":100
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":101
  *         if doc is None and c_doc is not NULL:
  *             tree.xmlFreeDoc(c_doc)
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     try:
  *         if doc is None:
  */
-    PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L9;
   }
   __pyx_L9:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":101
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":102
  *             tree.xmlFreeDoc(c_doc)
  *         raise MemoryError()
  *     try:             # <<<<<<<<<<<<<<
@@ -13631,7 +13646,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
     __Pyx_XGOTREF(__pyx_t_14);
     /*try:*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":102
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":103
  *         raise MemoryError()
  *     try:
  *         if doc is None:             # <<<<<<<<<<<<<<
@@ -13642,7 +13657,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
       __pyx_t_1 = (__pyx_t_11 != 0);
       if (__pyx_t_1) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":103
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":104
  *     try:
  *         if doc is None:
  *             tree.xmlDocSetRootElement(c_doc, c_node)             # <<<<<<<<<<<<<<
@@ -13651,14 +13666,14 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
  */
         xmlDocSetRootElement(__pyx_v_c_doc, __pyx_v_c_node);
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":104
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":105
  *         if doc is None:
  *             tree.xmlDocSetRootElement(c_doc, c_node)
  *             doc = _documentFactory(c_doc, parser)             # <<<<<<<<<<<<<<
  *         if text is not None:
  *             _setNodeText(c_node, text)
  */
-        __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 104; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__documentFactory(__pyx_v_c_doc, __pyx_v_parser)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 105; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_doc, ((struct LxmlDocument *)__pyx_t_4));
         __pyx_t_4 = 0;
@@ -13666,7 +13681,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
       }
       __pyx_L19:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":105
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":106
  *             tree.xmlDocSetRootElement(c_doc, c_node)
  *             doc = _documentFactory(c_doc, parser)
  *         if text is not None:             # <<<<<<<<<<<<<<
@@ -13677,19 +13692,19 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
       __pyx_t_11 = (__pyx_t_1 != 0);
       if (__pyx_t_11) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":106
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":107
  *             doc = _documentFactory(c_doc, parser)
  *         if text is not None:
  *             _setNodeText(c_node, text)             # <<<<<<<<<<<<<<
  *         if tail is not None:
  *             _setTailText(c_node, tail)
  */
-        __pyx_t_9 = __pyx_f_4lxml_5etree__setNodeText(__pyx_v_c_node, __pyx_v_text); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 106; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_9 = __pyx_f_4lxml_5etree__setNodeText(__pyx_v_c_node, __pyx_v_text); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 107; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
         goto __pyx_L20;
       }
       __pyx_L20:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":107
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":108
  *         if text is not None:
  *             _setNodeText(c_node, text)
  *         if tail is not None:             # <<<<<<<<<<<<<<
@@ -13700,39 +13715,39 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
       __pyx_t_1 = (__pyx_t_11 != 0);
       if (__pyx_t_1) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":108
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":109
  *             _setNodeText(c_node, text)
  *         if tail is not None:
  *             _setTailText(c_node, tail)             # <<<<<<<<<<<<<<
  *         # add namespaces to node if necessary
  *         _initNodeNamespaces(c_node, doc, ns_utf, nsmap)
  */
-        __pyx_t_9 = __pyx_f_4lxml_5etree__setTailText(__pyx_v_c_node, __pyx_v_tail); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 108; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_9 = __pyx_f_4lxml_5etree__setTailText(__pyx_v_c_node, __pyx_v_tail); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 109; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
         goto __pyx_L21;
       }
       __pyx_L21:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":110
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":111
  *             _setTailText(c_node, tail)
  *         # add namespaces to node if necessary
  *         _initNodeNamespaces(c_node, doc, ns_utf, nsmap)             # <<<<<<<<<<<<<<
  *         _initNodeAttributes(c_node, doc, attrib, extra_attrs)
  *         return _elementFactory(doc, c_node)
  */
-      __pyx_t_9 = __pyx_f_4lxml_5etree__initNodeNamespaces(__pyx_v_c_node, __pyx_v_doc, __pyx_v_ns_utf, __pyx_v_nsmap); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 110; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+      __pyx_t_9 = __pyx_f_4lxml_5etree__initNodeNamespaces(__pyx_v_c_node, __pyx_v_doc, __pyx_v_ns_utf, __pyx_v_nsmap); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":111
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":112
  *         # add namespaces to node if necessary
  *         _initNodeNamespaces(c_node, doc, ns_utf, nsmap)
  *         _initNodeAttributes(c_node, doc, attrib, extra_attrs)             # <<<<<<<<<<<<<<
  *         return _elementFactory(doc, c_node)
  *     except:
  */
-      __pyx_t_4 = __pyx_f_4lxml_5etree__initNodeAttributes(__pyx_v_c_node, __pyx_v_doc, __pyx_v_attrib, __pyx_v_extra_attrs); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 111; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+      __pyx_t_4 = __pyx_f_4lxml_5etree__initNodeAttributes(__pyx_v_c_node, __pyx_v_doc, __pyx_v_attrib, __pyx_v_extra_attrs); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":112
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":113
  *         _initNodeNamespaces(c_node, doc, ns_utf, nsmap)
  *         _initNodeAttributes(c_node, doc, attrib, extra_attrs)
  *         return _elementFactory(doc, c_node)             # <<<<<<<<<<<<<<
@@ -13740,7 +13755,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
  *         # free allocated c_node/c_doc unless Python does it for us
  */
       __Pyx_XDECREF(((PyObject *)__pyx_r));
-      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_doc, __pyx_v_c_node)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 112; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(__pyx_v_doc, __pyx_v_c_node)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_r = ((struct LxmlElement *)__pyx_t_4);
       __pyx_t_4 = 0;
@@ -13762,7 +13777,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
     __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":113
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":114
  *         _initNodeAttributes(c_node, doc, attrib, extra_attrs)
  *         return _elementFactory(doc, c_node)
  *     except:             # <<<<<<<<<<<<<<
@@ -13771,12 +13786,12 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
  */
     /*except:*/ {
       __Pyx_AddTraceback("lxml.etree._makeElement", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 113; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
+      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_5) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 114; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_5);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":115
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":116
  *     except:
  *         # free allocated c_node/c_doc unless Python does it for us
  *         if c_node.doc is not c_doc:             # <<<<<<<<<<<<<<
@@ -13786,7 +13801,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
       __pyx_t_1 = ((__pyx_v_c_node->doc != __pyx_v_c_doc) != 0);
       if (__pyx_t_1) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":117
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":118
  *         if c_node.doc is not c_doc:
  *             # node not yet in document => will not be freed by document
  *             if tail is not None:             # <<<<<<<<<<<<<<
@@ -13797,7 +13812,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
         __pyx_t_11 = (__pyx_t_1 != 0);
         if (__pyx_t_11) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":118
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":119
  *             # node not yet in document => will not be freed by document
  *             if tail is not None:
  *                 _removeText(c_node.next) # tail             # <<<<<<<<<<<<<<
@@ -13809,7 +13824,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
         }
         __pyx_L25:;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":119
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":120
  *             if tail is not None:
  *                 _removeText(c_node.next) # tail
  *             tree.xmlFreeNode(c_node)             # <<<<<<<<<<<<<<
@@ -13821,7 +13836,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
       }
       __pyx_L24:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":120
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":121
  *                 _removeText(c_node.next) # tail
  *             tree.xmlFreeNode(c_node)
  *         if doc is None:             # <<<<<<<<<<<<<<
@@ -13832,7 +13847,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
       __pyx_t_1 = (__pyx_t_11 != 0);
       if (__pyx_t_1) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":122
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":123
  *         if doc is None:
  *             # c_doc will not be freed by doc
  *             tree.xmlFreeDoc(c_doc)             # <<<<<<<<<<<<<<
@@ -13844,7 +13859,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
       }
       __pyx_L26:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":123
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":124
  *             # c_doc will not be freed by doc
  *             tree.xmlFreeDoc(c_doc)
  *         raise             # <<<<<<<<<<<<<<
@@ -13856,7 +13871,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
       __Pyx_GIVEREF(__pyx_t_5);
       __Pyx_ErrRestore(__pyx_t_4, __pyx_t_6, __pyx_t_5);
       __pyx_t_4 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; 
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 123; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 124; __pyx_clineno = __LINE__; goto __pyx_L13_except_error;}
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -13894,7 +13909,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeElement(PyObject *__pyx_v_t
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":125
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":126
  *         raise
  * 
  * cdef int _initNewElement(_Element element, bint is_html, name_utf, ns_utf,             # <<<<<<<<<<<<<<
@@ -13919,7 +13934,7 @@ static int __pyx_f_4lxml_5etree__initNewElement(struct LxmlElement *__pyx_v_elem
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_initNewElement", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":135
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":136
  *     cdef xmlNode* c_node
  *     cdef _Document doc
  *     if is_html:             # <<<<<<<<<<<<<<
@@ -13929,60 +13944,60 @@ static int __pyx_f_4lxml_5etree__initNewElement(struct LxmlElement *__pyx_v_elem
   __pyx_t_1 = (__pyx_v_is_html != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":136
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":137
  *     cdef _Document doc
  *     if is_html:
  *         _htmlTagValidOrRaise(name_utf)             # <<<<<<<<<<<<<<
  *         c_doc = _newHTMLDoc()
  *     else:
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree__htmlTagValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 136; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_4lxml_5etree__htmlTagValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":137
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":138
  *     if is_html:
  *         _htmlTagValidOrRaise(name_utf)
  *         c_doc = _newHTMLDoc()             # <<<<<<<<<<<<<<
  *     else:
  *         _tagValidOrRaise(name_utf)
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__newHTMLDoc(); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 137; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_4lxml_5etree__newHTMLDoc(); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 138; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_c_doc = __pyx_t_3;
     goto __pyx_L3;
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":139
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":140
  *         c_doc = _newHTMLDoc()
  *     else:
  *         _tagValidOrRaise(name_utf)             # <<<<<<<<<<<<<<
  *         c_doc = _newXMLDoc()
  *     c_node = _createElement(c_doc, name_utf)
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":140
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":141
  *     else:
  *         _tagValidOrRaise(name_utf)
  *         c_doc = _newXMLDoc()             # <<<<<<<<<<<<<<
  *     c_node = _createElement(c_doc, name_utf)
  *     if c_node is NULL:
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__newXMLDoc(); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_4lxml_5etree__newXMLDoc(); if (unlikely(__pyx_t_3 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_c_doc = __pyx_t_3;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":141
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":142
  *         _tagValidOrRaise(name_utf)
  *         c_doc = _newXMLDoc()
  *     c_node = _createElement(c_doc, name_utf)             # <<<<<<<<<<<<<<
  *     if c_node is NULL:
  *         if c_doc is not NULL:
  */
-  __pyx_t_4 = __pyx_f_4lxml_5etree__createElement(__pyx_v_c_doc, __pyx_v_name_utf); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_4lxml_5etree__createElement(__pyx_v_c_doc, __pyx_v_name_utf); if (unlikely(__pyx_t_4 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_c_node = __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":142
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":143
  *         c_doc = _newXMLDoc()
  *     c_node = _createElement(c_doc, name_utf)
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -13992,7 +14007,7 @@ static int __pyx_f_4lxml_5etree__initNewElement(struct LxmlElement *__pyx_v_elem
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":143
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":144
  *     c_node = _createElement(c_doc, name_utf)
  *     if c_node is NULL:
  *         if c_doc is not NULL:             # <<<<<<<<<<<<<<
@@ -14002,7 +14017,7 @@ static int __pyx_f_4lxml_5etree__initNewElement(struct LxmlElement *__pyx_v_elem
     __pyx_t_1 = ((__pyx_v_c_doc != NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":144
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":145
  *     if c_node is NULL:
  *         if c_doc is not NULL:
  *             tree.xmlFreeDoc(c_doc)             # <<<<<<<<<<<<<<
@@ -14014,19 +14029,19 @@ static int __pyx_f_4lxml_5etree__initNewElement(struct LxmlElement *__pyx_v_elem
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":145
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":146
  *         if c_doc is not NULL:
  *             tree.xmlFreeDoc(c_doc)
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     tree.xmlDocSetRootElement(c_doc, c_node)
  *     doc = _documentFactory(c_doc, parser)
  */
-    PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 146; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L4;
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":146
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":147
  *             tree.xmlFreeDoc(c_doc)
  *         raise MemoryError()
  *     tree.xmlDocSetRootElement(c_doc, c_node)             # <<<<<<<<<<<<<<
@@ -14035,62 +14050,62 @@ static int __pyx_f_4lxml_5etree__initNewElement(struct LxmlElement *__pyx_v_elem
  */
   xmlDocSetRootElement(__pyx_v_c_doc, __pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":147
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":148
  *         raise MemoryError()
  *     tree.xmlDocSetRootElement(c_doc, c_node)
  *     doc = _documentFactory(c_doc, parser)             # <<<<<<<<<<<<<<
  *     # add namespaces to node if necessary
  *     _initNodeNamespaces(c_node, doc, ns_utf, nsmap)
  */
-  __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[4]; __pyx_lineno = 147; __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[4]; __pyx_lineno = 148; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_v_doc = ((struct LxmlDocument *)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":149
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":150
  *     doc = _documentFactory(c_doc, parser)
  *     # add namespaces to node if necessary
  *     _initNodeNamespaces(c_node, doc, ns_utf, nsmap)             # <<<<<<<<<<<<<<
  *     _initNodeAttributes(c_node, doc, attrib, extra_attrs)
  *     _registerProxy(element, doc, c_node)
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__initNodeNamespaces(__pyx_v_c_node, __pyx_v_doc, __pyx_v_ns_utf, __pyx_v_nsmap); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 149; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_4lxml_5etree__initNodeNamespaces(__pyx_v_c_node, __pyx_v_doc, __pyx_v_ns_utf, __pyx_v_nsmap); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":150
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":151
  *     # add namespaces to node if necessary
  *     _initNodeNamespaces(c_node, doc, ns_utf, nsmap)
  *     _initNodeAttributes(c_node, doc, attrib, extra_attrs)             # <<<<<<<<<<<<<<
  *     _registerProxy(element, doc, c_node)
  *     element._init()
  */
-  __pyx_t_5 = __pyx_f_4lxml_5etree__initNodeAttributes(__pyx_v_c_node, __pyx_v_doc, __pyx_v_attrib, __pyx_v_extra_attrs); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 150; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree__initNodeAttributes(__pyx_v_c_node, __pyx_v_doc, __pyx_v_attrib, __pyx_v_extra_attrs); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":151
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":152
  *     _initNodeNamespaces(c_node, doc, ns_utf, nsmap)
  *     _initNodeAttributes(c_node, doc, attrib, extra_attrs)
  *     _registerProxy(element, doc, c_node)             # <<<<<<<<<<<<<<
  *     element._init()
  *     return 0
  */
-  __pyx_t_2 = __pyx_f_4lxml_5etree__registerProxy(__pyx_v_element, __pyx_v_doc, __pyx_v_c_node); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 151; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_4lxml_5etree__registerProxy(__pyx_v_element, __pyx_v_doc, __pyx_v_c_node); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":152
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":153
  *     _initNodeAttributes(c_node, doc, attrib, extra_attrs)
  *     _registerProxy(element, doc, c_node)
  *     element._init()             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s___init); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_element), __pyx_n_s___init); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 153; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 152; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 153; __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;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":153
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":154
  *     _registerProxy(element, doc, c_node)
  *     element._init()
  *     return 0             # <<<<<<<<<<<<<<
@@ -14113,7 +14128,7 @@ static int __pyx_f_4lxml_5etree__initNewElement(struct LxmlElement *__pyx_v_elem
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":155
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":156
  *     return 0
  * 
  * cdef _Element _makeSubElement(_Element parent, tag, text, tail,             # <<<<<<<<<<<<<<
@@ -14147,7 +14162,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_makeSubElement", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":162
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":163
  *     cdef xmlNode* c_node
  *     cdef xmlDoc* c_doc
  *     if parent is None or parent._doc is None:             # <<<<<<<<<<<<<<
@@ -14163,7 +14178,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":163
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":164
  *     cdef xmlDoc* c_doc
  *     if parent is None or parent._doc is None:
  *         return None             # <<<<<<<<<<<<<<
@@ -14178,23 +14193,23 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":164
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":165
  *     if parent is None or parent._doc is None:
  *         return None
  *     _assertValidNode(parent)             # <<<<<<<<<<<<<<
  *     ns_utf, name_utf = _getNsTag(tag)
  *     c_doc = parent._doc._c_doc
  */
-  __pyx_t_4 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_parent); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 164; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_parent); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":165
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":166
  *         return None
  *     _assertValidNode(parent)
  *     ns_utf, name_utf = _getNsTag(tag)             # <<<<<<<<<<<<<<
  *     c_doc = parent._doc._c_doc
  * 
  */
-  __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_tag)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_tag)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   if (likely(PyTuple_CheckExact(__pyx_t_5))) {
     PyObject* sequence = __pyx_t_5;
@@ -14206,7 +14221,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
@@ -14214,18 +14229,18 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
     __Pyx_INCREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_t_7);
     #else
-    __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __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[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
     #endif
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else if (1) {
-    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   } else
   {
     Py_ssize_t index = -1;
-    __pyx_t_8 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
@@ -14233,7 +14248,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
     __Pyx_GOTREF(__pyx_t_6);
     index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L4_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_7);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_9 = NULL;
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     goto __pyx_L5_unpacking_done;
@@ -14241,7 +14256,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     __pyx_t_9 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 165; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_L5_unpacking_done:;
   }
   __pyx_v_ns_utf = __pyx_t_6;
@@ -14249,7 +14264,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
   __pyx_v_name_utf = __pyx_t_7;
   __pyx_t_7 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":166
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":167
  *     _assertValidNode(parent)
  *     ns_utf, name_utf = _getNsTag(tag)
  *     c_doc = parent._doc._c_doc             # <<<<<<<<<<<<<<
@@ -14259,7 +14274,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
   __pyx_t_10 = __pyx_v_parent->_doc->_c_doc;
   __pyx_v_c_doc = __pyx_t_10;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":168
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":169
  *     c_doc = parent._doc._c_doc
  * 
  *     if parent._doc._parser is not None and parent._doc._parser._for_html:             # <<<<<<<<<<<<<<
@@ -14274,40 +14289,40 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
   }
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":169
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":170
  * 
  *     if parent._doc._parser is not None and parent._doc._parser._for_html:
  *         _htmlTagValidOrRaise(name_utf)             # <<<<<<<<<<<<<<
  *     else:
  *         _tagValidOrRaise(name_utf)
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree__htmlTagValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 169; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_4lxml_5etree__htmlTagValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 170; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L6;
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":171
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":172
  *         _htmlTagValidOrRaise(name_utf)
  *     else:
  *         _tagValidOrRaise(name_utf)             # <<<<<<<<<<<<<<
  * 
  *     c_node = _createElement(c_doc, name_utf)
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 171; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_4lxml_5etree__tagValidOrRaise(__pyx_v_name_utf); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 172; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_L6:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":173
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":174
  *         _tagValidOrRaise(name_utf)
  * 
  *     c_node = _createElement(c_doc, name_utf)             # <<<<<<<<<<<<<<
  *     if c_node is NULL:
  *         raise MemoryError()
  */
-  __pyx_t_11 = __pyx_f_4lxml_5etree__createElement(__pyx_v_c_doc, __pyx_v_name_utf); if (unlikely(__pyx_t_11 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 173; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_11 = __pyx_f_4lxml_5etree__createElement(__pyx_v_c_doc, __pyx_v_name_utf); if (unlikely(__pyx_t_11 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 174; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_c_node = __pyx_t_11;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":174
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":175
  * 
  *     c_node = _createElement(c_doc, name_utf)
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -14317,19 +14332,19 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":175
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":176
  *     c_node = _createElement(c_doc, name_utf)
  *     if c_node is NULL:
  *         raise MemoryError()             # <<<<<<<<<<<<<<
  *     tree.xmlAddChild(parent._c_node, c_node)
  * 
  */
-    PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 175; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 176; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L7;
   }
   __pyx_L7:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":176
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":177
  *     if c_node is NULL:
  *         raise MemoryError()
  *     tree.xmlAddChild(parent._c_node, c_node)             # <<<<<<<<<<<<<<
@@ -14338,7 +14353,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
  */
   xmlAddChild(__pyx_v_parent->_c_node, __pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":178
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":179
  *     tree.xmlAddChild(parent._c_node, c_node)
  * 
  *     try:             # <<<<<<<<<<<<<<
@@ -14352,7 +14367,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
     __Pyx_XGOTREF(__pyx_t_14);
     /*try:*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":179
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":180
  * 
  *     try:
  *         if text is not None:             # <<<<<<<<<<<<<<
@@ -14363,19 +14378,19 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
       __pyx_t_3 = (__pyx_t_1 != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":180
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":181
  *     try:
  *         if text is not None:
  *             _setNodeText(c_node, text)             # <<<<<<<<<<<<<<
  *         if tail is not None:
  *             _setTailText(c_node, tail)
  */
-        __pyx_t_4 = __pyx_f_4lxml_5etree__setNodeText(__pyx_v_c_node, __pyx_v_text); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 180; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+        __pyx_t_4 = __pyx_f_4lxml_5etree__setNodeText(__pyx_v_c_node, __pyx_v_text); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 181; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
         goto __pyx_L16;
       }
       __pyx_L16:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":181
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":182
  *         if text is not None:
  *             _setNodeText(c_node, text)
  *         if tail is not None:             # <<<<<<<<<<<<<<
@@ -14386,19 +14401,19 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
       __pyx_t_1 = (__pyx_t_3 != 0);
       if (__pyx_t_1) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":182
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":183
  *             _setNodeText(c_node, text)
  *         if tail is not None:
  *             _setTailText(c_node, tail)             # <<<<<<<<<<<<<<
  * 
  *         # add namespaces to node if necessary
  */
-        __pyx_t_4 = __pyx_f_4lxml_5etree__setTailText(__pyx_v_c_node, __pyx_v_tail); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 182; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+        __pyx_t_4 = __pyx_f_4lxml_5etree__setTailText(__pyx_v_c_node, __pyx_v_tail); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 183; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
         goto __pyx_L17;
       }
       __pyx_L17:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":185
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":186
  * 
  *         # add namespaces to node if necessary
  *         _initNodeNamespaces(c_node, parent._doc, ns_utf, nsmap)             # <<<<<<<<<<<<<<
@@ -14407,10 +14422,10 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
  */
       __pyx_t_5 = ((PyObject *)__pyx_v_parent->_doc);
       __Pyx_INCREF(__pyx_t_5);
-      __pyx_t_4 = __pyx_f_4lxml_5etree__initNodeNamespaces(__pyx_v_c_node, ((struct LxmlDocument *)__pyx_t_5), __pyx_v_ns_utf, __pyx_v_nsmap); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 185; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+      __pyx_t_4 = __pyx_f_4lxml_5etree__initNodeNamespaces(__pyx_v_c_node, ((struct LxmlDocument *)__pyx_t_5), __pyx_v_ns_utf, __pyx_v_nsmap); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":186
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":187
  *         # add namespaces to node if necessary
  *         _initNodeNamespaces(c_node, parent._doc, ns_utf, nsmap)
  *         _initNodeAttributes(c_node, parent._doc, attrib, extra_attrs)             # <<<<<<<<<<<<<<
@@ -14419,12 +14434,12 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
  */
       __pyx_t_5 = ((PyObject *)__pyx_v_parent->_doc);
       __Pyx_INCREF(__pyx_t_5);
-      __pyx_t_7 = __pyx_f_4lxml_5etree__initNodeAttributes(__pyx_v_c_node, ((struct LxmlDocument *)__pyx_t_5), __pyx_v_attrib, __pyx_v_extra_attrs); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 186; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+      __pyx_t_7 = __pyx_f_4lxml_5etree__initNodeAttributes(__pyx_v_c_node, ((struct LxmlDocument *)__pyx_t_5), __pyx_v_attrib, __pyx_v_extra_attrs); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 187; __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;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":187
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":188
  *         _initNodeNamespaces(c_node, parent._doc, ns_utf, nsmap)
  *         _initNodeAttributes(c_node, parent._doc, attrib, extra_attrs)
  *         return _elementFactory(parent._doc, c_node)             # <<<<<<<<<<<<<<
@@ -14434,7 +14449,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
       __Pyx_XDECREF(((PyObject *)__pyx_r));
       __pyx_t_7 = ((PyObject *)__pyx_v_parent->_doc);
       __Pyx_INCREF(__pyx_t_7);
-      __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_7), __pyx_v_c_node)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 187; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
+      __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_7), __pyx_v_c_node)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L8_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_r = ((struct LxmlElement *)__pyx_t_5);
@@ -14457,7 +14472,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
     __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/apihelpers.pxi":188
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":189
  *         _initNodeAttributes(c_node, parent._doc, attrib, extra_attrs)
  *         return _elementFactory(parent._doc, c_node)
  *     except:             # <<<<<<<<<<<<<<
@@ -14466,12 +14481,12 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
  */
     /*except:*/ {
       __Pyx_AddTraceback("lxml.etree._makeSubElement", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_7, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 188; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_7, &__pyx_t_6) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 189; __pyx_clineno = __LINE__; goto __pyx_L10_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/apihelpers.pxi":190
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":191
  *     except:
  *         # make sure we clean up in case of an error
  *         _removeNode(parent._doc, c_node)             # <<<<<<<<<<<<<<
@@ -14480,10 +14495,10 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
  */
       __pyx_t_8 = ((PyObject *)__pyx_v_parent->_doc);
       __Pyx_INCREF(__pyx_t_8);
-      __pyx_t_4 = __pyx_f_4lxml_5etree__removeNode(((struct LxmlDocument *)__pyx_t_8), __pyx_v_c_node); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 190; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+      __pyx_t_4 = __pyx_f_4lxml_5etree__removeNode(((struct LxmlDocument *)__pyx_t_8), __pyx_v_c_node); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":191
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":192
  *         # make sure we clean up in case of an error
  *         _removeNode(parent._doc, c_node)
  *         raise             # <<<<<<<<<<<<<<
@@ -14495,7 +14510,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
       __Pyx_GIVEREF(__pyx_t_6);
       __Pyx_ErrRestore(__pyx_t_5, __pyx_t_7, __pyx_t_6);
       __pyx_t_5 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; 
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 191; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 192; __pyx_clineno = __LINE__; goto __pyx_L10_except_error;}
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
@@ -14532,7 +14547,7 @@ static struct LxmlElement *__pyx_f_4lxml_5etree__makeSubElement(struct LxmlEleme
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":193
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":194
  *         raise
  * 
  * cdef int _initNodeNamespaces(xmlNode* c_node, _Document doc,             # <<<<<<<<<<<<<<
@@ -14571,18 +14586,18 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
   __Pyx_RefNannySetupContext("_initNodeNamespaces", 0);
   __Pyx_INCREF(__pyx_v_node_ns_utf);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":202
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":203
  *     cdef xmlNs* c_ns
  *     cdef list nsdefs
  *     if not nsmap:             # <<<<<<<<<<<<<<
  *         if node_ns_utf is not None:
  *             _uriValidOrRaise(node_ns_utf)
  */
-  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_nsmap); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_nsmap); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 203; __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/apihelpers.pxi":203
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":204
  *     cdef list nsdefs
  *     if not nsmap:
  *         if node_ns_utf is not None:             # <<<<<<<<<<<<<<
@@ -14593,28 +14608,28 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":204
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":205
  *     if not nsmap:
  *         if node_ns_utf is not None:
  *             _uriValidOrRaise(node_ns_utf)             # <<<<<<<<<<<<<<
  *             doc._setNodeNs(c_node, _xcstr(node_ns_utf))
  *         return 0
  */
-      __pyx_t_3 = __pyx_f_4lxml_5etree__uriValidOrRaise(__pyx_v_node_ns_utf); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 204; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_4lxml_5etree__uriValidOrRaise(__pyx_v_node_ns_utf); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":205
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":206
  *         if node_ns_utf is not None:
  *             _uriValidOrRaise(node_ns_utf)
  *             doc._setNodeNs(c_node, _xcstr(node_ns_utf))             # <<<<<<<<<<<<<<
  *         return 0
  * 
  */
-      __pyx_t_3 = __pyx_f_4lxml_5etree_9_Document__setNodeNs(__pyx_v_doc, __pyx_v_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_node_ns_utf)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 205; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_4lxml_5etree_9_Document__setNodeNs(__pyx_v_doc, __pyx_v_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_node_ns_utf)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 206; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L4;
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":206
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":207
  *             _uriValidOrRaise(node_ns_utf)
  *             doc._setNodeNs(c_node, _xcstr(node_ns_utf))
  *         return 0             # <<<<<<<<<<<<<<
@@ -14627,39 +14642,39 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":208
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":209
  *         return 0
  * 
  *     nsdefs = list(nsmap.items())             # <<<<<<<<<<<<<<
  *     if None in nsmap and len(nsdefs) > 1:
  *         # Move the default namespace to the end.  This makes sure libxml2
  */
-  __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 = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __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 = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 209; __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 = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   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))), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 208; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
   __pyx_v_nsdefs = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":209
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":210
  * 
  *     nsdefs = list(nsmap.items())
  *     if None in nsmap and len(nsdefs) > 1:             # <<<<<<<<<<<<<<
  *         # Move the default namespace to the end.  This makes sure libxml2
  *         # prefers a prefix if the ns is defined redundantly on the same
  */
-  __pyx_t_1 = (__Pyx_PySequence_Contains(Py_None, __pyx_v_nsmap, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = (__Pyx_PySequence_Contains(Py_None, __pyx_v_nsmap, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if ((__pyx_t_1 != 0)) {
-    __pyx_t_6 = PyList_GET_SIZE(((PyObject *)__pyx_v_nsdefs)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 209; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyList_GET_SIZE(((PyObject *)__pyx_v_nsdefs)); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 210; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_2 = ((__pyx_t_6 > 1) != 0);
     __pyx_t_7 = __pyx_t_2;
   } else {
@@ -14667,16 +14682,16 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
   }
   if (__pyx_t_7) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":216
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":217
  *         # elements serialise without prefix (i.e. into the non-default
  *         # namespace).
  *         item = (None, nsmap[None])             # <<<<<<<<<<<<<<
  *         nsdefs.remove(item)
  *         nsdefs.append(item)
  */
-    __pyx_t_5 = PyObject_GetItem(__pyx_v_nsmap, Py_None); if (!__pyx_t_5) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_GetItem(__pyx_v_nsmap, Py_None); if (!__pyx_t_5) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 216; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(Py_None);
     PyTuple_SET_ITEM(__pyx_t_4, 0, Py_None);
@@ -14687,39 +14702,39 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
     __pyx_v_item = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":217
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":218
  *         # namespace).
  *         item = (None, nsmap[None])
  *         nsdefs.remove(item)             # <<<<<<<<<<<<<<
  *         nsdefs.append(item)
  * 
  */
-    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_nsdefs), __pyx_n_s__remove); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_nsdefs), __pyx_n_s__remove); 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 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1); 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_INCREF(((PyObject *)__pyx_v_item));
     PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_item));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_item));
-    __pyx_t_8 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 217; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":218
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":219
  *         item = (None, nsmap[None])
  *         nsdefs.remove(item)
  *         nsdefs.append(item)             # <<<<<<<<<<<<<<
  * 
  *     for prefix, href in nsdefs:
  */
-    __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_nsdefs, ((PyObject *)__pyx_v_item)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 218; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_nsdefs, ((PyObject *)__pyx_v_item)); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 219; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L5;
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":220
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":221
  *         nsdefs.append(item)
  * 
  *     for prefix, href in nsdefs:             # <<<<<<<<<<<<<<
@@ -14730,9 +14745,9 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
   for (;;) {
     if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_8)) break;
     #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_5 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     #else
-    __pyx_t_5 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PySequence_ITEM(__pyx_t_8, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
       PyObject* sequence = __pyx_t_5;
@@ -14744,7 +14759,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -14757,16 +14772,16 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
       __Pyx_INCREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_10);
       #else
-      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_10);
       #endif
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     } else
     {
       Py_ssize_t index = -1;
-      __pyx_t_11 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_11 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_11)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_11);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_12 = Py_TYPE(__pyx_t_11)->tp_iternext;
@@ -14774,7 +14789,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
       __Pyx_GOTREF(__pyx_t_4);
       index = 1; __pyx_t_10 = __pyx_t_12(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L8_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_10);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_12(__pyx_t_11), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_12 = NULL;
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       goto __pyx_L9_unpacking_done;
@@ -14782,7 +14797,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __pyx_t_12 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 220; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_L9_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_4);
@@ -14790,28 +14805,28 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
     __Pyx_XDECREF_SET(__pyx_v_href, __pyx_t_10);
     __pyx_t_10 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":221
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":222
  * 
  *     for prefix, href in nsdefs:
  *         href_utf = _utf8(href)             # <<<<<<<<<<<<<<
  *         _uriValidOrRaise(href_utf)
  *         c_href = _xcstr(href_utf)
  */
-    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_href)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 221; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_href)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_XDECREF_SET(__pyx_v_href_utf, ((PyObject*)__pyx_t_5));
     __pyx_t_5 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":222
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":223
  *     for prefix, href in nsdefs:
  *         href_utf = _utf8(href)
  *         _uriValidOrRaise(href_utf)             # <<<<<<<<<<<<<<
  *         c_href = _xcstr(href_utf)
  *         if prefix is not None:
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree__uriValidOrRaise(((PyObject *)__pyx_v_href_utf)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 222; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_4lxml_5etree__uriValidOrRaise(((PyObject *)__pyx_v_href_utf)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":223
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":224
  *         href_utf = _utf8(href)
  *         _uriValidOrRaise(href_utf)
  *         c_href = _xcstr(href_utf)             # <<<<<<<<<<<<<<
@@ -14820,7 +14835,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
  */
     __pyx_v_c_href = (const xmlChar*)PyBytes_AS_STRING(((PyObject *)__pyx_v_href_utf));
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":224
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":225
  *         _uriValidOrRaise(href_utf)
  *         c_href = _xcstr(href_utf)
  *         if prefix is not None:             # <<<<<<<<<<<<<<
@@ -14831,28 +14846,28 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
     __pyx_t_1 = (__pyx_t_7 != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":225
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":226
  *         c_href = _xcstr(href_utf)
  *         if prefix is not None:
  *             prefix_utf = _utf8(prefix)             # <<<<<<<<<<<<<<
  *             _prefixValidOrRaise(prefix_utf)
  *             c_prefix = _xcstr(prefix_utf)
  */
-      __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_prefix)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 225; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_prefix)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_XDECREF_SET(__pyx_v_prefix_utf, ((PyObject*)__pyx_t_5));
       __pyx_t_5 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":226
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":227
  *         if prefix is not None:
  *             prefix_utf = _utf8(prefix)
  *             _prefixValidOrRaise(prefix_utf)             # <<<<<<<<<<<<<<
  *             c_prefix = _xcstr(prefix_utf)
  *         else:
  */
-      __pyx_t_3 = __pyx_f_4lxml_5etree__prefixValidOrRaise(((PyObject *)__pyx_v_prefix_utf)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 226; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_4lxml_5etree__prefixValidOrRaise(((PyObject *)__pyx_v_prefix_utf)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 227; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":227
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":228
  *             prefix_utf = _utf8(prefix)
  *             _prefixValidOrRaise(prefix_utf)
  *             c_prefix = _xcstr(prefix_utf)             # <<<<<<<<<<<<<<
@@ -14864,7 +14879,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":229
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":230
  *             c_prefix = _xcstr(prefix_utf)
  *         else:
  *             c_prefix = <const_xmlChar*>NULL             # <<<<<<<<<<<<<<
@@ -14875,7 +14890,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
     }
     __pyx_L10:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":231
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":232
  *             c_prefix = <const_xmlChar*>NULL
  *         # add namespace with prefix if it is not already known
  *         c_ns = tree.xmlSearchNs(doc._c_doc, c_node, c_prefix)             # <<<<<<<<<<<<<<
@@ -14884,7 +14899,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
  */
     __pyx_v_c_ns = xmlSearchNs(__pyx_v_doc->_c_doc, __pyx_v_c_node, __pyx_v_c_prefix);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":232
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":233
  *         # add namespace with prefix if it is not already known
  *         c_ns = tree.xmlSearchNs(doc._c_doc, c_node, c_prefix)
  *         if c_ns is NULL or \             # <<<<<<<<<<<<<<
@@ -14894,7 +14909,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
     __pyx_t_1 = ((__pyx_v_c_ns == NULL) != 0);
     if (!__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":233
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":234
  *         c_ns = tree.xmlSearchNs(doc._c_doc, c_node, c_prefix)
  *         if c_ns is NULL or \
  *                 c_ns.href is NULL or \             # <<<<<<<<<<<<<<
@@ -14904,7 +14919,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
       __pyx_t_7 = ((__pyx_v_c_ns->href == NULL) != 0);
       if (!__pyx_t_7) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":234
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":235
  *         if c_ns is NULL or \
  *                 c_ns.href is NULL or \
  *                 tree.xmlStrcmp(c_ns.href, c_href) != 0:             # <<<<<<<<<<<<<<
@@ -14922,7 +14937,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
     }
     if (__pyx_t_7) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":235
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":236
  *                 c_ns.href is NULL or \
  *                 tree.xmlStrcmp(c_ns.href, c_href) != 0:
  *             c_ns = tree.xmlNewNs(c_node, c_href, c_prefix)             # <<<<<<<<<<<<<<
@@ -14934,19 +14949,19 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
     }
     __pyx_L11:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":236
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":237
  *                 tree.xmlStrcmp(c_ns.href, c_href) != 0:
  *             c_ns = tree.xmlNewNs(c_node, c_href, c_prefix)
  *         if href_utf == node_ns_utf:             # <<<<<<<<<<<<<<
  *             tree.xmlSetNs(c_node, c_ns)
  *             node_ns_utf = None
  */
-    __pyx_t_5 = PyObject_RichCompare(((PyObject *)__pyx_v_href_utf), __pyx_v_node_ns_utf, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 236; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_RichCompare(((PyObject *)__pyx_v_href_utf), __pyx_v_node_ns_utf, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if (__pyx_t_7) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":237
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":238
  *             c_ns = tree.xmlNewNs(c_node, c_href, c_prefix)
  *         if href_utf == node_ns_utf:
  *             tree.xmlSetNs(c_node, c_ns)             # <<<<<<<<<<<<<<
@@ -14955,7 +14970,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
  */
       xmlSetNs(__pyx_v_c_node, __pyx_v_c_ns);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":238
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":239
  *         if href_utf == node_ns_utf:
  *             tree.xmlSetNs(c_node, c_ns)
  *             node_ns_utf = None             # <<<<<<<<<<<<<<
@@ -14970,7 +14985,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
   }
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":240
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":241
  *             node_ns_utf = None
  * 
  *     if node_ns_utf is not None:             # <<<<<<<<<<<<<<
@@ -14981,19 +14996,19 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
   __pyx_t_1 = (__pyx_t_7 != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":241
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":242
  * 
  *     if node_ns_utf is not None:
  *         doc._setNodeNs(c_node, _xcstr(node_ns_utf))             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree_9_Document__setNodeNs(__pyx_v_doc, __pyx_v_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_node_ns_utf)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 241; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_4lxml_5etree_9_Document__setNodeNs(__pyx_v_doc, __pyx_v_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_node_ns_utf)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 242; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L13;
   }
   __pyx_L13:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":242
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":243
  *     if node_ns_utf is not None:
  *         doc._setNodeNs(c_node, _xcstr(node_ns_utf))
  *     return 0             # <<<<<<<<<<<<<<
@@ -15025,7 +15040,7 @@ static int __pyx_f_4lxml_5etree__initNodeNamespaces(xmlNode *__pyx_v_c_node, str
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":244
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":245
  *     return 0
  * 
  * cdef _initNodeAttributes(xmlNode* c_node, _Document doc, attrib, extra):             # <<<<<<<<<<<<<<
@@ -15062,7 +15077,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
   __Pyx_RefNannySetupContext("_initNodeAttributes", 0);
   __Pyx_INCREF(__pyx_v_attrib);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":250
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":251
  *     cdef xmlNs* c_ns
  *     # 'extra' is not checked here (expected to be a keyword dict)
  *     if attrib is not None and not hasattr(attrib, u'items'):             # <<<<<<<<<<<<<<
@@ -15071,7 +15086,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
  */
   __pyx_t_1 = (__pyx_v_attrib != Py_None);
   if ((__pyx_t_1 != 0)) {
-    __pyx_t_2 = PyObject_HasAttr(__pyx_v_attrib, ((PyObject *)__pyx_n_u__items)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 250; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyObject_HasAttr(__pyx_v_attrib, ((PyObject *)__pyx_n_u__items)); if (unlikely(__pyx_t_2 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_3 = ((!(__pyx_t_2 != 0)) != 0);
     __pyx_t_2 = __pyx_t_3;
   } else {
@@ -15079,26 +15094,26 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
   }
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":252
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":253
  *     if attrib is not None and not hasattr(attrib, u'items'):
  *         raise TypeError, u"Invalid attribute dictionary: %s" % \
  *             python._fqtypename(attrib)             # <<<<<<<<<<<<<<
  *     if extra is not None and extra:
  *         if attrib is None:
  */
-    __pyx_t_4 = __Pyx_PyBytes_FromString(_fqtypename(__pyx_v_attrib)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyBytes_FromString(_fqtypename(__pyx_v_attrib)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-    __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_23), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_23), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_5));
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_Raise(__pyx_builtin_TypeError, ((PyObject *)__pyx_t_5), 0, 0);
     __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 251; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 252; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":253
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":254
  *         raise TypeError, u"Invalid attribute dictionary: %s" % \
  *             python._fqtypename(attrib)
  *     if extra is not None and extra:             # <<<<<<<<<<<<<<
@@ -15107,14 +15122,14 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
  */
   __pyx_t_2 = (__pyx_v_extra != Py_None);
   if (__pyx_t_2) {
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_extra); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_extra); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_3 = __pyx_t_1;
   } else {
     __pyx_t_3 = __pyx_t_2;
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":254
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":255
  *             python._fqtypename(attrib)
  *     if extra is not None and extra:
  *         if attrib is None:             # <<<<<<<<<<<<<<
@@ -15125,7 +15140,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
     __pyx_t_2 = (__pyx_t_3 != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":255
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":256
  *     if extra is not None and extra:
  *         if attrib is None:
  *             attrib = extra             # <<<<<<<<<<<<<<
@@ -15138,21 +15153,21 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":257
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":258
  *             attrib = extra
  *         else:
  *             attrib.update(extra)             # <<<<<<<<<<<<<<
  *     if attrib:
  *         is_html = doc._parser._for_html
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s__update); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s__update); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_v_extra);
       PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_extra);
       __Pyx_GIVEREF(__pyx_v_extra);
-      __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 257; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
@@ -15163,17 +15178,17 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":258
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":259
  *         else:
  *             attrib.update(extra)
  *     if attrib:             # <<<<<<<<<<<<<<
  *         is_html = doc._parser._for_html
  *         for name, value in sorted(attrib.items()):
  */
-  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_attrib); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 258; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_attrib); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 259; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":259
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":260
  *             attrib.update(extra)
  *     if attrib:
  *         is_html = doc._parser._for_html             # <<<<<<<<<<<<<<
@@ -15183,31 +15198,31 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
     __pyx_t_2 = __pyx_v_doc->_parser->_for_html;
     __pyx_v_is_html = __pyx_t_2;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":260
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":261
  *     if attrib:
  *         is_html = doc._parser._for_html
  *         for name, value in sorted(attrib.items()):             # <<<<<<<<<<<<<<
  *             attr_ns_utf, attr_name_utf = _getNsTag(name)
  *             if not is_html:
  */
-    __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 = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_4 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_4);
     __pyx_t_4 = 0;
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_sorted, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_builtin_sorted, ((PyObject *)__pyx_t_6), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
     if (PyList_CheckExact(__pyx_t_4) || PyTuple_CheckExact(__pyx_t_4)) {
       __pyx_t_6 = __pyx_t_4; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 0;
       __pyx_t_8 = NULL;
     } else {
-      __pyx_t_7 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_8 = Py_TYPE(__pyx_t_6)->tp_iternext;
     }
@@ -15216,23 +15231,23 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
       if (!__pyx_t_8 && PyList_CheckExact(__pyx_t_6)) {
         if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_6)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_4 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_4 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_4 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else if (!__pyx_t_8 && PyTuple_CheckExact(__pyx_t_6)) {
         if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_6)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_4); __pyx_t_7++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_4 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_4 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else {
         __pyx_t_4 = __pyx_t_8(__pyx_t_6);
         if (unlikely(!__pyx_t_4)) {
           if (PyErr_Occurred()) {
             if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-            else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           break;
         }
@@ -15248,7 +15263,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -15261,16 +15276,16 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
         __Pyx_INCREF(__pyx_t_5);
         __Pyx_INCREF(__pyx_t_9);
         #else
-        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_9);
         #endif
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else
       {
         Py_ssize_t index = -1;
-        __pyx_t_10 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_10 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -15278,7 +15293,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
         __Pyx_GOTREF(__pyx_t_5);
         index = 1; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L9_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_9);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_t_11 = NULL;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         goto __pyx_L10_unpacking_done;
@@ -15286,7 +15301,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __pyx_t_11 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_L10_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_5);
@@ -15294,14 +15309,14 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
       __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_9);
       __pyx_t_9 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":261
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":262
  *         is_html = doc._parser._for_html
  *         for name, value in sorted(attrib.items()):
  *             attr_ns_utf, attr_name_utf = _getNsTag(name)             # <<<<<<<<<<<<<<
  *             if not is_html:
  *                 _attributeValidOrRaise(attr_name_utf)
  */
-      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_name)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_name)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       if (likely(PyTuple_CheckExact(__pyx_t_4))) {
         PyObject* sequence = __pyx_t_4;
@@ -15313,7 +15328,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[4]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
@@ -15321,18 +15336,18 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
         __Pyx_INCREF(__pyx_t_9);
         __Pyx_INCREF(__pyx_t_5);
         #else
-        __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_9);
-        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_5);
         #endif
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       } else if (1) {
-        __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       } else
       {
         Py_ssize_t index = -1;
-        __pyx_t_10 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_10 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
         __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -15340,7 +15355,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
         __Pyx_GOTREF(__pyx_t_9);
         index = 1; __pyx_t_5 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_5)) goto __pyx_L11_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_5);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_t_11 = NULL;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         goto __pyx_L12_unpacking_done;
@@ -15348,7 +15363,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __pyx_t_11 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 262; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_L12_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_attr_ns_utf, __pyx_t_9);
@@ -15356,7 +15371,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
       __Pyx_XDECREF_SET(__pyx_v_attr_name_utf, __pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":262
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":263
  *         for name, value in sorted(attrib.items()):
  *             attr_ns_utf, attr_name_utf = _getNsTag(name)
  *             if not is_html:             # <<<<<<<<<<<<<<
@@ -15366,31 +15381,31 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
       __pyx_t_2 = ((!(__pyx_v_is_html != 0)) != 0);
       if (__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":263
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":264
  *             attr_ns_utf, attr_name_utf = _getNsTag(name)
  *             if not is_html:
  *                 _attributeValidOrRaise(attr_name_utf)             # <<<<<<<<<<<<<<
  *             value_utf = _utf8(value)
  *             if attr_ns_utf is None:
  */
-        __pyx_t_12 = __pyx_f_4lxml_5etree__attributeValidOrRaise(__pyx_v_attr_name_utf); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 263; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_12 = __pyx_f_4lxml_5etree__attributeValidOrRaise(__pyx_v_attr_name_utf); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         goto __pyx_L13;
       }
       __pyx_L13:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":264
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":265
  *             if not is_html:
  *                 _attributeValidOrRaise(attr_name_utf)
  *             value_utf = _utf8(value)             # <<<<<<<<<<<<<<
  *             if attr_ns_utf is None:
  *                 tree.xmlNewProp(c_node, _xcstr(attr_name_utf), _xcstr(value_utf))
  */
-      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 264; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 265; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_XDECREF_SET(__pyx_v_value_utf, ((PyObject*)__pyx_t_4));
       __pyx_t_4 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":265
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":266
  *                 _attributeValidOrRaise(attr_name_utf)
  *             value_utf = _utf8(value)
  *             if attr_ns_utf is None:             # <<<<<<<<<<<<<<
@@ -15401,7 +15416,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
       __pyx_t_3 = (__pyx_t_2 != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":266
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":267
  *             value_utf = _utf8(value)
  *             if attr_ns_utf is None:
  *                 tree.xmlNewProp(c_node, _xcstr(attr_name_utf), _xcstr(value_utf))             # <<<<<<<<<<<<<<
@@ -15413,26 +15428,26 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
       }
       /*else*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":268
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":269
  *                 tree.xmlNewProp(c_node, _xcstr(attr_name_utf), _xcstr(value_utf))
  *             else:
  *                 _uriValidOrRaise(attr_ns_utf)             # <<<<<<<<<<<<<<
  *                 c_ns = doc._findOrBuildNodeNs(c_node, _xcstr(attr_ns_utf), NULL, 1)
  *                 tree.xmlNewNsProp(c_node, c_ns,
  */
-        __pyx_t_12 = __pyx_f_4lxml_5etree__uriValidOrRaise(__pyx_v_attr_ns_utf); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 268; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_12 = __pyx_f_4lxml_5etree__uriValidOrRaise(__pyx_v_attr_ns_utf); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":269
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":270
  *             else:
  *                 _uriValidOrRaise(attr_ns_utf)
  *                 c_ns = doc._findOrBuildNodeNs(c_node, _xcstr(attr_ns_utf), NULL, 1)             # <<<<<<<<<<<<<<
  *                 tree.xmlNewNsProp(c_node, c_ns,
  *                                   _xcstr(attr_name_utf), _xcstr(value_utf))
  */
-        __pyx_t_13 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_doc, __pyx_v_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_attr_ns_utf), NULL, 1); if (unlikely(__pyx_t_13 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_13 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_doc, __pyx_v_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_attr_ns_utf), NULL, 1); if (unlikely(__pyx_t_13 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_v_c_ns = __pyx_t_13;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":271
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":272
  *                 c_ns = doc._findOrBuildNodeNs(c_node, _xcstr(attr_ns_utf), NULL, 1)
  *                 tree.xmlNewNsProp(c_node, c_ns,
  *                                   _xcstr(attr_name_utf), _xcstr(value_utf))             # <<<<<<<<<<<<<<
@@ -15470,7 +15485,7 @@ static PyObject *__pyx_f_4lxml_5etree__initNodeAttributes(xmlNode *__pyx_v_c_nod
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":277
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":278
  *     xmlNode* node
  * 
  * cdef int _removeUnusedNamespaceDeclarations(xmlNode* c_element) except -1:             # <<<<<<<<<<<<<<
@@ -15500,7 +15515,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_removeUnusedNamespaceDeclarations", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":289
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":290
  *     cdef size_t i
  * 
  *     c_ns_list = NULL             # <<<<<<<<<<<<<<
@@ -15509,7 +15524,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
   __pyx_v_c_ns_list = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":290
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":291
  * 
  *     c_ns_list = NULL
  *     c_ns_list_size = 0             # <<<<<<<<<<<<<<
@@ -15518,7 +15533,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
   __pyx_v_c_ns_list_size = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":291
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":292
  *     c_ns_list = NULL
  *     c_ns_list_size = 0
  *     c_ns_list_len  = 0             # <<<<<<<<<<<<<<
@@ -15527,7 +15542,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
   __pyx_v_c_ns_list_len = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":293
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":294
  *     c_ns_list_len  = 0
  * 
  *     if c_element.parent is not NULL and \             # <<<<<<<<<<<<<<
@@ -15537,7 +15552,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
   __pyx_t_1 = ((__pyx_v_c_element->parent != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":294
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":295
  * 
  *     if c_element.parent is not NULL and \
  *             c_element.parent.type == tree.XML_DOCUMENT_NODE:             # <<<<<<<<<<<<<<
@@ -15551,7 +15566,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":296
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":297
  *             c_element.parent.type == tree.XML_DOCUMENT_NODE:
  *         # include the document node
  *         c_nsdef = c_element.parent.nsDef             # <<<<<<<<<<<<<<
@@ -15561,7 +15576,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
     __pyx_t_4 = __pyx_v_c_element->parent->nsDef;
     __pyx_v_c_nsdef = __pyx_t_4;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":297
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":298
  *         # include the document node
  *         c_nsdef = c_element.parent.nsDef
  *         while c_nsdef is not NULL:             # <<<<<<<<<<<<<<
@@ -15572,7 +15587,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
       __pyx_t_3 = ((__pyx_v_c_nsdef != NULL) != 0);
       if (!__pyx_t_3) break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":298
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":299
  *         c_nsdef = c_element.parent.nsDef
  *         while c_nsdef is not NULL:
  *             if c_ns_list_len >= c_ns_list_size:             # <<<<<<<<<<<<<<
@@ -15582,7 +15597,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
       __pyx_t_3 = ((__pyx_v_c_ns_list_len >= __pyx_v_c_ns_list_size) != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":299
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":300
  *         while c_nsdef is not NULL:
  *             if c_ns_list_len >= c_ns_list_size:
  *                 if c_ns_list is NULL:             # <<<<<<<<<<<<<<
@@ -15592,7 +15607,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
         __pyx_t_3 = ((__pyx_v_c_ns_list == NULL) != 0);
         if (__pyx_t_3) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":300
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":301
  *             if c_ns_list_len >= c_ns_list_size:
  *                 if c_ns_list is NULL:
  *                     c_ns_list_size = 20             # <<<<<<<<<<<<<<
@@ -15604,7 +15619,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
         }
         /*else*/ {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":302
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":303
  *                     c_ns_list_size = 20
  *                 else:
  *                     c_ns_list_size *= 2             # <<<<<<<<<<<<<<
@@ -15615,7 +15630,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
         }
         __pyx_L7:;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":304
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":305
  *                     c_ns_list_size *= 2
  *                 c_nsref_ptr = <_ns_node_ref*> stdlib.realloc(
  *                     c_ns_list, c_ns_list_size * sizeof(_ns_node_ref))             # <<<<<<<<<<<<<<
@@ -15624,7 +15639,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
         __pyx_v_c_nsref_ptr = ((__pyx_t_4lxml_5etree__ns_node_ref *)realloc(__pyx_v_c_ns_list, (__pyx_v_c_ns_list_size * (sizeof(__pyx_t_4lxml_5etree__ns_node_ref)))));
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":305
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":306
  *                 c_nsref_ptr = <_ns_node_ref*> stdlib.realloc(
  *                     c_ns_list, c_ns_list_size * sizeof(_ns_node_ref))
  *                 if c_nsref_ptr is NULL:             # <<<<<<<<<<<<<<
@@ -15634,7 +15649,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
         __pyx_t_3 = ((__pyx_v_c_nsref_ptr == NULL) != 0);
         if (__pyx_t_3) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":306
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":307
  *                     c_ns_list, c_ns_list_size * sizeof(_ns_node_ref))
  *                 if c_nsref_ptr is NULL:
  *                     if c_ns_list is not NULL:             # <<<<<<<<<<<<<<
@@ -15644,7 +15659,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
           __pyx_t_3 = ((__pyx_v_c_ns_list != NULL) != 0);
           if (__pyx_t_3) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":307
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":308
  *                 if c_nsref_ptr is NULL:
  *                     if c_ns_list is not NULL:
  *                         stdlib.free(c_ns_list)             # <<<<<<<<<<<<<<
@@ -15656,19 +15671,19 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
           }
           __pyx_L9:;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":308
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":309
  *                     if c_ns_list is not NULL:
  *                         stdlib.free(c_ns_list)
  *                     raise MemoryError()             # <<<<<<<<<<<<<<
  *                 c_ns_list = c_nsref_ptr
  * 
  */
-          PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 308; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 309; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           goto __pyx_L8;
         }
         __pyx_L8:;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":309
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":310
  *                         stdlib.free(c_ns_list)
  *                     raise MemoryError()
  *                 c_ns_list = c_nsref_ptr             # <<<<<<<<<<<<<<
@@ -15680,7 +15695,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
       }
       __pyx_L6:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":311
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":312
  *                 c_ns_list = c_nsref_ptr
  * 
  *             c_ns_list[c_ns_list_len].ns   = c_nsdef             # <<<<<<<<<<<<<<
@@ -15689,7 +15704,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
       (__pyx_v_c_ns_list[__pyx_v_c_ns_list_len]).ns = __pyx_v_c_nsdef;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":312
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":313
  * 
  *             c_ns_list[c_ns_list_len].ns   = c_nsdef
  *             c_ns_list[c_ns_list_len].node = c_element.parent             # <<<<<<<<<<<<<<
@@ -15699,7 +15714,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
       __pyx_t_5 = __pyx_v_c_element->parent;
       (__pyx_v_c_ns_list[__pyx_v_c_ns_list_len]).node = __pyx_t_5;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":313
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":314
  *             c_ns_list[c_ns_list_len].ns   = c_nsdef
  *             c_ns_list[c_ns_list_len].node = c_element.parent
  *             c_ns_list_len += 1             # <<<<<<<<<<<<<<
@@ -15708,7 +15723,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
       __pyx_v_c_ns_list_len = (__pyx_v_c_ns_list_len + 1);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":314
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":315
  *             c_ns_list[c_ns_list_len].node = c_element.parent
  *             c_ns_list_len += 1
  *             c_nsdef = c_nsdef.next             # <<<<<<<<<<<<<<
@@ -15722,7 +15737,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":316
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":317
  *             c_nsdef = c_nsdef.next
  * 
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(c_element, c_element, 1)             # <<<<<<<<<<<<<<
@@ -15731,7 +15746,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
   BEGIN_FOR_EACH_ELEMENT_FROM(__pyx_v_c_element, __pyx_v_c_element, 1);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":318
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":319
  *     tree.BEGIN_FOR_EACH_ELEMENT_FROM(c_element, c_element, 1)
  *     # collect all new namespace declarations into the ns list
  *     c_nsdef = c_element.nsDef             # <<<<<<<<<<<<<<
@@ -15741,7 +15756,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
   __pyx_t_4 = __pyx_v_c_element->nsDef;
   __pyx_v_c_nsdef = __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":319
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":320
  *     # collect all new namespace declarations into the ns list
  *     c_nsdef = c_element.nsDef
  *     while c_nsdef is not NULL:             # <<<<<<<<<<<<<<
@@ -15752,7 +15767,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
     __pyx_t_3 = ((__pyx_v_c_nsdef != NULL) != 0);
     if (!__pyx_t_3) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":320
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":321
  *     c_nsdef = c_element.nsDef
  *     while c_nsdef is not NULL:
  *         if c_ns_list_len >= c_ns_list_size:             # <<<<<<<<<<<<<<
@@ -15762,7 +15777,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
     __pyx_t_3 = ((__pyx_v_c_ns_list_len >= __pyx_v_c_ns_list_size) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":321
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":322
  *     while c_nsdef is not NULL:
  *         if c_ns_list_len >= c_ns_list_size:
  *             if c_ns_list is NULL:             # <<<<<<<<<<<<<<
@@ -15772,7 +15787,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
       __pyx_t_3 = ((__pyx_v_c_ns_list == NULL) != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":322
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":323
  *         if c_ns_list_len >= c_ns_list_size:
  *             if c_ns_list is NULL:
  *                 c_ns_list_size = 20             # <<<<<<<<<<<<<<
@@ -15784,7 +15799,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
       }
       /*else*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":324
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":325
  *                 c_ns_list_size = 20
  *             else:
  *                 c_ns_list_size *= 2             # <<<<<<<<<<<<<<
@@ -15795,7 +15810,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
       }
       __pyx_L13:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":326
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":327
  *                 c_ns_list_size *= 2
  *             c_nsref_ptr = <_ns_node_ref*> stdlib.realloc(
  *                 c_ns_list, c_ns_list_size * sizeof(_ns_node_ref))             # <<<<<<<<<<<<<<
@@ -15804,7 +15819,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
       __pyx_v_c_nsref_ptr = ((__pyx_t_4lxml_5etree__ns_node_ref *)realloc(__pyx_v_c_ns_list, (__pyx_v_c_ns_list_size * (sizeof(__pyx_t_4lxml_5etree__ns_node_ref)))));
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":327
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":328
  *             c_nsref_ptr = <_ns_node_ref*> stdlib.realloc(
  *                 c_ns_list, c_ns_list_size * sizeof(_ns_node_ref))
  *             if c_nsref_ptr is NULL:             # <<<<<<<<<<<<<<
@@ -15814,7 +15829,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
       __pyx_t_3 = ((__pyx_v_c_nsref_ptr == NULL) != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":328
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":329
  *                 c_ns_list, c_ns_list_size * sizeof(_ns_node_ref))
  *             if c_nsref_ptr is NULL:
  *                 if c_ns_list is not NULL:             # <<<<<<<<<<<<<<
@@ -15824,7 +15839,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
         __pyx_t_3 = ((__pyx_v_c_ns_list != NULL) != 0);
         if (__pyx_t_3) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":329
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":330
  *             if c_nsref_ptr is NULL:
  *                 if c_ns_list is not NULL:
  *                     stdlib.free(c_ns_list)             # <<<<<<<<<<<<<<
@@ -15836,19 +15851,19 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
         }
         __pyx_L15:;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":330
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":331
  *                 if c_ns_list is not NULL:
  *                     stdlib.free(c_ns_list)
  *                 raise MemoryError()             # <<<<<<<<<<<<<<
  *             c_ns_list = c_nsref_ptr
  * 
  */
-        PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 330; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 331; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         goto __pyx_L14;
       }
       __pyx_L14:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":331
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":332
  *                     stdlib.free(c_ns_list)
  *                 raise MemoryError()
  *             c_ns_list = c_nsref_ptr             # <<<<<<<<<<<<<<
@@ -15860,7 +15875,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
     }
     __pyx_L12:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":333
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":334
  *             c_ns_list = c_nsref_ptr
  * 
  *         c_ns_list[c_ns_list_len].ns   = c_nsdef             # <<<<<<<<<<<<<<
@@ -15869,7 +15884,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
     (__pyx_v_c_ns_list[__pyx_v_c_ns_list_len]).ns = __pyx_v_c_nsdef;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":334
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":335
  * 
  *         c_ns_list[c_ns_list_len].ns   = c_nsdef
  *         c_ns_list[c_ns_list_len].node = c_element             # <<<<<<<<<<<<<<
@@ -15878,7 +15893,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
     (__pyx_v_c_ns_list[__pyx_v_c_ns_list_len]).node = __pyx_v_c_element;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":335
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":336
  *         c_ns_list[c_ns_list_len].ns   = c_nsdef
  *         c_ns_list[c_ns_list_len].node = c_element
  *         c_ns_list_len += 1             # <<<<<<<<<<<<<<
@@ -15887,7 +15902,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
     __pyx_v_c_ns_list_len = (__pyx_v_c_ns_list_len + 1);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":336
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":337
  *         c_ns_list[c_ns_list_len].node = c_element
  *         c_ns_list_len += 1
  *         c_nsdef = c_nsdef.next             # <<<<<<<<<<<<<<
@@ -15898,7 +15913,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
     __pyx_v_c_nsdef = __pyx_t_4;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":339
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":340
  * 
  *     # remove all namespace declarations from the list that are referenced
  *     if c_element.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -15908,7 +15923,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
   __pyx_t_3 = ((__pyx_v_c_element->type == XML_ELEMENT_NODE) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":340
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":341
  *     # remove all namespace declarations from the list that are referenced
  *     if c_element.type == tree.XML_ELEMENT_NODE:
  *         c_node = c_element             # <<<<<<<<<<<<<<
@@ -15917,7 +15932,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
     __pyx_v_c_node = __pyx_v_c_element;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":341
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":342
  *     if c_element.type == tree.XML_ELEMENT_NODE:
  *         c_node = c_element
  *         while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -15928,7 +15943,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
       __pyx_t_3 = ((__pyx_v_c_node != NULL) != 0);
       if (!__pyx_t_3) break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":342
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":343
  *         c_node = c_element
  *         while c_node is not NULL:
  *             if c_node.ns is not NULL:             # <<<<<<<<<<<<<<
@@ -15938,7 +15953,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
       __pyx_t_3 = ((__pyx_v_c_node->ns != NULL) != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":343
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":344
  *         while c_node is not NULL:
  *             if c_node.ns is not NULL:
  *                 for i in range(c_ns_list_len):             # <<<<<<<<<<<<<<
@@ -15949,7 +15964,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
         for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
           __pyx_v_i = __pyx_t_7;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":344
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":345
  *             if c_node.ns is not NULL:
  *                 for i in range(c_ns_list_len):
  *                     if c_node.ns is c_ns_list[i].ns:             # <<<<<<<<<<<<<<
@@ -15959,7 +15974,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
           __pyx_t_3 = ((__pyx_v_c_node->ns == (__pyx_v_c_ns_list[__pyx_v_i]).ns) != 0);
           if (__pyx_t_3) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":345
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":346
  *                 for i in range(c_ns_list_len):
  *                     if c_node.ns is c_ns_list[i].ns:
  *                         c_ns_list_len -= 1             # <<<<<<<<<<<<<<
@@ -15968,7 +15983,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
             __pyx_v_c_ns_list_len = (__pyx_v_c_ns_list_len - 1);
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":346
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":347
  *                     if c_node.ns is c_ns_list[i].ns:
  *                         c_ns_list_len -= 1
  *                         c_ns_list[i].ns   = c_ns_list[c_ns_list_len].ns             # <<<<<<<<<<<<<<
@@ -15978,7 +15993,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
             __pyx_t_4 = (__pyx_v_c_ns_list[__pyx_v_c_ns_list_len]).ns;
             (__pyx_v_c_ns_list[__pyx_v_i]).ns = __pyx_t_4;
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":347
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":348
  *                         c_ns_list_len -= 1
  *                         c_ns_list[i].ns   = c_ns_list[c_ns_list_len].ns
  *                         c_ns_list[i].node = c_ns_list[c_ns_list_len].node             # <<<<<<<<<<<<<<
@@ -15988,7 +16003,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
             __pyx_t_5 = (__pyx_v_c_ns_list[__pyx_v_c_ns_list_len]).node;
             (__pyx_v_c_ns_list[__pyx_v_i]).node = __pyx_t_5;
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":348
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":349
  *                         c_ns_list[i].ns   = c_ns_list[c_ns_list_len].ns
  *                         c_ns_list[i].node = c_ns_list[c_ns_list_len].node
  *                         c_ns_list[c_ns_list_len].ns   = NULL             # <<<<<<<<<<<<<<
@@ -15997,7 +16012,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
             (__pyx_v_c_ns_list[__pyx_v_c_ns_list_len]).ns = NULL;
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":349
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":350
  *                         c_ns_list[i].node = c_ns_list[c_ns_list_len].node
  *                         c_ns_list[c_ns_list_len].ns   = NULL
  *                         c_ns_list[c_ns_list_len].node = NULL             # <<<<<<<<<<<<<<
@@ -16006,7 +16021,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
             (__pyx_v_c_ns_list[__pyx_v_c_ns_list_len]).node = NULL;
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":350
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":351
  *                         c_ns_list[c_ns_list_len].ns   = NULL
  *                         c_ns_list[c_ns_list_len].node = NULL
  *                         break             # <<<<<<<<<<<<<<
@@ -16023,7 +16038,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
       }
       __pyx_L19:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":351
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":352
  *                         c_ns_list[c_ns_list_len].node = NULL
  *                         break
  *             if c_node is c_element:             # <<<<<<<<<<<<<<
@@ -16033,7 +16048,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
       __pyx_t_3 = ((__pyx_v_c_node == __pyx_v_c_element) != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":353
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":354
  *             if c_node is c_element:
  *                 # continue with attributes
  *                 c_node = <xmlNode*>c_element.properties             # <<<<<<<<<<<<<<
@@ -16045,7 +16060,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
       }
       /*else*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":355
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":356
  *                 c_node = <xmlNode*>c_element.properties
  *             else:
  *                 c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -16061,7 +16076,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
   }
   __pyx_L16:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":356
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":357
  *             else:
  *                 c_node = c_node.next
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_element)             # <<<<<<<<<<<<<<
@@ -16070,7 +16085,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
  */
   END_FOR_EACH_ELEMENT_FROM(__pyx_v_c_element);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":358
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":359
  *     tree.END_FOR_EACH_ELEMENT_FROM(c_element)
  * 
  *     if c_ns_list is NULL:             # <<<<<<<<<<<<<<
@@ -16080,7 +16095,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
   __pyx_t_3 = ((__pyx_v_c_ns_list == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":359
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":360
  * 
  *     if c_ns_list is NULL:
  *         return 0             # <<<<<<<<<<<<<<
@@ -16093,7 +16108,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
   }
   __pyx_L24:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":362
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":363
  * 
  *     # free all namespace declarations that remained in the list
  *     for i in range(c_ns_list_len):             # <<<<<<<<<<<<<<
@@ -16104,7 +16119,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
   for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
     __pyx_v_i = __pyx_t_7;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":363
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":364
  *     # free all namespace declarations that remained in the list
  *     for i in range(c_ns_list_len):
  *         c_node = c_ns_list[i].node             # <<<<<<<<<<<<<<
@@ -16114,7 +16129,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
     __pyx_t_5 = (__pyx_v_c_ns_list[__pyx_v_i]).node;
     __pyx_v_c_node = __pyx_t_5;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":364
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":365
  *     for i in range(c_ns_list_len):
  *         c_node = c_ns_list[i].node
  *         c_nsdef = c_node.nsDef             # <<<<<<<<<<<<<<
@@ -16124,7 +16139,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
     __pyx_t_4 = __pyx_v_c_node->nsDef;
     __pyx_v_c_nsdef = __pyx_t_4;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":365
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":366
  *         c_node = c_ns_list[i].node
  *         c_nsdef = c_node.nsDef
  *         if c_nsdef is c_ns_list[i].ns:             # <<<<<<<<<<<<<<
@@ -16134,7 +16149,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
     __pyx_t_3 = ((__pyx_v_c_nsdef == (__pyx_v_c_ns_list[__pyx_v_i]).ns) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":366
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":367
  *         c_nsdef = c_node.nsDef
  *         if c_nsdef is c_ns_list[i].ns:
  *             c_node.nsDef = c_node.nsDef.next             # <<<<<<<<<<<<<<
@@ -16147,7 +16162,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":368
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":369
  *             c_node.nsDef = c_node.nsDef.next
  *         else:
  *             while c_nsdef.next is not c_ns_list[i].ns:             # <<<<<<<<<<<<<<
@@ -16158,7 +16173,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
         __pyx_t_3 = ((__pyx_v_c_nsdef->next != (__pyx_v_c_ns_list[__pyx_v_i]).ns) != 0);
         if (!__pyx_t_3) break;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":369
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":370
  *         else:
  *             while c_nsdef.next is not c_ns_list[i].ns:
  *                 c_nsdef = c_nsdef.next             # <<<<<<<<<<<<<<
@@ -16169,7 +16184,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
         __pyx_v_c_nsdef = __pyx_t_4;
       }
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":370
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":371
  *             while c_nsdef.next is not c_ns_list[i].ns:
  *                 c_nsdef = c_nsdef.next
  *             c_nsdef.next = c_nsdef.next.next             # <<<<<<<<<<<<<<
@@ -16181,7 +16196,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
     }
     __pyx_L27:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":371
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":372
  *                 c_nsdef = c_nsdef.next
  *             c_nsdef.next = c_nsdef.next.next
  *         tree.xmlFreeNs(c_ns_list[i].ns)             # <<<<<<<<<<<<<<
@@ -16191,7 +16206,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
     xmlFreeNs((__pyx_v_c_ns_list[__pyx_v_i]).ns);
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":373
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":374
  *         tree.xmlFreeNs(c_ns_list[i].ns)
  * 
  *     if c_ns_list is not NULL:             # <<<<<<<<<<<<<<
@@ -16201,7 +16216,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
   __pyx_t_3 = ((__pyx_v_c_ns_list != NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":374
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":375
  * 
  *     if c_ns_list is not NULL:
  *         stdlib.free(c_ns_list)             # <<<<<<<<<<<<<<
@@ -16213,7 +16228,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
   }
   __pyx_L30:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":375
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":376
  *     if c_ns_list is not NULL:
  *         stdlib.free(c_ns_list)
  *     return 0             # <<<<<<<<<<<<<<
@@ -16233,7 +16248,7 @@ static int __pyx_f_4lxml_5etree__removeUnusedNamespaceDeclarations(xmlNode *__py
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":377
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":378
  *     return 0
  * 
  * cdef xmlNs* _searchNsByHref(xmlNode* c_node, const_xmlChar* c_href, bint is_attribute):             # <<<<<<<<<<<<<<
@@ -16255,7 +16270,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
   xmlNs *__pyx_t_6;
   __Pyx_RefNannySetupContext("_searchNsByHref", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":386
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":387
  *     """
  *     cdef xmlNs* c_ns
  *     cdef xmlNs* c_default_ns = NULL             # <<<<<<<<<<<<<<
@@ -16264,7 +16279,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
  */
   __pyx_v_c_default_ns = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":388
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":389
  *     cdef xmlNs* c_default_ns = NULL
  *     cdef xmlNode* c_element
  *     if c_href is NULL or c_node is NULL or c_node.type == tree.XML_ENTITY_REF_NODE:             # <<<<<<<<<<<<<<
@@ -16286,7 +16301,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
   }
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":389
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":390
  *     cdef xmlNode* c_element
  *     if c_href is NULL or c_node is NULL or c_node.type == tree.XML_ENTITY_REF_NODE:
  *         return NULL             # <<<<<<<<<<<<<<
@@ -16299,7 +16314,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":390
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":391
  *     if c_href is NULL or c_node is NULL or c_node.type == tree.XML_ENTITY_REF_NODE:
  *         return NULL
  *     if tree.xmlStrcmp(c_href, tree.XML_XML_NAMESPACE) == 0:             # <<<<<<<<<<<<<<
@@ -16309,7 +16324,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
   __pyx_t_2 = ((xmlStrcmp(__pyx_v_c_href, XML_XML_NAMESPACE) == 0) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":392
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":393
  *     if tree.xmlStrcmp(c_href, tree.XML_XML_NAMESPACE) == 0:
  *         # no special cases here, let libxml2 handle this
  *         return tree.xmlSearchNsByHref(c_node.doc, c_node, c_href)             # <<<<<<<<<<<<<<
@@ -16322,7 +16337,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":393
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":394
  *         # no special cases here, let libxml2 handle this
  *         return tree.xmlSearchNsByHref(c_node.doc, c_node, c_href)
  *     if c_node.type == tree.XML_ATTRIBUTE_NODE:             # <<<<<<<<<<<<<<
@@ -16332,7 +16347,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
   __pyx_t_2 = ((__pyx_v_c_node->type == XML_ATTRIBUTE_NODE) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":394
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":395
  *         return tree.xmlSearchNsByHref(c_node.doc, c_node, c_href)
  *     if c_node.type == tree.XML_ATTRIBUTE_NODE:
  *         is_attribute = 1             # <<<<<<<<<<<<<<
@@ -16344,7 +16359,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":395
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":396
  *     if c_node.type == tree.XML_ATTRIBUTE_NODE:
  *         is_attribute = 1
  *     while c_node is not NULL and c_node.type != tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -16361,7 +16376,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
     }
     if (!__pyx_t_4) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":396
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":397
  *         is_attribute = 1
  *     while c_node is not NULL and c_node.type != tree.XML_ELEMENT_NODE:
  *         c_node = c_node.parent             # <<<<<<<<<<<<<<
@@ -16372,7 +16387,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
     __pyx_v_c_node = __pyx_t_5;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":397
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":398
  *     while c_node is not NULL and c_node.type != tree.XML_ELEMENT_NODE:
  *         c_node = c_node.parent
  *     c_element = c_node             # <<<<<<<<<<<<<<
@@ -16381,7 +16396,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
  */
   __pyx_v_c_element = __pyx_v_c_node;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":398
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":399
  *         c_node = c_node.parent
  *     c_element = c_node
  *     while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -16392,7 +16407,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
     __pyx_t_4 = ((__pyx_v_c_node != NULL) != 0);
     if (!__pyx_t_4) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":399
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":400
  *     c_element = c_node
  *     while c_node is not NULL:
  *         if c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -16402,7 +16417,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
     __pyx_t_4 = ((__pyx_v_c_node->type == XML_ELEMENT_NODE) != 0);
     if (__pyx_t_4) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":400
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":401
  *     while c_node is not NULL:
  *         if c_node.type == tree.XML_ELEMENT_NODE:
  *             c_ns = c_node.nsDef             # <<<<<<<<<<<<<<
@@ -16412,7 +16427,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
       __pyx_t_6 = __pyx_v_c_node->nsDef;
       __pyx_v_c_ns = __pyx_t_6;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":401
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":402
  *         if c_node.type == tree.XML_ELEMENT_NODE:
  *             c_ns = c_node.nsDef
  *             while c_ns is not NULL:             # <<<<<<<<<<<<<<
@@ -16423,7 +16438,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
         __pyx_t_4 = ((__pyx_v_c_ns != NULL) != 0);
         if (!__pyx_t_4) break;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":402
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":403
  *             c_ns = c_node.nsDef
  *             while c_ns is not NULL:
  *                 if c_ns.href is not NULL and tree.xmlStrcmp(c_href, c_ns.href) == 0:             # <<<<<<<<<<<<<<
@@ -16439,7 +16454,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
         }
         if (__pyx_t_1) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":403
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":404
  *             while c_ns is not NULL:
  *                 if c_ns.href is not NULL and tree.xmlStrcmp(c_href, c_ns.href) == 0:
  *                     if c_ns.prefix is NULL and is_attribute:             # <<<<<<<<<<<<<<
@@ -16454,7 +16469,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
           }
           if (__pyx_t_4) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":407
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":408
  *                         # prefix, but keep the first default namespace
  *                         # declaration that we found
  *                         if c_default_ns is NULL:             # <<<<<<<<<<<<<<
@@ -16464,7 +16479,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
             __pyx_t_4 = ((__pyx_v_c_default_ns == NULL) != 0);
             if (__pyx_t_4) {
 
-              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":408
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":409
  *                         # declaration that we found
  *                         if c_default_ns is NULL:
  *                             c_default_ns = c_ns             # <<<<<<<<<<<<<<
@@ -16478,7 +16493,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
             goto __pyx_L14;
           }
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":410
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":411
  *                             c_default_ns = c_ns
  *                     elif tree.xmlSearchNs(
  *                         c_element.doc, c_element, c_ns.prefix) is c_ns:             # <<<<<<<<<<<<<<
@@ -16488,7 +16503,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
           __pyx_t_4 = ((xmlSearchNs(__pyx_v_c_element->doc, __pyx_v_c_element, __pyx_v_c_ns->prefix) == __pyx_v_c_ns) != 0);
           if (__pyx_t_4) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":412
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":413
  *                         c_element.doc, c_element, c_ns.prefix) is c_ns:
  *                         # start node is in namespace scope => found!
  *                         return c_ns             # <<<<<<<<<<<<<<
@@ -16504,7 +16519,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
         }
         __pyx_L13:;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":413
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":414
  *                         # start node is in namespace scope => found!
  *                         return c_ns
  *                 c_ns = c_ns.next             # <<<<<<<<<<<<<<
@@ -16515,7 +16530,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
         __pyx_v_c_ns = __pyx_t_6;
       }
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":414
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":415
  *                         return c_ns
  *                 c_ns = c_ns.next
  *             if c_node is not c_element and c_node.ns is not NULL:             # <<<<<<<<<<<<<<
@@ -16531,7 +16546,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
       }
       if (__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":416
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":417
  *             if c_node is not c_element and c_node.ns is not NULL:
  *                 # optimise: the node may have the namespace itself
  *                 c_ns = c_node.ns             # <<<<<<<<<<<<<<
@@ -16541,7 +16556,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
         __pyx_t_6 = __pyx_v_c_node->ns;
         __pyx_v_c_ns = __pyx_t_6;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":417
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":418
  *                 # optimise: the node may have the namespace itself
  *                 c_ns = c_node.ns
  *                 if c_ns.href is not NULL and tree.xmlStrcmp(c_href, c_ns.href) == 0:             # <<<<<<<<<<<<<<
@@ -16557,7 +16572,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
         }
         if (__pyx_t_1) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":418
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":419
  *                 c_ns = c_node.ns
  *                 if c_ns.href is not NULL and tree.xmlStrcmp(c_href, c_ns.href) == 0:
  *                     if c_ns.prefix is NULL and is_attribute:             # <<<<<<<<<<<<<<
@@ -16572,7 +16587,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
           }
           if (__pyx_t_2) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":422
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":423
  *                         # prefix, but keep the first default namespace
  *                         # declaration that we found
  *                         if c_default_ns is NULL:             # <<<<<<<<<<<<<<
@@ -16582,7 +16597,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
             __pyx_t_2 = ((__pyx_v_c_default_ns == NULL) != 0);
             if (__pyx_t_2) {
 
-              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":423
+              /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":424
  *                         # declaration that we found
  *                         if c_default_ns is NULL:
  *                             c_default_ns = c_ns             # <<<<<<<<<<<<<<
@@ -16596,7 +16611,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
             goto __pyx_L18;
           }
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":425
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":426
  *                             c_default_ns = c_ns
  *                     elif tree.xmlSearchNs(
  *                         c_element.doc, c_element, c_ns.prefix) is c_ns:             # <<<<<<<<<<<<<<
@@ -16606,7 +16621,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
           __pyx_t_2 = ((xmlSearchNs(__pyx_v_c_element->doc, __pyx_v_c_element, __pyx_v_c_ns->prefix) == __pyx_v_c_ns) != 0);
           if (__pyx_t_2) {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":427
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":428
  *                         c_element.doc, c_element, c_ns.prefix) is c_ns:
  *                         # start node is in namespace scope => found!
  *                         return c_ns             # <<<<<<<<<<<<<<
@@ -16628,7 +16643,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
     }
     __pyx_L10:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":428
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":429
  *                         # start node is in namespace scope => found!
  *                         return c_ns
  *         c_node = c_node.parent             # <<<<<<<<<<<<<<
@@ -16639,7 +16654,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
     __pyx_v_c_node = __pyx_t_5;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":430
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":431
  *         c_node = c_node.parent
  *     # nothing found => use a matching default namespace or fail
  *     if c_default_ns is not NULL:             # <<<<<<<<<<<<<<
@@ -16649,7 +16664,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
   __pyx_t_2 = ((__pyx_v_c_default_ns != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":431
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":432
  *     # nothing found => use a matching default namespace or fail
  *     if c_default_ns is not NULL:
  *         if tree.xmlSearchNs(c_element.doc, c_element, NULL) is c_default_ns:             # <<<<<<<<<<<<<<
@@ -16659,7 +16674,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
     __pyx_t_2 = ((xmlSearchNs(__pyx_v_c_element->doc, __pyx_v_c_element, NULL) == __pyx_v_c_default_ns) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":432
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":433
  *     if c_default_ns is not NULL:
  *         if tree.xmlSearchNs(c_element.doc, c_element, NULL) is c_default_ns:
  *             return c_default_ns             # <<<<<<<<<<<<<<
@@ -16675,7 +16690,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
   }
   __pyx_L20:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":433
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":434
  *         if tree.xmlSearchNs(c_element.doc, c_element, NULL) is c_default_ns:
  *             return c_default_ns
  *     return NULL             # <<<<<<<<<<<<<<
@@ -16691,7 +16706,7 @@ static xmlNs *__pyx_f_4lxml_5etree__searchNsByHref(xmlNode *__pyx_v_c_node, cons
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":435
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":436
  *     return NULL
  * 
  * cdef int _replaceNodeByChildren(_Document doc, xmlNode* c_node) except -1:             # <<<<<<<<<<<<<<
@@ -16712,7 +16727,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_replaceNodeByChildren", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":439
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":440
  *     cdef xmlNode* c_parent
  *     cdef xmlNode* c_child
  *     if c_node.children is NULL:             # <<<<<<<<<<<<<<
@@ -16722,7 +16737,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   __pyx_t_1 = ((__pyx_v_c_node->children == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":440
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":441
  *     cdef xmlNode* c_child
  *     if c_node.children is NULL:
  *         tree.xmlUnlinkNode(c_node)             # <<<<<<<<<<<<<<
@@ -16731,7 +16746,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
  */
     xmlUnlinkNode(__pyx_v_c_node);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":441
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":442
  *     if c_node.children is NULL:
  *         tree.xmlUnlinkNode(c_node)
  *         return 0             # <<<<<<<<<<<<<<
@@ -16744,7 +16759,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":443
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":444
  *         return 0
  * 
  *     c_parent = c_node.parent             # <<<<<<<<<<<<<<
@@ -16754,7 +16769,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   __pyx_t_2 = __pyx_v_c_node->parent;
   __pyx_v_c_parent = __pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":445
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":446
  *     c_parent = c_node.parent
  *     # fix parent links of children
  *     c_child = c_node.children             # <<<<<<<<<<<<<<
@@ -16764,7 +16779,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   __pyx_t_2 = __pyx_v_c_node->children;
   __pyx_v_c_child = __pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":446
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":447
  *     # fix parent links of children
  *     c_child = c_node.children
  *     while c_child is not NULL:             # <<<<<<<<<<<<<<
@@ -16775,7 +16790,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
     __pyx_t_1 = ((__pyx_v_c_child != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":447
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":448
  *     c_child = c_node.children
  *     while c_child is not NULL:
  *         c_child.parent = c_parent             # <<<<<<<<<<<<<<
@@ -16784,7 +16799,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
  */
     __pyx_v_c_child->parent = __pyx_v_c_parent;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":448
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":449
  *     while c_child is not NULL:
  *         c_child.parent = c_parent
  *         c_child = c_child.next             # <<<<<<<<<<<<<<
@@ -16795,7 +16810,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
     __pyx_v_c_child = __pyx_t_2;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":452
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":453
  *     # fix namespace references of children if their parent's namespace
  *     # declarations get lost
  *     if c_node.nsDef is not NULL:             # <<<<<<<<<<<<<<
@@ -16805,7 +16820,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   __pyx_t_1 = ((__pyx_v_c_node->nsDef != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":453
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":454
  *     # declarations get lost
  *     if c_node.nsDef is not NULL:
  *         c_child = c_node.children             # <<<<<<<<<<<<<<
@@ -16815,7 +16830,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
     __pyx_t_2 = __pyx_v_c_node->children;
     __pyx_v_c_child = __pyx_t_2;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":454
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":455
  *     if c_node.nsDef is not NULL:
  *         c_child = c_node.children
  *         while c_child is not NULL:             # <<<<<<<<<<<<<<
@@ -16826,16 +16841,16 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
       __pyx_t_1 = ((__pyx_v_c_child != NULL) != 0);
       if (!__pyx_t_1) break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":455
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":456
  *         c_child = c_node.children
  *         while c_child is not NULL:
  *             moveNodeToDocument(doc, doc._c_doc, c_child)             # <<<<<<<<<<<<<<
  *             c_child = c_child.next
  * 
  */
-      __pyx_t_3 = __pyx_f_4lxml_5etree_moveNodeToDocument(__pyx_v_doc, __pyx_v_doc->_c_doc, __pyx_v_c_child); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 455; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __pyx_f_4lxml_5etree_moveNodeToDocument(__pyx_v_doc, __pyx_v_doc->_c_doc, __pyx_v_c_child); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 456; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":456
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":457
  *         while c_child is not NULL:
  *             moveNodeToDocument(doc, doc._c_doc, c_child)
  *             c_child = c_child.next             # <<<<<<<<<<<<<<
@@ -16849,7 +16864,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   }
   __pyx_L6:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":459
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":460
  * 
  *     # fix sibling links to/from child slice
  *     if c_node.prev is NULL:             # <<<<<<<<<<<<<<
@@ -16859,7 +16874,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   __pyx_t_1 = ((__pyx_v_c_node->prev == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":460
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":461
  *     # fix sibling links to/from child slice
  *     if c_node.prev is NULL:
  *         c_parent.children = c_node.children             # <<<<<<<<<<<<<<
@@ -16872,7 +16887,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":462
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":463
  *         c_parent.children = c_node.children
  *     else:
  *         c_node.prev.next = c_node.children             # <<<<<<<<<<<<<<
@@ -16882,7 +16897,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
     __pyx_t_2 = __pyx_v_c_node->children;
     __pyx_v_c_node->prev->next = __pyx_t_2;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":463
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":464
  *     else:
  *         c_node.prev.next = c_node.children
  *         c_node.children.prev = c_node.prev             # <<<<<<<<<<<<<<
@@ -16894,7 +16909,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   }
   __pyx_L9:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":464
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":465
  *         c_node.prev.next = c_node.children
  *         c_node.children.prev = c_node.prev
  *     if c_node.next is NULL:             # <<<<<<<<<<<<<<
@@ -16904,7 +16919,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   __pyx_t_1 = ((__pyx_v_c_node->next == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":465
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":466
  *         c_node.children.prev = c_node.prev
  *     if c_node.next is NULL:
  *         c_parent.last = c_node.last             # <<<<<<<<<<<<<<
@@ -16917,7 +16932,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":467
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":468
  *         c_parent.last = c_node.last
  *     else:
  *         c_node.next.prev = c_node.last             # <<<<<<<<<<<<<<
@@ -16927,7 +16942,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
     __pyx_t_2 = __pyx_v_c_node->last;
     __pyx_v_c_node->next->prev = __pyx_t_2;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":468
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":469
  *     else:
  *         c_node.next.prev = c_node.last
  *         c_node.last.next = c_node.next             # <<<<<<<<<<<<<<
@@ -16939,7 +16954,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   }
   __pyx_L10:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":471
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":472
  * 
  *     # unlink c_node
  *     c_node.children = c_node.last = NULL             # <<<<<<<<<<<<<<
@@ -16949,7 +16964,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   __pyx_v_c_node->children = NULL;
   __pyx_v_c_node->last = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":472
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":473
  *     # unlink c_node
  *     c_node.children = c_node.last = NULL
  *     c_node.parent = c_node.next = c_node.prev = NULL             # <<<<<<<<<<<<<<
@@ -16960,7 +16975,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   __pyx_v_c_node->next = NULL;
   __pyx_v_c_node->prev = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":473
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":474
  *     c_node.children = c_node.last = NULL
  *     c_node.parent = c_node.next = c_node.prev = NULL
  *     return 0             # <<<<<<<<<<<<<<
@@ -16980,7 +16995,7 @@ static int __pyx_f_4lxml_5etree__replaceNodeByChildren(struct LxmlDocument *__py
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":475
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":476
  *     return 0
  * 
  * cdef object _attributeValue(xmlNode* c_element, xmlAttr* c_attrib_node):             # <<<<<<<<<<<<<<
@@ -17000,7 +17015,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValue(xmlNode *__pyx_v_c_element
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_attributeValue", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":476
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":477
  * 
  * cdef object _attributeValue(xmlNode* c_element, xmlAttr* c_attrib_node):
  *     c_href = _getNs(<xmlNode*>c_attrib_node)             # <<<<<<<<<<<<<<
@@ -17009,7 +17024,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValue(xmlNode *__pyx_v_c_element
  */
   __pyx_v_c_href = _getNs(((xmlNode *)__pyx_v_c_attrib_node));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":477
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":478
  * cdef object _attributeValue(xmlNode* c_element, xmlAttr* c_attrib_node):
  *     c_href = _getNs(<xmlNode*>c_attrib_node)
  *     value = tree.xmlGetNsProp(c_element, c_attrib_node.name, c_href)             # <<<<<<<<<<<<<<
@@ -17018,7 +17033,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValue(xmlNode *__pyx_v_c_element
  */
   __pyx_v_value = xmlGetNsProp(__pyx_v_c_element, __pyx_v_c_attrib_node->name, __pyx_v_c_href);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":478
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":479
  *     c_href = _getNs(<xmlNode*>c_attrib_node)
  *     value = tree.xmlGetNsProp(c_element, c_attrib_node.name, c_href)
  *     try:             # <<<<<<<<<<<<<<
@@ -17027,20 +17042,20 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValue(xmlNode *__pyx_v_c_element
  */
   /*try:*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":479
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":480
  *     value = tree.xmlGetNsProp(c_element, c_attrib_node.name, c_href)
  *     try:
  *         result = funicode(value)             # <<<<<<<<<<<<<<
  *     finally:
  *         tree.xmlFree(value)
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree_funicode(__pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 479; __pyx_clineno = __LINE__; goto __pyx_L4;}
+    __pyx_t_1 = __pyx_f_4lxml_5etree_funicode(__pyx_v_value); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 480; __pyx_clineno = __LINE__; goto __pyx_L4;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_v_result = __pyx_t_1;
     __pyx_t_1 = 0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":481
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":482
  *         result = funicode(value)
  *     finally:
  *         tree.xmlFree(value)             # <<<<<<<<<<<<<<
@@ -17074,7 +17089,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValue(xmlNode *__pyx_v_c_element
     }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":482
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":483
  *     finally:
  *         tree.xmlFree(value)
  *     return result             # <<<<<<<<<<<<<<
@@ -17099,7 +17114,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValue(xmlNode *__pyx_v_c_element
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":484
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":485
  *     return result
  * 
  * cdef object _attributeValueFromNsName(xmlNode* c_element,             # <<<<<<<<<<<<<<
@@ -17119,7 +17134,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_attributeValueFromNsName", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":486
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":487
  * cdef object _attributeValueFromNsName(xmlNode* c_element,
  *                                       const_xmlChar* c_href, const_xmlChar* c_name):
  *     c_result = tree.xmlGetNsProp(c_element, c_name, c_href)             # <<<<<<<<<<<<<<
@@ -17128,7 +17143,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v
  */
   __pyx_v_c_result = xmlGetNsProp(__pyx_v_c_element, __pyx_v_c_name, __pyx_v_c_href);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":487
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":488
  *                                       const_xmlChar* c_href, const_xmlChar* c_name):
  *     c_result = tree.xmlGetNsProp(c_element, c_name, c_href)
  *     if c_result is NULL:             # <<<<<<<<<<<<<<
@@ -17138,7 +17153,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v
   __pyx_t_1 = ((__pyx_v_c_result == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":488
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":489
  *     c_result = tree.xmlGetNsProp(c_element, c_name, c_href)
  *     if c_result is NULL:
  *         return None             # <<<<<<<<<<<<<<
@@ -17153,7 +17168,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":489
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":490
  *     if c_result is NULL:
  *         return None
  *     try:             # <<<<<<<<<<<<<<
@@ -17162,20 +17177,20 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v
  */
   /*try:*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":490
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":491
  *         return None
  *     try:
  *         result = funicode(c_result)             # <<<<<<<<<<<<<<
  *     finally:
  *         tree.xmlFree(c_result)
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_result); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 490; __pyx_clineno = __LINE__; goto __pyx_L5;}
+    __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_result); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 491; __pyx_clineno = __LINE__; goto __pyx_L5;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_result = __pyx_t_2;
     __pyx_t_2 = 0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":492
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":493
  *         result = funicode(c_result)
  *     finally:
  *         tree.xmlFree(c_result)             # <<<<<<<<<<<<<<
@@ -17209,7 +17224,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v
     }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":493
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":494
  *     finally:
  *         tree.xmlFree(c_result)
  *     return result             # <<<<<<<<<<<<<<
@@ -17234,7 +17249,7 @@ static PyObject *__pyx_f_4lxml_5etree__attributeValueFromNsName(xmlNode *__pyx_v
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":495
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":496
  *     return result
  * 
  * cdef object _getNodeAttributeValue(xmlNode* c_node, key, default):             # <<<<<<<<<<<<<<
@@ -17262,14 +17277,14 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_getNodeAttributeValue", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":496
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":497
  * 
  * cdef object _getNodeAttributeValue(xmlNode* c_node, key, default):
  *     ns, tag = _getNsTag(key)             # <<<<<<<<<<<<<<
  *     c_href = <const_xmlChar*>NULL if ns is None else _xcstr(ns)
  *     c_result = tree.xmlGetNsProp(c_node, _xcstr(tag), c_href)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_key)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_key)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   if (likely(PyTuple_CheckExact(__pyx_t_1))) {
     PyObject* sequence = __pyx_t_1;
@@ -17281,7 +17296,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
@@ -17289,18 +17304,18 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_
     __Pyx_INCREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_t_3);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else if (1) {
-    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   } else
   {
     Py_ssize_t index = -1;
-    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
@@ -17308,7 +17323,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_
     __Pyx_GOTREF(__pyx_t_2);
     index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_3);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_5 = NULL;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L4_unpacking_done;
@@ -17316,7 +17331,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 496; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 497; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_ns = __pyx_t_2;
@@ -17324,7 +17339,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_
   __pyx_v_tag = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":497
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":498
  * cdef object _getNodeAttributeValue(xmlNode* c_node, key, default):
  *     ns, tag = _getNsTag(key)
  *     c_href = <const_xmlChar*>NULL if ns is None else _xcstr(ns)             # <<<<<<<<<<<<<<
@@ -17339,7 +17354,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_
   }
   __pyx_v_c_href = __pyx_t_6;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":498
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":499
  *     ns, tag = _getNsTag(key)
  *     c_href = <const_xmlChar*>NULL if ns is None else _xcstr(ns)
  *     c_result = tree.xmlGetNsProp(c_node, _xcstr(tag), c_href)             # <<<<<<<<<<<<<<
@@ -17348,7 +17363,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_
  */
   __pyx_v_c_result = xmlGetNsProp(__pyx_v_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_tag), __pyx_v_c_href);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":499
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":500
  *     c_href = <const_xmlChar*>NULL if ns is None else _xcstr(ns)
  *     c_result = tree.xmlGetNsProp(c_node, _xcstr(tag), c_href)
  *     if c_result is NULL:             # <<<<<<<<<<<<<<
@@ -17358,7 +17373,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_
   __pyx_t_7 = ((__pyx_v_c_result == NULL) != 0);
   if (__pyx_t_7) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":501
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":502
  *     if c_result is NULL:
  *         # XXX free namespace that is not in use..?
  *         return default             # <<<<<<<<<<<<<<
@@ -17373,7 +17388,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":502
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":503
  *         # XXX free namespace that is not in use..?
  *         return default
  *     try:             # <<<<<<<<<<<<<<
@@ -17382,20 +17397,20 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_
  */
   /*try:*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":503
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":504
  *         return default
  *     try:
  *         result = funicode(c_result)             # <<<<<<<<<<<<<<
  *     finally:
  *         tree.xmlFree(c_result)
  */
-    __pyx_t_1 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_result); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 503; __pyx_clineno = __LINE__; goto __pyx_L7;}
+    __pyx_t_1 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_result); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 504; __pyx_clineno = __LINE__; goto __pyx_L7;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_v_result = __pyx_t_1;
     __pyx_t_1 = 0;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":505
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":506
  *         result = funicode(c_result)
  *     finally:
  *         tree.xmlFree(c_result)             # <<<<<<<<<<<<<<
@@ -17432,7 +17447,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_
     }
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":506
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":507
  *     finally:
  *         tree.xmlFree(c_result)
  *     return result             # <<<<<<<<<<<<<<
@@ -17462,7 +17477,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNodeAttributeValue(xmlNode *__pyx_v_c_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":508
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":509
  *     return result
  * 
  * cdef inline object _getAttributeValue(_Element element, key, default):             # <<<<<<<<<<<<<<
@@ -17479,7 +17494,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree__getAttributeValue(struct Lx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_getAttributeValue", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":509
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":510
  * 
  * cdef inline object _getAttributeValue(_Element element, key, default):
  *     return _getNodeAttributeValue(element._c_node, key, default)             # <<<<<<<<<<<<<<
@@ -17487,7 +17502,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree__getAttributeValue(struct Lx
  * cdef int _setAttributeValue(_Element element, key, value) except -1:
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__getNodeAttributeValue(__pyx_v_element->_c_node, __pyx_v_key, __pyx_v_default); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 509; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_4lxml_5etree__getNodeAttributeValue(__pyx_v_element->_c_node, __pyx_v_key, __pyx_v_default); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 510; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -17505,7 +17520,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree__getAttributeValue(struct Lx
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":511
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":512
  *     return _getNodeAttributeValue(element._c_node, key, default)
  * 
  * cdef int _setAttributeValue(_Element element, key, value) except -1:             # <<<<<<<<<<<<<<
@@ -17536,14 +17551,14 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
   __Pyx_RefNannySetupContext("_setAttributeValue", 0);
   __Pyx_INCREF(__pyx_v_value);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":513
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":514
  * cdef int _setAttributeValue(_Element element, key, value) except -1:
  *     cdef xmlNs* c_ns
  *     ns, tag = _getNsTag(key)             # <<<<<<<<<<<<<<
  *     if not element._doc._parser._for_html:
  *         _attributeValidOrRaise(tag)
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_key)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_key)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   if (likely(PyTuple_CheckExact(__pyx_t_1))) {
     PyObject* sequence = __pyx_t_1;
@@ -17555,7 +17570,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
@@ -17563,18 +17578,18 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
     __Pyx_INCREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_t_3);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else if (1) {
-    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   } else
   {
     Py_ssize_t index = -1;
-    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
@@ -17582,7 +17597,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
     __Pyx_GOTREF(__pyx_t_2);
     index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_3);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_5 = NULL;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L4_unpacking_done;
@@ -17590,7 +17605,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 513; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 514; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_ns = __pyx_t_2;
@@ -17598,7 +17613,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
   __pyx_v_tag = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":514
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":515
  *     cdef xmlNs* c_ns
  *     ns, tag = _getNsTag(key)
  *     if not element._doc._parser._for_html:             # <<<<<<<<<<<<<<
@@ -17608,19 +17623,19 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
   __pyx_t_6 = ((!(__pyx_v_element->_doc->_parser->_for_html != 0)) != 0);
   if (__pyx_t_6) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":515
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":516
  *     ns, tag = _getNsTag(key)
  *     if not element._doc._parser._for_html:
  *         _attributeValidOrRaise(tag)             # <<<<<<<<<<<<<<
  *     c_tag = _xcstr(tag)
  *     if isinstance(value, QName):
  */
-    __pyx_t_7 = __pyx_f_4lxml_5etree__attributeValidOrRaise(__pyx_v_tag); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 515; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __pyx_f_4lxml_5etree__attributeValidOrRaise(__pyx_v_tag); if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 516; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L5;
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":516
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":517
  *     if not element._doc._parser._for_html:
  *         _attributeValidOrRaise(tag)
  *     c_tag = _xcstr(tag)             # <<<<<<<<<<<<<<
@@ -17629,7 +17644,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
  */
   __pyx_v_c_tag = (const xmlChar*)PyBytes_AS_STRING(__pyx_v_tag);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":517
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":518
  *         _attributeValidOrRaise(tag)
  *     c_tag = _xcstr(tag)
  *     if isinstance(value, QName):             # <<<<<<<<<<<<<<
@@ -17640,14 +17655,14 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
   __pyx_t_8 = (__pyx_t_6 != 0);
   if (__pyx_t_8) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":518
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":519
  *     c_tag = _xcstr(tag)
  *     if isinstance(value, QName):
  *         value = _resolveQNameText(element, value)             # <<<<<<<<<<<<<<
  *     else:
  *         value = _utf8(value)
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__resolveQNameText(__pyx_v_element, __pyx_v_value)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 518; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__resolveQNameText(__pyx_v_element, __pyx_v_value)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 519; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_1);
     __pyx_t_1 = 0;
@@ -17655,21 +17670,21 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":520
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":521
  *         value = _resolveQNameText(element, value)
  *     else:
  *         value = _utf8(value)             # <<<<<<<<<<<<<<
  *     c_value = _xcstr(value)
  *     if ns is None:
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 520; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 521; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_1);
     __pyx_t_1 = 0;
   }
   __pyx_L6:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":521
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":522
  *     else:
  *         value = _utf8(value)
  *     c_value = _xcstr(value)             # <<<<<<<<<<<<<<
@@ -17678,7 +17693,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
  */
   __pyx_v_c_value = (const xmlChar*)PyBytes_AS_STRING(__pyx_v_value);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":522
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":523
  *         value = _utf8(value)
  *     c_value = _xcstr(value)
  *     if ns is None:             # <<<<<<<<<<<<<<
@@ -17689,7 +17704,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
   __pyx_t_6 = (__pyx_t_8 != 0);
   if (__pyx_t_6) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":523
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":524
  *     c_value = _xcstr(value)
  *     if ns is None:
  *         c_ns = NULL             # <<<<<<<<<<<<<<
@@ -17701,19 +17716,19 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":525
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":526
  *         c_ns = NULL
  *     else:
  *         c_ns = element._doc._findOrBuildNodeNs(element._c_node, _xcstr(ns), NULL, 1)             # <<<<<<<<<<<<<<
  *     tree.xmlSetNsProp(element._c_node, c_ns, c_tag, c_value)
  *     return 0
  */
-    __pyx_t_9 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_element->_doc, __pyx_v_element->_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_ns), NULL, 1); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_element->_doc, __pyx_v_element->_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_ns), NULL, 1); if (unlikely(__pyx_t_9 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 526; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_c_ns = __pyx_t_9;
   }
   __pyx_L7:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":526
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":527
  *     else:
  *         c_ns = element._doc._findOrBuildNodeNs(element._c_node, _xcstr(ns), NULL, 1)
  *     tree.xmlSetNsProp(element._c_node, c_ns, c_tag, c_value)             # <<<<<<<<<<<<<<
@@ -17722,7 +17737,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
  */
   xmlSetNsProp(__pyx_v_element->_c_node, __pyx_v_c_ns, __pyx_v_c_tag, __pyx_v_c_value);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":527
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":528
  *         c_ns = element._doc._findOrBuildNodeNs(element._c_node, _xcstr(ns), NULL, 1)
  *     tree.xmlSetNsProp(element._c_node, c_ns, c_tag, c_value)
  *     return 0             # <<<<<<<<<<<<<<
@@ -17749,7 +17764,7 @@ static int __pyx_f_4lxml_5etree__setAttributeValue(struct LxmlElement *__pyx_v_e
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":529
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":530
  *     return 0
  * 
  * cdef int _delAttribute(_Element element, key) except -1:             # <<<<<<<<<<<<<<
@@ -17775,14 +17790,14 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_delAttribute", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":530
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":531
  * 
  * cdef int _delAttribute(_Element element, key) except -1:
  *     ns, tag = _getNsTag(key)             # <<<<<<<<<<<<<<
  *     c_href = <const_xmlChar*>NULL if ns is None else _xcstr(ns)
  *     if _delAttributeFromNsName(element._c_node, c_href, _xcstr(tag)):
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_key)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_key)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   if (likely(PyTuple_CheckExact(__pyx_t_1))) {
     PyObject* sequence = __pyx_t_1;
@@ -17794,7 +17809,7 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
@@ -17802,18 +17817,18 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen
     __Pyx_INCREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_t_3);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else if (1) {
-    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   } else
   {
     Py_ssize_t index = -1;
-    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
@@ -17821,7 +17836,7 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen
     __Pyx_GOTREF(__pyx_t_2);
     index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_3);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_5 = NULL;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L4_unpacking_done;
@@ -17829,7 +17844,7 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_ns = __pyx_t_2;
@@ -17837,7 +17852,7 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen
   __pyx_v_tag = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":531
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":532
  * cdef int _delAttribute(_Element element, key) except -1:
  *     ns, tag = _getNsTag(key)
  *     c_href = <const_xmlChar*>NULL if ns is None else _xcstr(ns)             # <<<<<<<<<<<<<<
@@ -17852,7 +17867,7 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen
   }
   __pyx_v_c_href = __pyx_t_6;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":532
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":533
  *     ns, tag = _getNsTag(key)
  *     c_href = <const_xmlChar*>NULL if ns is None else _xcstr(ns)
  *     if _delAttributeFromNsName(element._c_node, c_href, _xcstr(tag)):             # <<<<<<<<<<<<<<
@@ -17862,7 +17877,7 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen
   __pyx_t_7 = (__pyx_f_4lxml_5etree__delAttributeFromNsName(__pyx_v_element->_c_node, __pyx_v_c_href, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_tag)) != 0);
   if (__pyx_t_7) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":533
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":534
  *     c_href = <const_xmlChar*>NULL if ns is None else _xcstr(ns)
  *     if _delAttributeFromNsName(element._c_node, c_href, _xcstr(tag)):
  *         raise KeyError, key             # <<<<<<<<<<<<<<
@@ -17870,12 +17885,12 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen
  * 
  */
     __Pyx_Raise(__pyx_builtin_KeyError, __pyx_v_key, 0, 0);
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 533; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L5;
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":534
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":535
  *     if _delAttributeFromNsName(element._c_node, c_href, _xcstr(tag)):
  *         raise KeyError, key
  *     return 0             # <<<<<<<<<<<<<<
@@ -17901,7 +17916,7 @@ static int __pyx_f_4lxml_5etree__delAttribute(struct LxmlElement *__pyx_v_elemen
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":536
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":537
  *     return 0
  * 
  * cdef int _delAttributeFromNsName(xmlNode* c_node, const_xmlChar* c_href, const_xmlChar* c_name):             # <<<<<<<<<<<<<<
@@ -17916,7 +17931,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node,
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("_delAttributeFromNsName", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":537
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":538
  * 
  * cdef int _delAttributeFromNsName(xmlNode* c_node, const_xmlChar* c_href, const_xmlChar* c_name):
  *     c_attr = tree.xmlHasNsProp(c_node, c_name, c_href)             # <<<<<<<<<<<<<<
@@ -17925,7 +17940,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node,
  */
   __pyx_v_c_attr = xmlHasNsProp(__pyx_v_c_node, __pyx_v_c_name, __pyx_v_c_href);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":538
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":539
  * cdef int _delAttributeFromNsName(xmlNode* c_node, const_xmlChar* c_href, const_xmlChar* c_name):
  *     c_attr = tree.xmlHasNsProp(c_node, c_name, c_href)
  *     if c_attr is NULL:             # <<<<<<<<<<<<<<
@@ -17935,7 +17950,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node,
   __pyx_t_1 = ((__pyx_v_c_attr == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":540
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":541
  *     if c_attr is NULL:
  *         # XXX free namespace that is not in use..?
  *         return -1             # <<<<<<<<<<<<<<
@@ -17948,7 +17963,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node,
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":541
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":542
  *         # XXX free namespace that is not in use..?
  *         return -1
  *     tree.xmlRemoveProp(c_attr)             # <<<<<<<<<<<<<<
@@ -17957,7 +17972,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node,
  */
   xmlRemoveProp(__pyx_v_c_attr);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":542
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":543
  *         return -1
  *     tree.xmlRemoveProp(c_attr)
  *     return 0             # <<<<<<<<<<<<<<
@@ -17973,7 +17988,7 @@ static int __pyx_f_4lxml_5etree__delAttributeFromNsName(xmlNode *__pyx_v_c_node,
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":544
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":545
  *     return 0
  * 
  * cdef list _collectAttributes(xmlNode* c_node, int collecttype):             # <<<<<<<<<<<<<<
@@ -17998,7 +18013,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_collectAttributes", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":549
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":550
  *     """
  *     cdef Py_ssize_t count
  *     c_attr = c_node.properties             # <<<<<<<<<<<<<<
@@ -18008,7 +18023,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
   __pyx_t_1 = __pyx_v_c_node->properties;
   __pyx_v_c_attr = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":550
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":551
  *     cdef Py_ssize_t count
  *     c_attr = c_node.properties
  *     count = 0             # <<<<<<<<<<<<<<
@@ -18017,7 +18032,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
  */
   __pyx_v_count = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":551
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":552
  *     c_attr = c_node.properties
  *     count = 0
  *     while c_attr is not NULL:             # <<<<<<<<<<<<<<
@@ -18028,7 +18043,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
     __pyx_t_2 = ((__pyx_v_c_attr != NULL) != 0);
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":552
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":553
  *     count = 0
  *     while c_attr is not NULL:
  *         if c_attr.type == tree.XML_ATTRIBUTE_NODE:             # <<<<<<<<<<<<<<
@@ -18038,7 +18053,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
     __pyx_t_2 = ((__pyx_v_c_attr->type == XML_ATTRIBUTE_NODE) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":553
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":554
  *     while c_attr is not NULL:
  *         if c_attr.type == tree.XML_ATTRIBUTE_NODE:
  *             count += 1             # <<<<<<<<<<<<<<
@@ -18050,7 +18065,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":554
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":555
  *         if c_attr.type == tree.XML_ATTRIBUTE_NODE:
  *             count += 1
  *         c_attr = c_attr.next             # <<<<<<<<<<<<<<
@@ -18061,7 +18076,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
     __pyx_v_c_attr = __pyx_t_1;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":556
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":557
  *         c_attr = c_attr.next
  * 
  *     if not count:             # <<<<<<<<<<<<<<
@@ -18071,7 +18086,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
   __pyx_t_2 = ((!(__pyx_v_count != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":557
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":558
  * 
  *     if not count:
  *         return []             # <<<<<<<<<<<<<<
@@ -18079,7 +18094,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
  *     attributes = [None] * count
  */
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 557; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
@@ -18088,14 +18103,14 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
   }
   __pyx_L6:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":559
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":560
  *         return []
  * 
  *     attributes = [None] * count             # <<<<<<<<<<<<<<
  *     c_attr = c_node.properties
  *     count = 0
  */
-  __pyx_t_3 = PyList_New(1 * ((__pyx_v_count<0) ? 0:__pyx_v_count)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyList_New(1 * ((__pyx_v_count<0) ? 0:__pyx_v_count)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   { Py_ssize_t __pyx_temp;
     for (__pyx_temp=0; __pyx_temp < __pyx_v_count; __pyx_temp++) {
@@ -18107,7 +18122,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
   __pyx_v_attributes = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":560
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":561
  * 
  *     attributes = [None] * count
  *     c_attr = c_node.properties             # <<<<<<<<<<<<<<
@@ -18117,7 +18132,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
   __pyx_t_1 = __pyx_v_c_node->properties;
   __pyx_v_c_attr = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":561
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":562
  *     attributes = [None] * count
  *     c_attr = c_node.properties
  *     count = 0             # <<<<<<<<<<<<<<
@@ -18126,7 +18141,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
  */
   __pyx_v_count = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":562
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":563
  *     c_attr = c_node.properties
  *     count = 0
  *     while c_attr is not NULL:             # <<<<<<<<<<<<<<
@@ -18137,7 +18152,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
     __pyx_t_2 = ((__pyx_v_c_attr != NULL) != 0);
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":563
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":564
  *     count = 0
  *     while c_attr is not NULL:
  *         if c_attr.type == tree.XML_ATTRIBUTE_NODE:             # <<<<<<<<<<<<<<
@@ -18147,7 +18162,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
     __pyx_t_2 = ((__pyx_v_c_attr->type == XML_ATTRIBUTE_NODE) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":566
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":567
  *             if collecttype == 1:
  *                 item = _namespacedName(<xmlNode*>c_attr)
  *             elif collecttype == 2:             # <<<<<<<<<<<<<<
@@ -18156,7 +18171,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
  */
       switch (__pyx_v_collecttype) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":564
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":565
  *     while c_attr is not NULL:
  *         if c_attr.type == tree.XML_ATTRIBUTE_NODE:
  *             if collecttype == 1:             # <<<<<<<<<<<<<<
@@ -18165,20 +18180,20 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
  */
         case 1:
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":565
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":566
  *         if c_attr.type == tree.XML_ATTRIBUTE_NODE:
  *             if collecttype == 1:
  *                 item = _namespacedName(<xmlNode*>c_attr)             # <<<<<<<<<<<<<<
  *             elif collecttype == 2:
  *                 item = _attributeValue(c_node, c_attr)
  */
-        __pyx_t_3 = __pyx_f_4lxml_5etree__namespacedName(((xmlNode *)__pyx_v_c_attr)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __pyx_f_4lxml_5etree__namespacedName(((xmlNode *)__pyx_v_c_attr)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 566; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_3);
         __pyx_t_3 = 0;
         break;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":566
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":567
  *             if collecttype == 1:
  *                 item = _namespacedName(<xmlNode*>c_attr)
  *             elif collecttype == 2:             # <<<<<<<<<<<<<<
@@ -18187,40 +18202,40 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
  */
         case 2:
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":567
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":568
  *                 item = _namespacedName(<xmlNode*>c_attr)
  *             elif collecttype == 2:
  *                 item = _attributeValue(c_node, c_attr)             # <<<<<<<<<<<<<<
  *             else:
  *                 item = (_namespacedName(<xmlNode*>c_attr),
  */
-        __pyx_t_3 = __pyx_f_4lxml_5etree__attributeValue(__pyx_v_c_node, __pyx_v_c_attr); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 567; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __pyx_f_4lxml_5etree__attributeValue(__pyx_v_c_node, __pyx_v_c_attr); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 568; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_3);
         __pyx_t_3 = 0;
         break;
         default:
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":569
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":570
  *                 item = _attributeValue(c_node, c_attr)
  *             else:
  *                 item = (_namespacedName(<xmlNode*>c_attr),             # <<<<<<<<<<<<<<
  *                         _attributeValue(c_node, c_attr))
  *             attributes[count] = item
  */
-        __pyx_t_3 = __pyx_f_4lxml_5etree__namespacedName(((xmlNode *)__pyx_v_c_attr)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_3 = __pyx_f_4lxml_5etree__namespacedName(((xmlNode *)__pyx_v_c_attr)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_3);
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":570
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":571
  *             else:
  *                 item = (_namespacedName(<xmlNode*>c_attr),
  *                         _attributeValue(c_node, c_attr))             # <<<<<<<<<<<<<<
  *             attributes[count] = item
  *             count += 1
  */
-        __pyx_t_4 = __pyx_f_4lxml_5etree__attributeValue(__pyx_v_c_node, __pyx_v_c_attr); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_4 = __pyx_f_4lxml_5etree__attributeValue(__pyx_v_c_node, __pyx_v_c_attr); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 569; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 570; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_5);
         PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
         __Pyx_GIVEREF(__pyx_t_3);
@@ -18233,16 +18248,16 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
         break;
       }
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":571
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":572
  *                 item = (_namespacedName(<xmlNode*>c_attr),
  *                         _attributeValue(c_node, c_attr))
  *             attributes[count] = item             # <<<<<<<<<<<<<<
  *             count += 1
  *         c_attr = c_attr.next
  */
-      if (__Pyx_SetItemInt(((PyObject *)__pyx_v_attributes), __pyx_v_count, __pyx_v_item, sizeof(Py_ssize_t), PyInt_FromSsize_t, 1, 1, 1) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 571; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_SetItemInt(((PyObject *)__pyx_v_attributes), __pyx_v_count, __pyx_v_item, sizeof(Py_ssize_t), PyInt_FromSsize_t, 1, 1, 1) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 572; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":572
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":573
  *                         _attributeValue(c_node, c_attr))
  *             attributes[count] = item
  *             count += 1             # <<<<<<<<<<<<<<
@@ -18254,7 +18269,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
     }
     __pyx_L9:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":573
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":574
  *             attributes[count] = item
  *             count += 1
  *         c_attr = c_attr.next             # <<<<<<<<<<<<<<
@@ -18265,7 +18280,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
     __pyx_v_c_attr = __pyx_t_1;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":574
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":575
  *             count += 1
  *         c_attr = c_attr.next
  *     return attributes             # <<<<<<<<<<<<<<
@@ -18293,7 +18308,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectAttributes(xmlNode *__pyx_v_c_node
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":582
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":583
  * cdef object __HAS_XML_ENCODING = __RE_XML_ENCODING.match
  * 
  * cdef object _stripEncodingDeclaration(object xml_string):             # <<<<<<<<<<<<<<
@@ -18311,7 +18326,7 @@ static PyObject *__pyx_f_4lxml_5etree__stripEncodingDeclaration(PyObject *__pyx_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_stripEncodingDeclaration", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":584
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":585
  * cdef object _stripEncodingDeclaration(object xml_string):
  *     # this is a hack to remove the XML encoding declaration from unicode
  *     return __REPLACE_XML_ENCODING(ur'\g<1>\g<2>', xml_string)             # <<<<<<<<<<<<<<
@@ -18319,7 +18334,7 @@ static PyObject *__pyx_f_4lxml_5etree__stripEncodingDeclaration(PyObject *__pyx_
  * cdef bint _hasEncodingDeclaration(object xml_string):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_kp_u_24));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_kp_u_24));
@@ -18327,7 +18342,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, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 584; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_Call(__pyx_v_4lxml_5etree___REPLACE_XML_ENCODING, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 585; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __pyx_r = __pyx_t_2;
@@ -18347,7 +18362,7 @@ static PyObject *__pyx_f_4lxml_5etree__stripEncodingDeclaration(PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":586
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":587
  *     return __REPLACE_XML_ENCODING(ur'\g<1>\g<2>', xml_string)
  * 
  * cdef bint _hasEncodingDeclaration(object xml_string):             # <<<<<<<<<<<<<<
@@ -18366,19 +18381,19 @@ static int __pyx_f_4lxml_5etree__hasEncodingDeclaration(PyObject *__pyx_v_xml_st
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_hasEncodingDeclaration", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":588
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":589
  * cdef bint _hasEncodingDeclaration(object xml_string):
  *     # check if a (unicode) string has an XML encoding declaration
  *     return __HAS_XML_ENCODING(xml_string) is not None             # <<<<<<<<<<<<<<
  * 
  * cdef inline bint _hasText(xmlNode* c_node):
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __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, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 588; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = PyObject_Call(__pyx_v_4lxml_5etree___HAS_XML_ENCODING, ((PyObject *)__pyx_t_1), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 589; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(((PyObject *)__pyx_t_1)); __pyx_t_1 = 0;
   __pyx_t_3 = (__pyx_t_2 != Py_None);
@@ -18398,7 +18413,7 @@ static int __pyx_f_4lxml_5etree__hasEncodingDeclaration(PyObject *__pyx_v_xml_st
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":590
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":591
  *     return __HAS_XML_ENCODING(xml_string) is not None
  * 
  * cdef inline bint _hasText(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -18414,7 +18429,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasText(xmlNode *__pyx_v_c_node)
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("_hasText", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":591
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":592
  * 
  * cdef inline bint _hasText(xmlNode* c_node):
  *     return c_node is not NULL and _textNodeOrSkip(c_node.children) is not NULL             # <<<<<<<<<<<<<<
@@ -18437,7 +18452,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasText(xmlNode *__pyx_v_c_node)
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":593
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":594
  *     return c_node is not NULL and _textNodeOrSkip(c_node.children) is not NULL
  * 
  * cdef inline bint _hasTail(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -18453,7 +18468,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasTail(xmlNode *__pyx_v_c_node)
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("_hasTail", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":594
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":595
  * 
  * cdef inline bint _hasTail(xmlNode* c_node):
  *     return c_node is not NULL and _textNodeOrSkip(c_node.next) is not NULL             # <<<<<<<<<<<<<<
@@ -18476,7 +18491,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasTail(xmlNode *__pyx_v_c_node)
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":596
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":597
  *     return c_node is not NULL and _textNodeOrSkip(c_node.next) is not NULL
  * 
  * cdef _collectText(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -18502,7 +18517,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_collectText", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":607
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":608
  *     cdef xmlNode* c_node_cur
  *     # check for multiple text nodes
  *     scount = 0             # <<<<<<<<<<<<<<
@@ -18511,7 +18526,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
  */
   __pyx_v_scount = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":608
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":609
  *     # check for multiple text nodes
  *     scount = 0
  *     c_text = NULL             # <<<<<<<<<<<<<<
@@ -18520,7 +18535,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
  */
   __pyx_v_c_text = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":609
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":610
  *     scount = 0
  *     c_text = NULL
  *     c_node_cur = c_node = _textNodeOrSkip(c_node)             # <<<<<<<<<<<<<<
@@ -18531,7 +18546,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
   __pyx_v_c_node_cur = __pyx_t_1;
   __pyx_v_c_node = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":610
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":611
  *     c_text = NULL
  *     c_node_cur = c_node = _textNodeOrSkip(c_node)
  *     while c_node_cur is not NULL:             # <<<<<<<<<<<<<<
@@ -18542,7 +18557,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
     __pyx_t_2 = ((__pyx_v_c_node_cur != NULL) != 0);
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":611
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":612
  *     c_node_cur = c_node = _textNodeOrSkip(c_node)
  *     while c_node_cur is not NULL:
  *         if c_node_cur.content[0] != c'\0':             # <<<<<<<<<<<<<<
@@ -18552,7 +18567,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
     __pyx_t_2 = (((__pyx_v_c_node_cur->content[0]) != '\x00') != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":612
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":613
  *     while c_node_cur is not NULL:
  *         if c_node_cur.content[0] != c'\0':
  *             c_text = c_node_cur.content             # <<<<<<<<<<<<<<
@@ -18565,7 +18580,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":613
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":614
  *         if c_node_cur.content[0] != c'\0':
  *             c_text = c_node_cur.content
  *         scount += 1             # <<<<<<<<<<<<<<
@@ -18574,7 +18589,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
  */
     __pyx_v_scount = (__pyx_v_scount + 1);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":614
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":615
  *             c_text = c_node_cur.content
  *         scount += 1
  *         c_node_cur = _textNodeOrSkip(c_node_cur.next)             # <<<<<<<<<<<<<<
@@ -18584,7 +18599,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
     __pyx_v_c_node_cur = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_node_cur->next);
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":617
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":618
  * 
  *     # handle two most common cases first
  *     if c_text is NULL:             # <<<<<<<<<<<<<<
@@ -18594,7 +18609,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
   __pyx_t_2 = ((__pyx_v_c_text == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":618
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":619
  *     # handle two most common cases first
  *     if c_text is NULL:
  *         return '' if scount > 0 else None             # <<<<<<<<<<<<<<
@@ -18616,7 +18631,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
   }
   __pyx_L6:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":619
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":620
  *     if c_text is NULL:
  *         return '' if scount > 0 else None
  *     if scount == 1:             # <<<<<<<<<<<<<<
@@ -18626,7 +18641,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
   __pyx_t_2 = ((__pyx_v_scount == 1) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":620
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":621
  *         return '' if scount > 0 else None
  *     if scount == 1:
  *         return funicode(c_text)             # <<<<<<<<<<<<<<
@@ -18634,7 +18649,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
  *     # the rest is not performance critical anymore
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_4 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_text); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 620; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_4lxml_5etree_funicode(__pyx_v_c_text); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 621; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_r = __pyx_t_4;
     __pyx_t_4 = 0;
@@ -18643,7 +18658,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
   }
   __pyx_L7:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":623
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":624
  * 
  *     # the rest is not performance critical anymore
  *     result = b''             # <<<<<<<<<<<<<<
@@ -18653,7 +18668,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
   __Pyx_INCREF(((PyObject *)__pyx_kp_b_25));
   __pyx_v_result = __pyx_kp_b_25;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":624
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":625
  *     # the rest is not performance critical anymore
  *     result = b''
  *     while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -18664,22 +18679,22 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
     __pyx_t_2 = ((__pyx_v_c_node != NULL) != 0);
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":625
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":626
  *     result = b''
  *     while c_node is not NULL:
  *         result += <unsigned char*>c_node.content             # <<<<<<<<<<<<<<
  *         c_node = _textNodeOrSkip(c_node.next)
  *     return funicode(<const_xmlChar*><unsigned char*>result)
  */
-    __pyx_t_4 = __Pyx_PyBytes_FromUString(((unsigned char *)__pyx_v_c_node->content)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyBytes_FromUString(((unsigned char *)__pyx_v_c_node->content)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-    __pyx_t_5 = PyNumber_InPlaceAdd(((PyObject *)__pyx_v_result), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 625; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyNumber_InPlaceAdd(((PyObject *)__pyx_v_result), ((PyObject *)__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 626; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_5));
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_result, ((PyObject*)__pyx_t_5));
     __pyx_t_5 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":626
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":627
  *     while c_node is not NULL:
  *         result += <unsigned char*>c_node.content
  *         c_node = _textNodeOrSkip(c_node.next)             # <<<<<<<<<<<<<<
@@ -18689,7 +18704,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
     __pyx_v_c_node = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_node->next);
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":627
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":628
  *         result += <unsigned char*>c_node.content
  *         c_node = _textNodeOrSkip(c_node.next)
  *     return funicode(<const_xmlChar*><unsigned char*>result)             # <<<<<<<<<<<<<<
@@ -18697,8 +18712,8 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
  * cdef void _removeText(xmlNode* c_node):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_6 = __Pyx_PyObject_AsUString(((PyObject *)__pyx_v_result)); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = __pyx_f_4lxml_5etree_funicode(((const xmlChar *)((unsigned char *)__pyx_t_6))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 627; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_AsUString(((PyObject *)__pyx_v_result)); if (unlikely((!__pyx_t_6) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree_funicode(((const xmlChar *)((unsigned char *)__pyx_t_6))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 628; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
@@ -18718,7 +18733,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectText(xmlNode *__pyx_v_c_node) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":629
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":630
  *     return funicode(<const_xmlChar*><unsigned char*>result)
  * 
  * cdef void _removeText(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -18732,7 +18747,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) {
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("_removeText", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":635
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":636
  *     """
  *     cdef xmlNode* c_next
  *     c_node = _textNodeOrSkip(c_node)             # <<<<<<<<<<<<<<
@@ -18741,7 +18756,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) {
  */
   __pyx_v_c_node = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":636
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":637
  *     cdef xmlNode* c_next
  *     c_node = _textNodeOrSkip(c_node)
  *     while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -18752,7 +18767,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) {
     __pyx_t_1 = ((__pyx_v_c_node != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":637
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":638
  *     c_node = _textNodeOrSkip(c_node)
  *     while c_node is not NULL:
  *         c_next = _textNodeOrSkip(c_node.next)             # <<<<<<<<<<<<<<
@@ -18761,7 +18776,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) {
  */
     __pyx_v_c_next = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_node->next);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":638
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":639
  *     while c_node is not NULL:
  *         c_next = _textNodeOrSkip(c_node.next)
  *         tree.xmlUnlinkNode(c_node)             # <<<<<<<<<<<<<<
@@ -18770,7 +18785,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) {
  */
     xmlUnlinkNode(__pyx_v_c_node);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":639
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":640
  *         c_next = _textNodeOrSkip(c_node.next)
  *         tree.xmlUnlinkNode(c_node)
  *         tree.xmlFreeNode(c_node)             # <<<<<<<<<<<<<<
@@ -18779,7 +18794,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) {
  */
     xmlFreeNode(__pyx_v_c_node);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":640
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":641
  *         tree.xmlUnlinkNode(c_node)
  *         tree.xmlFreeNode(c_node)
  *         c_node = c_next             # <<<<<<<<<<<<<<
@@ -18792,7 +18807,7 @@ static void __pyx_f_4lxml_5etree__removeText(xmlNode *__pyx_v_c_node) {
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":642
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":643
  *         c_node = c_next
  * 
  * cdef int _setNodeText(xmlNode* c_node, value) except -1:             # <<<<<<<<<<<<<<
@@ -18814,7 +18829,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_setNodeText", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":645
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":646
  *     cdef xmlNode* c_text_node
  *     # remove all text nodes at the start first
  *     _removeText(c_node.children)             # <<<<<<<<<<<<<<
@@ -18823,7 +18838,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
  */
   __pyx_f_4lxml_5etree__removeText(__pyx_v_c_node->children);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":646
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":647
  *     # remove all text nodes at the start first
  *     _removeText(c_node.children)
  *     if value is None:             # <<<<<<<<<<<<<<
@@ -18834,7 +18849,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":647
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":648
  *     _removeText(c_node.children)
  *     if value is None:
  *         return 0             # <<<<<<<<<<<<<<
@@ -18847,7 +18862,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":649
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":650
  *         return 0
  *     # now add new text node with value at start
  *     if python._isString(value):             # <<<<<<<<<<<<<<
@@ -18857,19 +18872,19 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
   __pyx_t_2 = (_isString(__pyx_v_value) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":650
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":651
  *     # now add new text node with value at start
  *     if python._isString(value):
  *         text = _utf8(value)             # <<<<<<<<<<<<<<
  *         c_text_node = tree.xmlNewDocText(c_node.doc, _xcstr(text))
  *     elif isinstance(value, CDATA):
  */
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 650; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 651; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_text = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":651
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":652
  *     if python._isString(value):
  *         text = _utf8(value)
  *         c_text_node = tree.xmlNewDocText(c_node.doc, _xcstr(text))             # <<<<<<<<<<<<<<
@@ -18880,7 +18895,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
     goto __pyx_L4;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":652
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":653
  *         text = _utf8(value)
  *         c_text_node = tree.xmlNewDocText(c_node.doc, _xcstr(text))
  *     elif isinstance(value, CDATA):             # <<<<<<<<<<<<<<
@@ -18891,7 +18906,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":654
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":655
  *     elif isinstance(value, CDATA):
  *         c_text_node = tree.xmlNewCDataBlock(
  *             c_node.doc, _xcstr((<CDATA>value)._utf8_data),             # <<<<<<<<<<<<<<
@@ -18901,7 +18916,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
     __pyx_t_3 = ((PyObject *)((struct __pyx_obj_4lxml_5etree_CDATA *)__pyx_v_value)->_utf8_data);
     __Pyx_INCREF(__pyx_t_3);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":655
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":656
  *         c_text_node = tree.xmlNewCDataBlock(
  *             c_node.doc, _xcstr((<CDATA>value)._utf8_data),
  *             python.PyBytes_GET_SIZE((<CDATA>value)._utf8_data))             # <<<<<<<<<<<<<<
@@ -18917,18 +18932,18 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":658
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":659
  *     else:
  *         # this will raise the right error
  *        _utf8(value)             # <<<<<<<<<<<<<<
  *        return -1
  *     if c_node.children is NULL:
  */
-    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 658; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 659; __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/apihelpers.pxi":659
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":660
  *         # this will raise the right error
  *        _utf8(value)
  *        return -1             # <<<<<<<<<<<<<<
@@ -18940,7 +18955,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":660
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":661
  *        _utf8(value)
  *        return -1
  *     if c_node.children is NULL:             # <<<<<<<<<<<<<<
@@ -18950,7 +18965,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
   __pyx_t_1 = ((__pyx_v_c_node->children == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":661
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":662
  *        return -1
  *     if c_node.children is NULL:
  *         tree.xmlAddChild(c_node, c_text_node)             # <<<<<<<<<<<<<<
@@ -18962,7 +18977,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":663
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":664
  *         tree.xmlAddChild(c_node, c_text_node)
  *     else:
  *         tree.xmlAddPrevSibling(c_node.children, c_text_node)             # <<<<<<<<<<<<<<
@@ -18973,7 +18988,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":664
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":665
  *     else:
  *         tree.xmlAddPrevSibling(c_node.children, c_text_node)
  *     return 0             # <<<<<<<<<<<<<<
@@ -18996,7 +19011,7 @@ static int __pyx_f_4lxml_5etree__setNodeText(xmlNode *__pyx_v_c_node, PyObject *
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":666
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":667
  *     return 0
  * 
  * cdef int _setTailText(xmlNode* c_node, value) except -1:             # <<<<<<<<<<<<<<
@@ -19017,7 +19032,7 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject *
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_setTailText", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":669
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":670
  *     cdef xmlNode* c_text_node
  *     # remove all text nodes at the start first
  *     _removeText(c_node.next)             # <<<<<<<<<<<<<<
@@ -19026,7 +19041,7 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject *
  */
   __pyx_f_4lxml_5etree__removeText(__pyx_v_c_node->next);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":670
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":671
  *     # remove all text nodes at the start first
  *     _removeText(c_node.next)
  *     if value is None:             # <<<<<<<<<<<<<<
@@ -19037,7 +19052,7 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject *
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":671
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":672
  *     _removeText(c_node.next)
  *     if value is None:
  *         return 0             # <<<<<<<<<<<<<<
@@ -19050,19 +19065,19 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject *
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":672
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":673
  *     if value is None:
  *         return 0
  *     text = _utf8(value)             # <<<<<<<<<<<<<<
  *     c_text_node = tree.xmlNewDocText(c_node.doc, _xcstr(text))
  *     # XXX what if we're the top element?
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 672; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 673; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_text = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":673
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":674
  *         return 0
  *     text = _utf8(value)
  *     c_text_node = tree.xmlNewDocText(c_node.doc, _xcstr(text))             # <<<<<<<<<<<<<<
@@ -19071,7 +19086,7 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject *
  */
   __pyx_v_c_text_node = xmlNewDocText(__pyx_v_c_node->doc, (const xmlChar*)PyBytes_AS_STRING(((PyObject *)__pyx_v_text)));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":675
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":676
  *     c_text_node = tree.xmlNewDocText(c_node.doc, _xcstr(text))
  *     # XXX what if we're the top element?
  *     tree.xmlAddNextSibling(c_node, c_text_node)             # <<<<<<<<<<<<<<
@@ -19080,7 +19095,7 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject *
  */
   xmlAddNextSibling(__pyx_v_c_node, __pyx_v_c_text_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":676
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":677
  *     # XXX what if we're the top element?
  *     tree.xmlAddNextSibling(c_node, c_text_node)
  *     return 0             # <<<<<<<<<<<<<<
@@ -19102,7 +19117,7 @@ static int __pyx_f_4lxml_5etree__setTailText(xmlNode *__pyx_v_c_node, PyObject *
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":678
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":679
  *     return 0
  * 
  * cdef bytes _resolveQNameText(_Element element, value):             # <<<<<<<<<<<<<<
@@ -19129,14 +19144,14 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_resolveQNameText", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":680
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":681
  * cdef bytes _resolveQNameText(_Element element, value):
  *     cdef xmlNs* c_ns
  *     ns, tag = _getNsTag(value)             # <<<<<<<<<<<<<<
  *     if ns is None:
  *         return tag
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_value)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_value)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   if (likely(PyTuple_CheckExact(__pyx_t_1))) {
     PyObject* sequence = __pyx_t_1;
@@ -19148,7 +19163,7 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
@@ -19156,18 +19171,18 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py
     __Pyx_INCREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_t_3);
     #else
-    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     #endif
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   } else if (1) {
-    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   } else
   {
     Py_ssize_t index = -1;
-    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
@@ -19175,7 +19190,7 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py
     __Pyx_GOTREF(__pyx_t_2);
     index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_3);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_5 = NULL;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L4_unpacking_done;
@@ -19183,7 +19198,7 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __pyx_t_5 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_ns = __pyx_t_2;
@@ -19191,7 +19206,7 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py
   __pyx_v_tag = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":681
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":682
  *     cdef xmlNs* c_ns
  *     ns, tag = _getNsTag(value)
  *     if ns is None:             # <<<<<<<<<<<<<<
@@ -19202,7 +19217,7 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py
   __pyx_t_7 = (__pyx_t_6 != 0);
   if (__pyx_t_7) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":682
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":683
  *     ns, tag = _getNsTag(value)
  *     if ns is None:
  *         return tag             # <<<<<<<<<<<<<<
@@ -19210,7 +19225,7 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py
  *         c_ns = element._doc._findOrBuildNodeNs(
  */
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    if (!(likely(PyBytes_CheckExact(__pyx_v_tag))||((__pyx_v_tag) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_tag)->tp_name), 0))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyBytes_CheckExact(__pyx_v_tag))||((__pyx_v_tag) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_tag)->tp_name), 0))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 683; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_INCREF(__pyx_v_tag);
     __pyx_r = ((PyObject*)__pyx_v_tag);
     goto __pyx_L0;
@@ -19218,17 +19233,17 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":685
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":686
  *     else:
  *         c_ns = element._doc._findOrBuildNodeNs(
  *             element._c_node, _xcstr(ns), NULL, 0)             # <<<<<<<<<<<<<<
  *         return python.PyBytes_FromFormat('%s:%s', c_ns.prefix, _cstr(tag))
  * 
  */
-    __pyx_t_8 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_element->_doc, __pyx_v_element->_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_ns), NULL, 0); if (unlikely(__pyx_t_8 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 684; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __pyx_f_4lxml_5etree_9_Document__findOrBuildNodeNs(__pyx_v_element->_doc, __pyx_v_element->_c_node, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_ns), NULL, 0); if (unlikely(__pyx_t_8 == NULL)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 685; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_c_ns = __pyx_t_8;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":686
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":687
  *         c_ns = element._doc._findOrBuildNodeNs(
  *             element._c_node, _xcstr(ns), NULL, 0)
  *         return python.PyBytes_FromFormat('%s:%s', c_ns.prefix, _cstr(tag))             # <<<<<<<<<<<<<<
@@ -19236,7 +19251,7 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py
  * cdef inline bint _hasChild(xmlNode* c_node):
  */
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __pyx_t_1 = ((PyObject *)PyBytes_FromFormat(__pyx_k_26, __pyx_v_c_ns->prefix, PyBytes_AS_STRING(__pyx_v_tag))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 686; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = ((PyObject *)PyBytes_FromFormat(__pyx_k_26, __pyx_v_c_ns->prefix, PyBytes_AS_STRING(__pyx_v_tag))); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 687; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = ((PyObject*)__pyx_t_1);
     __pyx_t_1 = 0;
@@ -19261,7 +19276,7 @@ static PyObject *__pyx_f_4lxml_5etree__resolveQNameText(struct LxmlElement *__py
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":688
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":689
  *         return python.PyBytes_FromFormat('%s:%s', c_ns.prefix, _cstr(tag))
  * 
  * cdef inline bint _hasChild(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -19277,7 +19292,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasChild(xmlNode *__pyx_v_c_node)
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("_hasChild", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":689
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":690
  * 
  * cdef inline bint _hasChild(xmlNode* c_node):
  *     return c_node is not NULL and _findChildForwards(c_node, 0) is not NULL             # <<<<<<<<<<<<<<
@@ -19300,7 +19315,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__hasChild(xmlNode *__pyx_v_c_node)
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":691
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":692
  *     return c_node is not NULL and _findChildForwards(c_node, 0) is not NULL
  * 
  * cdef inline Py_ssize_t _countElements(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -19316,7 +19331,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p
   xmlNode *__pyx_t_2;
   __Pyx_RefNannySetupContext("_countElements", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":694
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":695
  *     u"Counts the elements within the following siblings and the node itself."
  *     cdef Py_ssize_t count
  *     count = 0             # <<<<<<<<<<<<<<
@@ -19325,7 +19340,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p
  */
   __pyx_v_count = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":695
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":696
  *     cdef Py_ssize_t count
  *     count = 0
  *     while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -19336,7 +19351,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p
     __pyx_t_1 = ((__pyx_v_c_node != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":696
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":697
  *     count = 0
  *     while c_node is not NULL:
  *         if _isElement(c_node):             # <<<<<<<<<<<<<<
@@ -19346,7 +19361,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p
     __pyx_t_1 = (_isElement(__pyx_v_c_node) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":697
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":698
  *     while c_node is not NULL:
  *         if _isElement(c_node):
  *             count += 1             # <<<<<<<<<<<<<<
@@ -19358,7 +19373,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":698
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":699
  *         if _isElement(c_node):
  *             count += 1
  *         c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -19369,7 +19384,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p
     __pyx_v_c_node = __pyx_t_2;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":699
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":700
  *             count += 1
  *         c_node = c_node.next
  *     return count             # <<<<<<<<<<<<<<
@@ -19385,7 +19400,7 @@ static CYTHON_INLINE Py_ssize_t __pyx_f_4lxml_5etree__countElements(xmlNode *__p
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":701
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":702
  *     return count
  * 
  * cdef int _findChildSlice(             # <<<<<<<<<<<<<<
@@ -19408,7 +19423,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_findChildSlice", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":709
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":710
  *     pointer arguments.
  *     """
  *     cdef Py_ssize_t start = 0, stop = 0, childcount             # <<<<<<<<<<<<<<
@@ -19418,7 +19433,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
   __pyx_v_start = 0;
   __pyx_v_stop = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":710
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":711
  *     """
  *     cdef Py_ssize_t start = 0, stop = 0, childcount
  *     childcount = _countElements(c_parent.children)             # <<<<<<<<<<<<<<
@@ -19427,7 +19442,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
  */
   __pyx_v_childcount = __pyx_f_4lxml_5etree__countElements(__pyx_v_c_parent->children);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":711
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":712
  *     cdef Py_ssize_t start = 0, stop = 0, childcount
  *     childcount = _countElements(c_parent.children)
  *     if childcount == 0:             # <<<<<<<<<<<<<<
@@ -19437,7 +19452,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
   __pyx_t_1 = ((__pyx_v_childcount == 0) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":712
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":713
  *     childcount = _countElements(c_parent.children)
  *     if childcount == 0:
  *         c_start_node[0] = NULL             # <<<<<<<<<<<<<<
@@ -19446,7 +19461,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
  */
     (__pyx_v_c_start_node[0]) = NULL;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":713
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":714
  *     if childcount == 0:
  *         c_start_node[0] = NULL
  *         c_length[0] = 0             # <<<<<<<<<<<<<<
@@ -19455,7 +19470,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
  */
     (__pyx_v_c_length[0]) = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":714
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":715
  *         c_start_node[0] = NULL
  *         c_length[0] = 0
  *         if sliceobject.step is None:             # <<<<<<<<<<<<<<
@@ -19466,7 +19481,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
     __pyx_t_2 = (__pyx_t_1 != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":715
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":716
  *         c_length[0] = 0
  *         if sliceobject.step is None:
  *             c_step[0] = 1             # <<<<<<<<<<<<<<
@@ -19478,7 +19493,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":717
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":718
  *             c_step[0] = 1
  *         else:
  *             python._PyEval_SliceIndex(sliceobject.step, c_step)             # <<<<<<<<<<<<<<
@@ -19487,12 +19502,12 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
  */
       __pyx_t_3 = ((PySliceObject*)__pyx_v_sliceobject)->step;
       __Pyx_INCREF(__pyx_t_3);
-      __pyx_t_4 = _PyEval_SliceIndex(__pyx_t_3, __pyx_v_c_step); if (unlikely(__pyx_t_4 == 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 717; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = _PyEval_SliceIndex(__pyx_t_3, __pyx_v_c_step); if (unlikely(__pyx_t_4 == 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":718
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":719
  *         else:
  *             python._PyEval_SliceIndex(sliceobject.step, c_step)
  *         return 0             # <<<<<<<<<<<<<<
@@ -19505,16 +19520,16 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":720
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":721
  *         return 0
  *     python.PySlice_GetIndicesEx(
  *         sliceobject, childcount, &start, &stop, c_step, c_length)             # <<<<<<<<<<<<<<
  *     if start > childcount / 2:
  *         c_start_node[0] = _findChildBackwards(c_parent, childcount - start - 1)
  */
-  __pyx_t_4 = _lx_PySlice_GetIndicesEx(((PyObject *)__pyx_v_sliceobject), __pyx_v_childcount, (&__pyx_v_start), (&__pyx_v_stop), __pyx_v_c_step, __pyx_v_c_length); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = _lx_PySlice_GetIndicesEx(((PyObject *)__pyx_v_sliceobject), __pyx_v_childcount, (&__pyx_v_start), (&__pyx_v_stop), __pyx_v_c_step, __pyx_v_c_length); if (unlikely(__pyx_t_4 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":721
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":722
  *     python.PySlice_GetIndicesEx(
  *         sliceobject, childcount, &start, &stop, c_step, c_length)
  *     if start > childcount / 2:             # <<<<<<<<<<<<<<
@@ -19524,7 +19539,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
   __pyx_t_2 = ((__pyx_v_start > __Pyx_div_Py_ssize_t(__pyx_v_childcount, 2)) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":722
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":723
  *         sliceobject, childcount, &start, &stop, c_step, c_length)
  *     if start > childcount / 2:
  *         c_start_node[0] = _findChildBackwards(c_parent, childcount - start - 1)             # <<<<<<<<<<<<<<
@@ -19536,7 +19551,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":724
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":725
  *         c_start_node[0] = _findChildBackwards(c_parent, childcount - start - 1)
  *     else:
  *         c_start_node[0] = _findChild(c_parent, start)             # <<<<<<<<<<<<<<
@@ -19547,7 +19562,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":725
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":726
  *     else:
  *         c_start_node[0] = _findChild(c_parent, start)
  *     return 0             # <<<<<<<<<<<<<<
@@ -19568,7 +19583,7 @@ static int __pyx_f_4lxml_5etree__findChildSlice(PyObject *__pyx_v_sliceobject, x
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":727
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":728
  *     return 0
  * 
  * cdef bint _isFullSlice(slice sliceobject):             # <<<<<<<<<<<<<<
@@ -19590,7 +19605,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_isFullSlice", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":730
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":731
  *     u"""Conservative guess if this slice is a full slice as in ``s[:]``.
  *     """
  *     cdef Py_ssize_t step = 0             # <<<<<<<<<<<<<<
@@ -19599,7 +19614,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) {
  */
   __pyx_v_step = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":731
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":732
  *     """
  *     cdef Py_ssize_t step = 0
  *     if sliceobject is None:             # <<<<<<<<<<<<<<
@@ -19610,7 +19625,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) {
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":732
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":733
  *     cdef Py_ssize_t step = 0
  *     if sliceobject is None:
  *         return 0             # <<<<<<<<<<<<<<
@@ -19623,7 +19638,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) {
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":733
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":734
  *     if sliceobject is None:
  *         return 0
  *     if sliceobject.start is None and \             # <<<<<<<<<<<<<<
@@ -19633,7 +19648,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) {
   __pyx_t_2 = (((PySliceObject*)__pyx_v_sliceobject)->start == Py_None);
   if ((__pyx_t_2 != 0)) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":734
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":735
  *         return 0
  *     if sliceobject.start is None and \
  *             sliceobject.stop is None:             # <<<<<<<<<<<<<<
@@ -19647,7 +19662,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) {
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":735
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":736
  *     if sliceobject.start is None and \
  *             sliceobject.stop is None:
  *         if sliceobject.step is None:             # <<<<<<<<<<<<<<
@@ -19658,7 +19673,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) {
     __pyx_t_2 = (__pyx_t_3 != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":736
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":737
  *             sliceobject.stop is None:
  *         if sliceobject.step is None:
  *             return 1             # <<<<<<<<<<<<<<
@@ -19671,7 +19686,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) {
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":737
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":738
  *         if sliceobject.step is None:
  *             return 1
  *         python._PyEval_SliceIndex(sliceobject.step, &step)             # <<<<<<<<<<<<<<
@@ -19680,10 +19695,10 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) {
  */
     __pyx_t_4 = ((PySliceObject*)__pyx_v_sliceobject)->step;
     __Pyx_INCREF(__pyx_t_4);
-    __pyx_t_5 = _PyEval_SliceIndex(__pyx_t_4, (&__pyx_v_step)); if (unlikely(__pyx_t_5 == 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 737; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = _PyEval_SliceIndex(__pyx_t_4, (&__pyx_v_step)); if (unlikely(__pyx_t_5 == 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 738; __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":738
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":739
  *             return 1
  *         python._PyEval_SliceIndex(sliceobject.step, &step)
  *         if step == 1:             # <<<<<<<<<<<<<<
@@ -19693,7 +19708,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) {
     __pyx_t_2 = ((__pyx_v_step == 1) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":739
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":740
  *         python._PyEval_SliceIndex(sliceobject.step, &step)
  *         if step == 1:
  *             return 1             # <<<<<<<<<<<<<<
@@ -19706,7 +19721,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) {
     }
     __pyx_L6:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":740
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":741
  *         if step == 1:
  *             return 1
  *         return 0             # <<<<<<<<<<<<<<
@@ -19719,7 +19734,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) {
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":741
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":742
  *             return 1
  *         return 0
  *     return 0             # <<<<<<<<<<<<<<
@@ -19740,7 +19755,7 @@ static int __pyx_f_4lxml_5etree__isFullSlice(PyObject *__pyx_v_sliceobject) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":743
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":744
  *     return 0
  * 
  * cdef _collectChildren(_Element element):             # <<<<<<<<<<<<<<
@@ -19763,19 +19778,19 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_collectChildren", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":745
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":746
  * cdef _collectChildren(_Element element):
  *     cdef xmlNode* c_node
  *     cdef list result = []             # <<<<<<<<<<<<<<
  *     c_node = element._c_node.children
  *     if c_node is not NULL:
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_result = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":746
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":747
  *     cdef xmlNode* c_node
  *     cdef list result = []
  *     c_node = element._c_node.children             # <<<<<<<<<<<<<<
@@ -19785,7 +19800,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx
   __pyx_t_2 = __pyx_v_element->_c_node->children;
   __pyx_v_c_node = __pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":747
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":748
  *     cdef list result = []
  *     c_node = element._c_node.children
  *     if c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -19795,7 +19810,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx
   __pyx_t_3 = ((__pyx_v_c_node != NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":748
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":749
  *     c_node = element._c_node.children
  *     if c_node is not NULL:
  *         if not _isElement(c_node):             # <<<<<<<<<<<<<<
@@ -19805,7 +19820,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx
     __pyx_t_3 = ((!(_isElement(__pyx_v_c_node) != 0)) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":749
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":750
  *     if c_node is not NULL:
  *         if not _isElement(c_node):
  *             c_node = _nextElement(c_node)             # <<<<<<<<<<<<<<
@@ -19817,7 +19832,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":750
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":751
  *         if not _isElement(c_node):
  *             c_node = _nextElement(c_node)
  *         while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -19828,7 +19843,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx
       __pyx_t_3 = ((__pyx_v_c_node != NULL) != 0);
       if (!__pyx_t_3) break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":751
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":752
  *             c_node = _nextElement(c_node)
  *         while c_node is not NULL:
  *             result.append(_elementFactory(element._doc, c_node))             # <<<<<<<<<<<<<<
@@ -19837,13 +19852,13 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx
  */
       __pyx_t_1 = ((PyObject *)__pyx_v_element->_doc);
       __Pyx_INCREF(__pyx_t_1);
-      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_1), __pyx_v_c_node)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__elementFactory(((struct LxmlDocument *)__pyx_t_1), __pyx_v_c_node)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 752; __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_PyList_Append(__pyx_v_result, __pyx_t_4); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_result, __pyx_t_4); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 752; __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":752
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":753
  *         while c_node is not NULL:
  *             result.append(_elementFactory(element._doc, c_node))
  *             c_node = _nextElement(c_node)             # <<<<<<<<<<<<<<
@@ -19856,7 +19871,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":753
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":754
  *             result.append(_elementFactory(element._doc, c_node))
  *             c_node = _nextElement(c_node)
  *     return result             # <<<<<<<<<<<<<<
@@ -19882,7 +19897,7 @@ static PyObject *__pyx_f_4lxml_5etree__collectChildren(struct LxmlElement *__pyx
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":755
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":756
  *     return result
  * 
  * cdef inline xmlNode* _findChild(xmlNode* c_node, Py_ssize_t index):             # <<<<<<<<<<<<<<
@@ -19896,7 +19911,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChild(xmlNode *__pyx_v_c
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("_findChild", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":756
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":757
  * 
  * cdef inline xmlNode* _findChild(xmlNode* c_node, Py_ssize_t index):
  *     if index < 0:             # <<<<<<<<<<<<<<
@@ -19906,7 +19921,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChild(xmlNode *__pyx_v_c
   __pyx_t_1 = ((__pyx_v_index < 0) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":757
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":758
  * cdef inline xmlNode* _findChild(xmlNode* c_node, Py_ssize_t index):
  *     if index < 0:
  *         return _findChildBackwards(c_node, -index - 1)             # <<<<<<<<<<<<<<
@@ -19919,7 +19934,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChild(xmlNode *__pyx_v_c
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":759
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":760
  *         return _findChildBackwards(c_node, -index - 1)
  *     else:
  *         return _findChildForwards(c_node, index)             # <<<<<<<<<<<<<<
@@ -19937,7 +19952,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChild(xmlNode *__pyx_v_c
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":761
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":762
  *         return _findChildForwards(c_node, index)
  * 
  * cdef inline xmlNode* _findChildForwards(xmlNode* c_node, Py_ssize_t index):             # <<<<<<<<<<<<<<
@@ -19954,7 +19969,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("_findChildForwards", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":766
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":767
  *     cdef xmlNode* c_child
  *     cdef Py_ssize_t c
  *     c_child = c_node.children             # <<<<<<<<<<<<<<
@@ -19964,7 +19979,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_
   __pyx_t_1 = __pyx_v_c_node->children;
   __pyx_v_c_child = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":767
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":768
  *     cdef Py_ssize_t c
  *     c_child = c_node.children
  *     c = 0             # <<<<<<<<<<<<<<
@@ -19973,7 +19988,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_
  */
   __pyx_v_c = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":768
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":769
  *     c_child = c_node.children
  *     c = 0
  *     while c_child is not NULL:             # <<<<<<<<<<<<<<
@@ -19984,7 +19999,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_
     __pyx_t_2 = ((__pyx_v_c_child != NULL) != 0);
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":769
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":770
  *     c = 0
  *     while c_child is not NULL:
  *         if _isElement(c_child):             # <<<<<<<<<<<<<<
@@ -19994,7 +20009,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_
     __pyx_t_2 = (_isElement(__pyx_v_c_child) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":770
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":771
  *     while c_child is not NULL:
  *         if _isElement(c_child):
  *             if c == index:             # <<<<<<<<<<<<<<
@@ -20004,7 +20019,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_
       __pyx_t_2 = ((__pyx_v_c == __pyx_v_index) != 0);
       if (__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":771
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":772
  *         if _isElement(c_child):
  *             if c == index:
  *                 return c_child             # <<<<<<<<<<<<<<
@@ -20017,7 +20032,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_
       }
       __pyx_L6:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":772
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":773
  *             if c == index:
  *                 return c_child
  *             c += 1             # <<<<<<<<<<<<<<
@@ -20029,7 +20044,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":773
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":774
  *                 return c_child
  *             c += 1
  *         c_child = c_child.next             # <<<<<<<<<<<<<<
@@ -20040,7 +20055,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_
     __pyx_v_c_child = __pyx_t_1;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":774
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":775
  *             c += 1
  *         c_child = c_child.next
  *     return NULL             # <<<<<<<<<<<<<<
@@ -20056,7 +20071,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildForwards(xmlNode *_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":776
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":777
  *     return NULL
  * 
  * cdef inline xmlNode* _findChildBackwards(xmlNode* c_node, Py_ssize_t index):             # <<<<<<<<<<<<<<
@@ -20073,7 +20088,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode *
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("_findChildBackwards", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":782
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":783
  *     cdef xmlNode* c_child
  *     cdef Py_ssize_t c
  *     c_child = c_node.last             # <<<<<<<<<<<<<<
@@ -20083,7 +20098,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode *
   __pyx_t_1 = __pyx_v_c_node->last;
   __pyx_v_c_child = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":783
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":784
  *     cdef Py_ssize_t c
  *     c_child = c_node.last
  *     c = 0             # <<<<<<<<<<<<<<
@@ -20092,7 +20107,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode *
  */
   __pyx_v_c = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":784
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":785
  *     c_child = c_node.last
  *     c = 0
  *     while c_child is not NULL:             # <<<<<<<<<<<<<<
@@ -20103,7 +20118,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode *
     __pyx_t_2 = ((__pyx_v_c_child != NULL) != 0);
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":785
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":786
  *     c = 0
  *     while c_child is not NULL:
  *         if _isElement(c_child):             # <<<<<<<<<<<<<<
@@ -20113,7 +20128,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode *
     __pyx_t_2 = (_isElement(__pyx_v_c_child) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":786
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":787
  *     while c_child is not NULL:
  *         if _isElement(c_child):
  *             if c == index:             # <<<<<<<<<<<<<<
@@ -20123,7 +20138,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode *
       __pyx_t_2 = ((__pyx_v_c == __pyx_v_index) != 0);
       if (__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":787
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":788
  *         if _isElement(c_child):
  *             if c == index:
  *                 return c_child             # <<<<<<<<<<<<<<
@@ -20136,7 +20151,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode *
       }
       __pyx_L6:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":788
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":789
  *             if c == index:
  *                 return c_child
  *             c += 1             # <<<<<<<<<<<<<<
@@ -20148,7 +20163,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode *
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":789
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":790
  *                 return c_child
  *             c += 1
  *         c_child = c_child.prev             # <<<<<<<<<<<<<<
@@ -20159,7 +20174,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode *
     __pyx_v_c_child = __pyx_t_1;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":790
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":791
  *             c += 1
  *         c_child = c_child.prev
  *     return NULL             # <<<<<<<<<<<<<<
@@ -20175,7 +20190,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__findChildBackwards(xmlNode *
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":792
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":793
  *     return NULL
  * 
  * cdef inline xmlNode* _textNodeOrSkip(xmlNode* c_node) nogil:             # <<<<<<<<<<<<<<
@@ -20190,7 +20205,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py
   int __pyx_t_3;
   xmlNode *__pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":799
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":800
  *     nodes.
  *     """
  *     while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -20201,7 +20216,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py
     __pyx_t_1 = ((__pyx_v_c_node != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":800
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":801
  *     """
  *     while c_node is not NULL:
  *         if c_node.type == tree.XML_TEXT_NODE or \             # <<<<<<<<<<<<<<
@@ -20211,7 +20226,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py
     __pyx_t_1 = ((__pyx_v_c_node->type == XML_TEXT_NODE) != 0);
     if (!__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":801
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":802
  *     while c_node is not NULL:
  *         if c_node.type == tree.XML_TEXT_NODE or \
  *                c_node.type == tree.XML_CDATA_SECTION_NODE:             # <<<<<<<<<<<<<<
@@ -20225,7 +20240,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py
     }
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":802
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":803
  *         if c_node.type == tree.XML_TEXT_NODE or \
  *                c_node.type == tree.XML_CDATA_SECTION_NODE:
  *             return c_node             # <<<<<<<<<<<<<<
@@ -20237,7 +20252,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py
       goto __pyx_L5;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":803
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":804
  *                c_node.type == tree.XML_CDATA_SECTION_NODE:
  *             return c_node
  *         elif c_node.type == tree.XML_XINCLUDE_START or \             # <<<<<<<<<<<<<<
@@ -20247,7 +20262,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py
     __pyx_t_3 = ((__pyx_v_c_node->type == XML_XINCLUDE_START) != 0);
     if (!__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":804
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":805
  *             return c_node
  *         elif c_node.type == tree.XML_XINCLUDE_START or \
  *                  c_node.type == tree.XML_XINCLUDE_END:             # <<<<<<<<<<<<<<
@@ -20261,7 +20276,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py
     }
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":805
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":806
  *         elif c_node.type == tree.XML_XINCLUDE_START or \
  *                  c_node.type == tree.XML_XINCLUDE_END:
  *             c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -20274,7 +20289,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":807
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":808
  *             c_node = c_node.next
  *         else:
  *             return NULL             # <<<<<<<<<<<<<<
@@ -20287,7 +20302,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py
     __pyx_L5:;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":808
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":809
  *         else:
  *             return NULL
  *     return NULL             # <<<<<<<<<<<<<<
@@ -20302,7 +20317,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__textNodeOrSkip(xmlNode *__py
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":810
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":811
  *     return NULL
  * 
  * cdef inline xmlNode* _nextElement(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -20317,7 +20332,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v
   xmlNode *__pyx_t_2;
   __Pyx_RefNannySetupContext("_nextElement", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":813
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":814
  *     u"""Given a node, find the next sibling that is an element.
  *     """
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -20327,7 +20342,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":814
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":815
  *     """
  *     if c_node is NULL:
  *         return NULL             # <<<<<<<<<<<<<<
@@ -20340,7 +20355,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":815
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":816
  *     if c_node is NULL:
  *         return NULL
  *     c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -20350,7 +20365,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v
   __pyx_t_2 = __pyx_v_c_node->next;
   __pyx_v_c_node = __pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":816
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":817
  *         return NULL
  *     c_node = c_node.next
  *     while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -20361,7 +20376,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__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/apihelpers.pxi":817
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":818
  *     c_node = c_node.next
  *     while c_node is not NULL:
  *         if _isElement(c_node):             # <<<<<<<<<<<<<<
@@ -20371,7 +20386,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v
     __pyx_t_1 = (_isElement(__pyx_v_c_node) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":818
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":819
  *     while c_node is not NULL:
  *         if _isElement(c_node):
  *             return c_node             # <<<<<<<<<<<<<<
@@ -20384,7 +20399,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v
     }
     __pyx_L6:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":819
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":820
  *         if _isElement(c_node):
  *             return c_node
  *         c_node = c_node.next             # <<<<<<<<<<<<<<
@@ -20395,7 +20410,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v
     __pyx_v_c_node = __pyx_t_2;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":820
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":821
  *             return c_node
  *         c_node = c_node.next
  *     return NULL             # <<<<<<<<<<<<<<
@@ -20411,7 +20426,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__nextElement(xmlNode *__pyx_v
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":822
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":823
  *     return NULL
  * 
  * cdef inline xmlNode* _previousElement(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -20426,7 +20441,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p
   xmlNode *__pyx_t_2;
   __Pyx_RefNannySetupContext("_previousElement", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":825
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":826
  *     u"""Given a node, find the next sibling that is an element.
  *     """
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -20436,7 +20451,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":826
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":827
  *     """
  *     if c_node is NULL:
  *         return NULL             # <<<<<<<<<<<<<<
@@ -20449,7 +20464,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":827
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":828
  *     if c_node is NULL:
  *         return NULL
  *     c_node = c_node.prev             # <<<<<<<<<<<<<<
@@ -20459,7 +20474,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p
   __pyx_t_2 = __pyx_v_c_node->prev;
   __pyx_v_c_node = __pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":828
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":829
  *         return NULL
  *     c_node = c_node.prev
  *     while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -20470,7 +20485,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p
     __pyx_t_1 = ((__pyx_v_c_node != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":829
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":830
  *     c_node = c_node.prev
  *     while c_node is not NULL:
  *         if _isElement(c_node):             # <<<<<<<<<<<<<<
@@ -20480,7 +20495,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p
     __pyx_t_1 = (_isElement(__pyx_v_c_node) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":830
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":831
  *     while c_node is not NULL:
  *         if _isElement(c_node):
  *             return c_node             # <<<<<<<<<<<<<<
@@ -20493,7 +20508,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p
     }
     __pyx_L6:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":831
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":832
  *         if _isElement(c_node):
  *             return c_node
  *         c_node = c_node.prev             # <<<<<<<<<<<<<<
@@ -20504,7 +20519,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p
     __pyx_v_c_node = __pyx_t_2;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":832
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":833
  *             return c_node
  *         c_node = c_node.prev
  *     return NULL             # <<<<<<<<<<<<<<
@@ -20520,7 +20535,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__previousElement(xmlNode *__p
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":834
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":835
  *     return NULL
  * 
  * cdef inline xmlNode* _parentElement(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -20537,7 +20552,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx
   xmlNode *__pyx_t_4;
   __Pyx_RefNannySetupContext("_parentElement", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":836
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":837
  * cdef inline xmlNode* _parentElement(xmlNode* c_node):
  *     u"Given a node, find the parent element."
  *     if c_node is NULL or not _isElement(c_node):             # <<<<<<<<<<<<<<
@@ -20553,7 +20568,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":837
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":838
  *     u"Given a node, find the parent element."
  *     if c_node is NULL or not _isElement(c_node):
  *         return NULL             # <<<<<<<<<<<<<<
@@ -20566,7 +20581,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":838
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":839
  *     if c_node is NULL or not _isElement(c_node):
  *         return NULL
  *     c_node = c_node.parent             # <<<<<<<<<<<<<<
@@ -20576,7 +20591,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx
   __pyx_t_4 = __pyx_v_c_node->parent;
   __pyx_v_c_node = __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":839
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":840
  *         return NULL
  *     c_node = c_node.parent
  *     if c_node is NULL or not _isElement(c_node):             # <<<<<<<<<<<<<<
@@ -20592,7 +20607,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx
   }
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":840
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":841
  *     c_node = c_node.parent
  *     if c_node is NULL or not _isElement(c_node):
  *         return NULL             # <<<<<<<<<<<<<<
@@ -20605,7 +20620,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":841
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":842
  *     if c_node is NULL or not _isElement(c_node):
  *         return NULL
  *     return c_node             # <<<<<<<<<<<<<<
@@ -20621,7 +20636,7 @@ static CYTHON_INLINE xmlNode *__pyx_f_4lxml_5etree__parentElement(xmlNode *__pyx
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":843
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":844
  *     return c_node
  * 
  * cdef inline bint _tagMatches(xmlNode* c_node, const_xmlChar* c_href, const_xmlChar* c_name):             # <<<<<<<<<<<<<<
@@ -20638,7 +20653,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("_tagMatches", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":857
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":858
  *     * its name string equals the c_name string
  *     """
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -20648,7 +20663,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":858
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":859
  *     """
  *     if c_node is NULL:
  *         return 0             # <<<<<<<<<<<<<<
@@ -20661,7 +20676,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":859
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":860
  *     if c_node is NULL:
  *         return 0
  *     if c_node.type != tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -20671,7 +20686,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
   __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/apihelpers.pxi":861
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":862
  *     if c_node.type != tree.XML_ELEMENT_NODE:
  *         # not an element, only succeed if we match everything
  *         return c_name is NULL and c_href is NULL             # <<<<<<<<<<<<<<
@@ -20691,7 +20706,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":862
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":863
  *         # not an element, only succeed if we match everything
  *         return c_name is NULL and c_href is NULL
  *     if c_name is NULL:             # <<<<<<<<<<<<<<
@@ -20701,7 +20716,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
   __pyx_t_3 = ((__pyx_v_c_name == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":863
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":864
  *         return c_name is NULL and c_href is NULL
  *     if c_name is NULL:
  *         if c_href is NULL:             # <<<<<<<<<<<<<<
@@ -20711,7 +20726,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
     __pyx_t_3 = ((__pyx_v_c_href == NULL) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":865
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":866
  *         if c_href is NULL:
  *             # always match
  *             return 1             # <<<<<<<<<<<<<<
@@ -20724,7 +20739,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":867
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":868
  *             return 1
  *         else:
  *             c_node_href = _getNs(c_node)             # <<<<<<<<<<<<<<
@@ -20733,7 +20748,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
  */
       __pyx_v_c_node_href = _getNs(__pyx_v_c_node);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":868
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":869
  *         else:
  *             c_node_href = _getNs(c_node)
  *             if c_node_href is NULL:             # <<<<<<<<<<<<<<
@@ -20743,7 +20758,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
       __pyx_t_3 = ((__pyx_v_c_node_href == NULL) != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":869
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":870
  *             c_node_href = _getNs(c_node)
  *             if c_node_href is NULL:
  *                 return c_href[0] == c'\0'             # <<<<<<<<<<<<<<
@@ -20756,7 +20771,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
       }
       /*else*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":871
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":872
  *                 return c_href[0] == c'\0'
  *             else:
  *                 return tree.xmlStrcmp(c_node_href, c_href) == 0             # <<<<<<<<<<<<<<
@@ -20772,7 +20787,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
     goto __pyx_L5;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":872
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":873
  *             else:
  *                 return tree.xmlStrcmp(c_node_href, c_href) == 0
  *     elif c_href is NULL:             # <<<<<<<<<<<<<<
@@ -20782,7 +20797,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
   __pyx_t_3 = ((__pyx_v_c_href == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":873
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":874
  *                 return tree.xmlStrcmp(c_node_href, c_href) == 0
  *     elif c_href is NULL:
  *         if _getNs(c_node) is not NULL:             # <<<<<<<<<<<<<<
@@ -20792,7 +20807,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
     __pyx_t_3 = ((_getNs(__pyx_v_c_node) != NULL) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":874
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":875
  *     elif c_href is NULL:
  *         if _getNs(c_node) is not NULL:
  *             return 0             # <<<<<<<<<<<<<<
@@ -20805,7 +20820,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
     }
     __pyx_L8:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":875
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":876
  *         if _getNs(c_node) is not NULL:
  *             return 0
  *         return c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0             # <<<<<<<<<<<<<<
@@ -20824,7 +20839,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
     goto __pyx_L5;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":876
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":877
  *             return 0
  *         return c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0
  *     elif c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0:             # <<<<<<<<<<<<<<
@@ -20840,7 +20855,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
   }
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":877
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":878
  *         return c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0
  *     elif c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0:
  *         c_node_href = _getNs(c_node)             # <<<<<<<<<<<<<<
@@ -20849,7 +20864,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
  */
     __pyx_v_c_node_href = _getNs(__pyx_v_c_node);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":878
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":879
  *     elif c_node.name == c_name or tree.xmlStrcmp(c_node.name, c_name) == 0:
  *         c_node_href = _getNs(c_node)
  *         if c_node_href is NULL:             # <<<<<<<<<<<<<<
@@ -20859,7 +20874,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
     __pyx_t_1 = ((__pyx_v_c_node_href == NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":879
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":880
  *         c_node_href = _getNs(c_node)
  *         if c_node_href is NULL:
  *             return c_href[0] == c'\0'             # <<<<<<<<<<<<<<
@@ -20872,7 +20887,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":881
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":882
  *             return c_href[0] == c'\0'
  *         else:
  *             return tree.xmlStrcmp(c_node_href, c_href) == 0             # <<<<<<<<<<<<<<
@@ -20887,7 +20902,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":883
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":884
  *             return tree.xmlStrcmp(c_node_href, c_href) == 0
  *     else:
  *         return 0             # <<<<<<<<<<<<<<
@@ -20905,7 +20920,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatches(xmlNode *__pyx_v_c_nod
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":885
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":886
  *         return 0
  * 
  * cdef inline bint _tagMatchesExactly(xmlNode* c_node, qname* c_qname):             # <<<<<<<<<<<<<<
@@ -20923,7 +20938,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("_tagMatchesExactly", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":904
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":905
  *     """
  *     cdef char* c_href
  *     if c_qname.c_name is not NULL and c_qname.c_name is not c_node.name:             # <<<<<<<<<<<<<<
@@ -20939,7 +20954,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":905
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":906
  *     cdef char* c_href
  *     if c_qname.c_name is not NULL and c_qname.c_name is not c_node.name:
  *         return 0             # <<<<<<<<<<<<<<
@@ -20952,7 +20967,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":906
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":907
  *     if c_qname.c_name is not NULL and c_qname.c_name is not c_node.name:
  *         return 0
  *     if c_qname.href is NULL:             # <<<<<<<<<<<<<<
@@ -20962,7 +20977,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_
   __pyx_t_3 = ((__pyx_v_c_qname->href == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":907
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":908
  *         return 0
  *     if c_qname.href is NULL:
  *         return 1             # <<<<<<<<<<<<<<
@@ -20975,7 +20990,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":908
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":909
  *     if c_qname.href is NULL:
  *         return 1
  *     c_node_href = _getNs(c_node)             # <<<<<<<<<<<<<<
@@ -20984,7 +20999,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_
  */
   __pyx_v_c_node_href = _getNs(__pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":909
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":910
  *         return 1
  *     c_node_href = _getNs(c_node)
  *     c_href = python.__cstr(c_qname.href)             # <<<<<<<<<<<<<<
@@ -20993,7 +21008,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_
  */
   __pyx_v_c_href = PyBytes_AS_STRING(__pyx_v_c_qname->href);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":910
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":911
  *     c_node_href = _getNs(c_node)
  *     c_href = python.__cstr(c_qname.href)
  *     if c_href[0] == '\0':             # <<<<<<<<<<<<<<
@@ -21003,7 +21018,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_
   __pyx_t_3 = (((__pyx_v_c_href[0]) == '\x00') != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":911
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":912
  *     c_href = python.__cstr(c_qname.href)
  *     if c_href[0] == '\0':
  *         return c_node_href is NULL or c_node_href[0] == '\0'             # <<<<<<<<<<<<<<
@@ -21022,7 +21037,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_
     goto __pyx_L5;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":912
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":913
  *     if c_href[0] == '\0':
  *         return c_node_href is NULL or c_node_href[0] == '\0'
  *     elif c_node_href is NULL:             # <<<<<<<<<<<<<<
@@ -21032,7 +21047,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_
   __pyx_t_2 = ((__pyx_v_c_node_href == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":913
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":914
  *         return c_node_href is NULL or c_node_href[0] == '\0'
  *     elif c_node_href is NULL:
  *         return 0             # <<<<<<<<<<<<<<
@@ -21045,7 +21060,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":915
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":916
  *         return 0
  *     else:
  *         return tree.xmlStrcmp(<const_xmlChar*>c_href, c_node_href) == 0             # <<<<<<<<<<<<<<
@@ -21063,7 +21078,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__tagMatchesExactly(xmlNode *__pyx_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":917
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":918
  *         return tree.xmlStrcmp(<const_xmlChar*>c_href, c_node_href) == 0
  * 
  * cdef Py_ssize_t _mapTagsToQnameMatchArray(xmlDoc* c_doc, list ns_tags,             # <<<<<<<<<<<<<<
@@ -21095,7 +21110,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_mapTagsToQnameMatchArray", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":925
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":926
  *     if it is not NULL.
  *     """
  *     cdef Py_ssize_t count = 0, i             # <<<<<<<<<<<<<<
@@ -21104,7 +21119,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
  */
   __pyx_v_count = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":927
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":928
  *     cdef Py_ssize_t count = 0, i
  *     cdef bytes ns, tag
  *     for ns, tag in ns_tags:             # <<<<<<<<<<<<<<
@@ -21113,15 +21128,15 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
  */
   if (unlikely(((PyObject *)__pyx_v_ns_tags) == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_t_1 = ((PyObject *)__pyx_v_ns_tags); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
   for (;;) {
     if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
     #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     #else
-    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
       PyObject* sequence = __pyx_t_3;
@@ -21133,7 +21148,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -21146,16 +21161,16 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
       __Pyx_INCREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_5);
       #else
-      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       #endif
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     } else
     {
       Py_ssize_t index = -1;
-      __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
@@ -21163,7 +21178,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
       __Pyx_GOTREF(__pyx_t_4);
       index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_5);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 928; __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;
@@ -21171,17 +21186,17 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_L6_unpacking_done:;
     }
-    if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_t_4)->tp_name), 0))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (!(likely(PyBytes_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_t_5)->tp_name), 0))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 927; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_t_4)->tp_name), 0))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyBytes_CheckExact(__pyx_t_5))||((__pyx_t_5) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_t_5)->tp_name), 0))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 928; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_XDECREF_SET(__pyx_v_ns, ((PyObject*)__pyx_t_4));
     __pyx_t_4 = 0;
     __Pyx_XDECREF_SET(__pyx_v_tag, ((PyObject*)__pyx_t_5));
     __pyx_t_5 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":928
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":929
  *     cdef bytes ns, tag
  *     for ns, tag in ns_tags:
  *         if tag is None:             # <<<<<<<<<<<<<<
@@ -21192,7 +21207,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
     __pyx_t_9 = (__pyx_t_8 != 0);
     if (__pyx_t_9) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":929
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":930
  *     for ns, tag in ns_tags:
  *         if tag is None:
  *             c_tag = <const_xmlChar*>NULL             # <<<<<<<<<<<<<<
@@ -21203,7 +21218,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
       goto __pyx_L7;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":930
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":931
  *         if tag is None:
  *             c_tag = <const_xmlChar*>NULL
  *         elif force_into_dict:             # <<<<<<<<<<<<<<
@@ -21213,7 +21228,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
     __pyx_t_9 = (__pyx_v_force_into_dict != 0);
     if (__pyx_t_9) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":931
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":932
  *             c_tag = <const_xmlChar*>NULL
  *         elif force_into_dict:
  *             c_tag = tree.xmlDictLookup(c_doc.dict, _xcstr(tag), len(tag))             # <<<<<<<<<<<<<<
@@ -21222,12 +21237,12 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
  */
       if (unlikely(((PyObject *)__pyx_v_tag) == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __pyx_t_10 = PyBytes_GET_SIZE(((PyObject *)__pyx_v_tag)); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 931; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyBytes_GET_SIZE(((PyObject *)__pyx_v_tag)); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 932; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_v_c_tag = xmlDictLookup(__pyx_v_c_doc->dict, (const xmlChar*)PyBytes_AS_STRING(((PyObject *)__pyx_v_tag)), __pyx_t_10);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":932
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":933
  *         elif force_into_dict:
  *             c_tag = tree.xmlDictLookup(c_doc.dict, _xcstr(tag), len(tag))
  *             if c_tag is NULL:             # <<<<<<<<<<<<<<
@@ -21237,7 +21252,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
       __pyx_t_9 = ((__pyx_v_c_tag == NULL) != 0);
       if (__pyx_t_9) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":934
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":935
  *             if c_tag is NULL:
  *                 # clean up before raising the error
  *                 for i in xrange(count):             # <<<<<<<<<<<<<<
@@ -21248,7 +21263,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
         for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
           __pyx_v_i = __pyx_t_11;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":935
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":936
  *                 # clean up before raising the error
  *                 for i in xrange(count):
  *                     cpython.ref.Py_XDECREF(c_ns_tags[i].href)             # <<<<<<<<<<<<<<
@@ -21258,14 +21273,14 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
           Py_XDECREF((__pyx_v_c_ns_tags[__pyx_v_i]).href);
         }
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":936
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":937
  *                 for i in xrange(count):
  *                     cpython.ref.Py_XDECREF(c_ns_tags[i].href)
  *                 raise MemoryError()             # <<<<<<<<<<<<<<
  *         else:
  *             c_tag = tree.xmlDictExists(c_doc.dict, _xcstr(tag), len(tag))
  */
-        PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 936; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 937; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         goto __pyx_L8;
       }
       __pyx_L8:;
@@ -21273,7 +21288,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":938
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":939
  *                 raise MemoryError()
  *         else:
  *             c_tag = tree.xmlDictExists(c_doc.dict, _xcstr(tag), len(tag))             # <<<<<<<<<<<<<<
@@ -21282,12 +21297,12 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
  */
       if (unlikely(((PyObject *)__pyx_v_tag) == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 938; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 939; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __pyx_t_10 = PyBytes_GET_SIZE(((PyObject *)__pyx_v_tag)); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 938; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = PyBytes_GET_SIZE(((PyObject *)__pyx_v_tag)); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 939; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_v_c_tag = xmlDictExists(__pyx_v_c_doc->dict, (const xmlChar*)PyBytes_AS_STRING(((PyObject *)__pyx_v_tag)), __pyx_t_10);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":939
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":940
  *         else:
  *             c_tag = tree.xmlDictExists(c_doc.dict, _xcstr(tag), len(tag))
  *             if c_tag is NULL:             # <<<<<<<<<<<<<<
@@ -21297,7 +21312,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
       __pyx_t_9 = ((__pyx_v_c_tag == NULL) != 0);
       if (__pyx_t_9) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":941
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":942
  *             if c_tag is NULL:
  *                 # not in the dict => not in the document
  *                 continue             # <<<<<<<<<<<<<<
@@ -21311,7 +21326,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
     }
     __pyx_L7:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":942
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":943
  *                 # not in the dict => not in the document
  *                 continue
  *         c_ns_tags[count].c_name = c_tag             # <<<<<<<<<<<<<<
@@ -21320,7 +21335,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
  */
     (__pyx_v_c_ns_tags[__pyx_v_count]).c_name = __pyx_v_c_tag;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":943
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":944
  *                 continue
  *         c_ns_tags[count].c_name = c_tag
  *         if ns is None:             # <<<<<<<<<<<<<<
@@ -21331,7 +21346,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
     __pyx_t_8 = (__pyx_t_9 != 0);
     if (__pyx_t_8) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":944
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":945
  *         c_ns_tags[count].c_name = c_tag
  *         if ns is None:
  *             c_ns_tags[count].href = NULL             # <<<<<<<<<<<<<<
@@ -21343,7 +21358,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":946
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":947
  *             c_ns_tags[count].href = NULL
  *         else:
  *             cpython.ref.Py_INCREF(ns) # keep an owned reference!             # <<<<<<<<<<<<<<
@@ -21352,7 +21367,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
  */
       Py_INCREF(((PyObject *)__pyx_v_ns));
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":947
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":948
  *         else:
  *             cpython.ref.Py_INCREF(ns) # keep an owned reference!
  *             c_ns_tags[count].href = <python.PyObject*>ns             # <<<<<<<<<<<<<<
@@ -21363,7 +21378,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
     }
     __pyx_L12:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":948
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":949
  *             cpython.ref.Py_INCREF(ns) # keep an owned reference!
  *             c_ns_tags[count].href = <python.PyObject*>ns
  *         count += 1             # <<<<<<<<<<<<<<
@@ -21375,7 +21390,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":949
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":950
  *             c_ns_tags[count].href = <python.PyObject*>ns
  *         count += 1
  *     return count             # <<<<<<<<<<<<<<
@@ -21402,7 +21417,7 @@ static Py_ssize_t __pyx_f_4lxml_5etree__mapTagsToQnameMatchArray(xmlDoc *__pyx_v
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":951
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":952
  *     return count
  * 
  * cdef int _removeNode(_Document doc, xmlNode* c_node) except -1:             # <<<<<<<<<<<<<<
@@ -21422,7 +21437,7 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_removeNode", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":956
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":957
  *     """
  *     cdef xmlNode* c_next
  *     c_next = c_node.next             # <<<<<<<<<<<<<<
@@ -21432,7 +21447,7 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm
   __pyx_t_1 = __pyx_v_c_node->next;
   __pyx_v_c_next = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":957
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":958
  *     cdef xmlNode* c_next
  *     c_next = c_node.next
  *     tree.xmlUnlinkNode(c_node)             # <<<<<<<<<<<<<<
@@ -21441,7 +21456,7 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm
  */
   xmlUnlinkNode(__pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":958
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":959
  *     c_next = c_node.next
  *     tree.xmlUnlinkNode(c_node)
  *     _moveTail(c_next, c_node)             # <<<<<<<<<<<<<<
@@ -21450,7 +21465,7 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm
  */
   __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":959
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":960
  *     tree.xmlUnlinkNode(c_node)
  *     _moveTail(c_next, c_node)
  *     if not attemptDeallocation(c_node):             # <<<<<<<<<<<<<<
@@ -21460,19 +21475,19 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm
   __pyx_t_2 = ((!(__pyx_f_4lxml_5etree_attemptDeallocation(__pyx_v_c_node) != 0)) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":961
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":962
  *     if not attemptDeallocation(c_node):
  *         # make namespaces absolute
  *         moveNodeToDocument(doc, c_node.doc, c_node)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_3 = __pyx_f_4lxml_5etree_moveNodeToDocument(__pyx_v_doc, __pyx_v_c_node->doc, __pyx_v_c_node); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 961; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_4lxml_5etree_moveNodeToDocument(__pyx_v_doc, __pyx_v_c_node->doc, __pyx_v_c_node); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 962; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":962
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":963
  *         # make namespaces absolute
  *         moveNodeToDocument(doc, c_node.doc, c_node)
  *     return 0             # <<<<<<<<<<<<<<
@@ -21492,7 +21507,7 @@ static int __pyx_f_4lxml_5etree__removeNode(struct LxmlDocument *__pyx_v_doc, xm
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":964
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":965
  *     return 0
  * 
  * cdef int _removeSiblings(xmlNode* c_element, tree.xmlElementType node_type, bint with_tail) except -1:             # <<<<<<<<<<<<<<
@@ -21509,7 +21524,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("_removeSiblings", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":967
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":968
  *     cdef xmlNode* c_node
  *     cdef xmlNode* c_next
  *     c_node = c_element.next             # <<<<<<<<<<<<<<
@@ -21519,7 +21534,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
   __pyx_t_1 = __pyx_v_c_element->next;
   __pyx_v_c_node = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":968
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":969
  *     cdef xmlNode* c_next
  *     c_node = c_element.next
  *     while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -21530,7 +21545,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
     __pyx_t_2 = ((__pyx_v_c_node != NULL) != 0);
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":969
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":970
  *     c_node = c_element.next
  *     while c_node is not NULL:
  *         c_next = _nextElement(c_node)             # <<<<<<<<<<<<<<
@@ -21539,7 +21554,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
  */
     __pyx_v_c_next = __pyx_f_4lxml_5etree__nextElement(__pyx_v_c_node);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":970
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":971
  *     while c_node is not NULL:
  *         c_next = _nextElement(c_node)
  *         if c_node.type == node_type:             # <<<<<<<<<<<<<<
@@ -21549,7 +21564,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
     __pyx_t_2 = ((__pyx_v_c_node->type == __pyx_v_node_type) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":971
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":972
  *         c_next = _nextElement(c_node)
  *         if c_node.type == node_type:
  *             if with_tail:             # <<<<<<<<<<<<<<
@@ -21559,7 +21574,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
       __pyx_t_2 = (__pyx_v_with_tail != 0);
       if (__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":972
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":973
  *         if c_node.type == node_type:
  *             if with_tail:
  *                 _removeText(c_node.next)             # <<<<<<<<<<<<<<
@@ -21571,7 +21586,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
       }
       __pyx_L6:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":973
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":974
  *             if with_tail:
  *                 _removeText(c_node.next)
  *             tree.xmlUnlinkNode(c_node)             # <<<<<<<<<<<<<<
@@ -21580,7 +21595,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
  */
       xmlUnlinkNode(__pyx_v_c_node);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":974
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":975
  *                 _removeText(c_node.next)
  *             tree.xmlUnlinkNode(c_node)
  *             attemptDeallocation(c_node)             # <<<<<<<<<<<<<<
@@ -21592,7 +21607,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":975
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":976
  *             tree.xmlUnlinkNode(c_node)
  *             attemptDeallocation(c_node)
  *         c_node = c_next             # <<<<<<<<<<<<<<
@@ -21602,7 +21617,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
     __pyx_v_c_node = __pyx_v_c_next;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":976
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":977
  *             attemptDeallocation(c_node)
  *         c_node = c_next
  *     c_node = c_element.prev             # <<<<<<<<<<<<<<
@@ -21612,7 +21627,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
   __pyx_t_1 = __pyx_v_c_element->prev;
   __pyx_v_c_node = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":977
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":978
  *         c_node = c_next
  *     c_node = c_element.prev
  *     while c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -21623,7 +21638,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
     __pyx_t_2 = ((__pyx_v_c_node != NULL) != 0);
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":978
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":979
  *     c_node = c_element.prev
  *     while c_node is not NULL:
  *         c_next = _previousElement(c_node)             # <<<<<<<<<<<<<<
@@ -21632,7 +21647,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
  */
     __pyx_v_c_next = __pyx_f_4lxml_5etree__previousElement(__pyx_v_c_node);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":979
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":980
  *     while c_node is not NULL:
  *         c_next = _previousElement(c_node)
  *         if c_node.type == node_type:             # <<<<<<<<<<<<<<
@@ -21642,7 +21657,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
     __pyx_t_2 = ((__pyx_v_c_node->type == __pyx_v_node_type) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":980
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":981
  *         c_next = _previousElement(c_node)
  *         if c_node.type == node_type:
  *             if with_tail:             # <<<<<<<<<<<<<<
@@ -21652,7 +21667,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
       __pyx_t_2 = (__pyx_v_with_tail != 0);
       if (__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":981
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":982
  *         if c_node.type == node_type:
  *             if with_tail:
  *                 _removeText(c_node.next)             # <<<<<<<<<<<<<<
@@ -21664,7 +21679,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
       }
       __pyx_L10:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":982
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":983
  *             if with_tail:
  *                 _removeText(c_node.next)
  *             tree.xmlUnlinkNode(c_node)             # <<<<<<<<<<<<<<
@@ -21673,7 +21688,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
  */
       xmlUnlinkNode(__pyx_v_c_node);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":983
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":984
  *                 _removeText(c_node.next)
  *             tree.xmlUnlinkNode(c_node)
  *             attemptDeallocation(c_node)             # <<<<<<<<<<<<<<
@@ -21685,7 +21700,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
     }
     __pyx_L9:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":984
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":985
  *             tree.xmlUnlinkNode(c_node)
  *             attemptDeallocation(c_node)
  *         c_node = c_next             # <<<<<<<<<<<<<<
@@ -21695,7 +21710,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
     __pyx_v_c_node = __pyx_v_c_next;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":985
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":986
  *             attemptDeallocation(c_node)
  *         c_node = c_next
  *     return 0             # <<<<<<<<<<<<<<
@@ -21711,7 +21726,7 @@ static int __pyx_f_4lxml_5etree__removeSiblings(xmlNode *__pyx_v_c_element, xmlE
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":987
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":988
  *     return 0
  * 
  * cdef void _moveTail(xmlNode* c_tail, xmlNode* c_target):             # <<<<<<<<<<<<<<
@@ -21725,7 +21740,7 @@ static void __pyx_f_4lxml_5etree__moveTail(xmlNode *__pyx_v_c_tail, xmlNode *__p
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("_moveTail", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":991
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":992
  *     # tail support: look for any text nodes trailing this node and
  *     # move them too
  *     c_tail = _textNodeOrSkip(c_tail)             # <<<<<<<<<<<<<<
@@ -21734,7 +21749,7 @@ static void __pyx_f_4lxml_5etree__moveTail(xmlNode *__pyx_v_c_tail, xmlNode *__p
  */
   __pyx_v_c_tail = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_tail);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":992
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":993
  *     # move them too
  *     c_tail = _textNodeOrSkip(c_tail)
  *     while c_tail is not NULL:             # <<<<<<<<<<<<<<
@@ -21745,7 +21760,7 @@ static void __pyx_f_4lxml_5etree__moveTail(xmlNode *__pyx_v_c_tail, xmlNode *__p
     __pyx_t_1 = ((__pyx_v_c_tail != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":993
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":994
  *     c_tail = _textNodeOrSkip(c_tail)
  *     while c_tail is not NULL:
  *         c_next = _textNodeOrSkip(c_tail.next)             # <<<<<<<<<<<<<<
@@ -21754,7 +21769,7 @@ static void __pyx_f_4lxml_5etree__moveTail(xmlNode *__pyx_v_c_tail, xmlNode *__p
  */
     __pyx_v_c_next = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_tail->next);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":994
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":995
  *     while c_tail is not NULL:
  *         c_next = _textNodeOrSkip(c_tail.next)
  *         c_target = tree.xmlAddNextSibling(c_target, c_tail)             # <<<<<<<<<<<<<<
@@ -21763,7 +21778,7 @@ static void __pyx_f_4lxml_5etree__moveTail(xmlNode *__pyx_v_c_tail, xmlNode *__p
  */
     __pyx_v_c_target = xmlAddNextSibling(__pyx_v_c_target, __pyx_v_c_tail);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":995
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":996
  *         c_next = _textNodeOrSkip(c_tail.next)
  *         c_target = tree.xmlAddNextSibling(c_target, c_tail)
  *         c_tail = c_next             # <<<<<<<<<<<<<<
@@ -21776,7 +21791,7 @@ static void __pyx_f_4lxml_5etree__moveTail(xmlNode *__pyx_v_c_tail, xmlNode *__p
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":997
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":998
  *         c_tail = c_next
  * 
  * cdef int _copyTail(xmlNode* c_tail, xmlNode* c_target) except -1:             # <<<<<<<<<<<<<<
@@ -21794,7 +21809,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_copyTail", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1001
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1002
  *     # tail copying support: look for any text nodes trailing this node and
  *     # copy it to the target node
  *     c_tail = _textNodeOrSkip(c_tail)             # <<<<<<<<<<<<<<
@@ -21803,7 +21818,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py
  */
   __pyx_v_c_tail = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_tail);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1002
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1003
  *     # copy it to the target node
  *     c_tail = _textNodeOrSkip(c_tail)
  *     while c_tail is not NULL:             # <<<<<<<<<<<<<<
@@ -21814,7 +21829,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py
     __pyx_t_1 = ((__pyx_v_c_tail != NULL) != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1003
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1004
  *     c_tail = _textNodeOrSkip(c_tail)
  *     while c_tail is not NULL:
  *         if c_target.doc is not c_tail.doc:             # <<<<<<<<<<<<<<
@@ -21824,7 +21839,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py
     __pyx_t_1 = ((__pyx_v_c_target->doc != __pyx_v_c_tail->doc) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1004
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1005
  *     while c_tail is not NULL:
  *         if c_target.doc is not c_tail.doc:
  *             c_new_tail = tree.xmlDocCopyNode(c_tail, c_target.doc, 0)             # <<<<<<<<<<<<<<
@@ -21836,7 +21851,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1006
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1007
  *             c_new_tail = tree.xmlDocCopyNode(c_tail, c_target.doc, 0)
  *         else:
  *             c_new_tail = tree.xmlCopyNode(c_tail, 0)             # <<<<<<<<<<<<<<
@@ -21847,7 +21862,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1007
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1008
  *         else:
  *             c_new_tail = tree.xmlCopyNode(c_tail, 0)
  *         if c_new_tail is NULL:             # <<<<<<<<<<<<<<
@@ -21857,19 +21872,19 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py
     __pyx_t_1 = ((__pyx_v_c_new_tail == NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1008
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1009
  *             c_new_tail = tree.xmlCopyNode(c_tail, 0)
  *         if c_new_tail is NULL:
  *             raise MemoryError()             # <<<<<<<<<<<<<<
  *         c_target = tree.xmlAddNextSibling(c_target, c_new_tail)
  *         c_tail = _textNodeOrSkip(c_tail.next)
  */
-      PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1008; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1009; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L6;
     }
     __pyx_L6:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1009
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1010
  *         if c_new_tail is NULL:
  *             raise MemoryError()
  *         c_target = tree.xmlAddNextSibling(c_target, c_new_tail)             # <<<<<<<<<<<<<<
@@ -21878,7 +21893,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py
  */
     __pyx_v_c_target = xmlAddNextSibling(__pyx_v_c_target, __pyx_v_c_new_tail);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1010
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1011
  *             raise MemoryError()
  *         c_target = tree.xmlAddNextSibling(c_target, c_new_tail)
  *         c_tail = _textNodeOrSkip(c_tail.next)             # <<<<<<<<<<<<<<
@@ -21888,7 +21903,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py
     __pyx_v_c_tail = __pyx_f_4lxml_5etree__textNodeOrSkip(__pyx_v_c_tail->next);
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1011
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1012
  *         c_target = tree.xmlAddNextSibling(c_target, c_new_tail)
  *         c_tail = _textNodeOrSkip(c_tail.next)
  *     return 0             # <<<<<<<<<<<<<<
@@ -21908,7 +21923,7 @@ static int __pyx_f_4lxml_5etree__copyTail(xmlNode *__pyx_v_c_tail, xmlNode *__py
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1013
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1014
  *     return 0
  * 
  * cdef int _copyNonElementSiblings(xmlNode* c_node, xmlNode* c_target) except -1:             # <<<<<<<<<<<<<<
@@ -21931,7 +21946,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_copyNonElementSiblings", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1015
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1016
  * cdef int _copyNonElementSiblings(xmlNode* c_node, xmlNode* c_target) except -1:
  *     cdef xmlNode* c_copy
  *     cdef xmlNode* c_sibling = c_node             # <<<<<<<<<<<<<<
@@ -21940,7 +21955,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
  */
   __pyx_v_c_sibling = __pyx_v_c_node;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1016
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1017
  *     cdef xmlNode* c_copy
  *     cdef xmlNode* c_sibling = c_node
  *     while c_sibling.prev != NULL and \             # <<<<<<<<<<<<<<
@@ -21951,7 +21966,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
     __pyx_t_1 = ((__pyx_v_c_sibling->prev != NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1017
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1018
  *     cdef xmlNode* c_sibling = c_node
  *     while c_sibling.prev != NULL and \
  *             (c_sibling.prev.type == tree.XML_PI_NODE or \             # <<<<<<<<<<<<<<
@@ -21961,7 +21976,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
       __pyx_t_2 = ((__pyx_v_c_sibling->prev->type == XML_PI_NODE) != 0);
       if (!__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1018
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1019
  *     while c_sibling.prev != NULL and \
  *             (c_sibling.prev.type == tree.XML_PI_NODE or \
  *                  c_sibling.prev.type == tree.XML_COMMENT_NODE):             # <<<<<<<<<<<<<<
@@ -21979,7 +21994,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
     }
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1019
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1020
  *             (c_sibling.prev.type == tree.XML_PI_NODE or \
  *                  c_sibling.prev.type == tree.XML_COMMENT_NODE):
  *         c_sibling = c_sibling.prev             # <<<<<<<<<<<<<<
@@ -21990,7 +22005,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
     __pyx_v_c_sibling = __pyx_t_5;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1020
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1021
  *                  c_sibling.prev.type == tree.XML_COMMENT_NODE):
  *         c_sibling = c_sibling.prev
  *     while c_sibling != c_node:             # <<<<<<<<<<<<<<
@@ -22001,7 +22016,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
     __pyx_t_2 = ((__pyx_v_c_sibling != __pyx_v_c_node) != 0);
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1021
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1022
  *         c_sibling = c_sibling.prev
  *     while c_sibling != c_node:
  *         c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1)             # <<<<<<<<<<<<<<
@@ -22010,7 +22025,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
  */
     __pyx_v_c_copy = xmlDocCopyNode(__pyx_v_c_sibling, __pyx_v_c_target->doc, 1);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1022
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1023
  *     while c_sibling != c_node:
  *         c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1)
  *         if c_copy is NULL:             # <<<<<<<<<<<<<<
@@ -22020,19 +22035,19 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
     __pyx_t_2 = ((__pyx_v_c_copy == NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1023
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1024
  *         c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1)
  *         if c_copy is NULL:
  *             raise MemoryError()             # <<<<<<<<<<<<<<
  *         tree.xmlAddPrevSibling(c_target, c_copy)
  *         c_sibling = c_sibling.next
  */
-      PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1023; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1024; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L7;
     }
     __pyx_L7:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1024
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1025
  *         if c_copy is NULL:
  *             raise MemoryError()
  *         tree.xmlAddPrevSibling(c_target, c_copy)             # <<<<<<<<<<<<<<
@@ -22041,7 +22056,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
  */
     xmlAddPrevSibling(__pyx_v_c_target, __pyx_v_c_copy);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1025
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1026
  *             raise MemoryError()
  *         tree.xmlAddPrevSibling(c_target, c_copy)
  *         c_sibling = c_sibling.next             # <<<<<<<<<<<<<<
@@ -22052,7 +22067,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
     __pyx_v_c_sibling = __pyx_t_5;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1026
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1027
  *         tree.xmlAddPrevSibling(c_target, c_copy)
  *         c_sibling = c_sibling.next
  *     while c_sibling.next != NULL and \             # <<<<<<<<<<<<<<
@@ -22063,7 +22078,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
     __pyx_t_2 = ((__pyx_v_c_sibling->next != NULL) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1027
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1028
  *         c_sibling = c_sibling.next
  *     while c_sibling.next != NULL and \
  *             (c_sibling.next.type == tree.XML_PI_NODE or \             # <<<<<<<<<<<<<<
@@ -22073,7 +22088,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
       __pyx_t_1 = ((__pyx_v_c_sibling->next->type == XML_PI_NODE) != 0);
       if (!__pyx_t_1) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1028
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1029
  *     while c_sibling.next != NULL and \
  *             (c_sibling.next.type == tree.XML_PI_NODE or \
  *                  c_sibling.next.type == tree.XML_COMMENT_NODE):             # <<<<<<<<<<<<<<
@@ -22091,7 +22106,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
     }
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1029
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1030
  *             (c_sibling.next.type == tree.XML_PI_NODE or \
  *                  c_sibling.next.type == tree.XML_COMMENT_NODE):
  *         c_sibling = c_sibling.next             # <<<<<<<<<<<<<<
@@ -22101,7 +22116,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
     __pyx_t_5 = __pyx_v_c_sibling->next;
     __pyx_v_c_sibling = __pyx_t_5;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1030
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1031
  *                  c_sibling.next.type == tree.XML_COMMENT_NODE):
  *         c_sibling = c_sibling.next
  *         c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1)             # <<<<<<<<<<<<<<
@@ -22110,7 +22125,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
  */
     __pyx_v_c_copy = xmlDocCopyNode(__pyx_v_c_sibling, __pyx_v_c_target->doc, 1);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1031
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1032
  *         c_sibling = c_sibling.next
  *         c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1)
  *         if c_copy is NULL:             # <<<<<<<<<<<<<<
@@ -22120,19 +22135,19 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
     __pyx_t_1 = ((__pyx_v_c_copy == NULL) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1032
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1033
  *         c_copy = tree.xmlDocCopyNode(c_sibling, c_target.doc, 1)
  *         if c_copy is NULL:
  *             raise MemoryError()             # <<<<<<<<<<<<<<
  *         tree.xmlAddNextSibling(c_target, c_copy)
  * 
  */
-      PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1032; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyErr_NoMemory(); {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1033; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L10;
     }
     __pyx_L10:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1033
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1034
  *         if c_copy is NULL:
  *             raise MemoryError()
  *         tree.xmlAddNextSibling(c_target, c_copy)             # <<<<<<<<<<<<<<
@@ -22152,7 +22167,7 @@ static int __pyx_f_4lxml_5etree__copyNonElementSiblings(xmlNode *__pyx_v_c_node,
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1035
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1036
  *         tree.xmlAddNextSibling(c_target, c_copy)
  * 
  * cdef int _deleteSlice(_Document doc, xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -22178,7 +22193,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_deleteSlice", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1043
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1044
  *     cdef Py_ssize_t c, i
  *     cdef _node_to_node_function next_element
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -22188,7 +22203,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
   __pyx_t_1 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1044
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1045
  *     cdef _node_to_node_function next_element
  *     if c_node is NULL:
  *         return 0             # <<<<<<<<<<<<<<
@@ -22201,7 +22216,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1045
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1046
  *     if c_node is NULL:
  *         return 0
  *     if step > 0:             # <<<<<<<<<<<<<<
@@ -22211,7 +22226,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
   __pyx_t_1 = ((__pyx_v_step > 0) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1046
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1047
  *         return 0
  *     if step > 0:
  *         next_element = _nextElement             # <<<<<<<<<<<<<<
@@ -22223,7 +22238,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1048
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1049
  *         next_element = _nextElement
  *     else:
  *         step = -step             # <<<<<<<<<<<<<<
@@ -22232,7 +22247,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
  */
     __pyx_v_step = (-__pyx_v_step);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1049
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1050
  *     else:
  *         step = -step
  *         next_element = _previousElement             # <<<<<<<<<<<<<<
@@ -22243,7 +22258,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1051
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1052
  *         next_element = _previousElement
  *     # now start deleting nodes
  *     c = 0             # <<<<<<<<<<<<<<
@@ -22252,7 +22267,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
  */
   __pyx_v_c = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1052
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1053
  *     # now start deleting nodes
  *     c = 0
  *     c_next = c_node             # <<<<<<<<<<<<<<
@@ -22261,7 +22276,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
  */
   __pyx_v_c_next = __pyx_v_c_node;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1053
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1054
  *     c = 0
  *     c_next = c_node
  *     while c_node is not NULL and c < count:             # <<<<<<<<<<<<<<
@@ -22278,7 +22293,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
     }
     if (!__pyx_t_3) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1054
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1055
  *     c_next = c_node
  *     while c_node is not NULL and c < count:
  *         for i in range(step):             # <<<<<<<<<<<<<<
@@ -22289,7 +22304,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
     for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
       __pyx_v_i = __pyx_t_5;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1055
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1056
  *     while c_node is not NULL and c < count:
  *         for i in range(step):
  *             c_next = next_element(c_next)             # <<<<<<<<<<<<<<
@@ -22299,16 +22314,16 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
       __pyx_v_c_next = __pyx_v_next_element(__pyx_v_c_next);
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1056
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1057
  *         for i in range(step):
  *             c_next = next_element(c_next)
  *         _removeNode(doc, c_node)             # <<<<<<<<<<<<<<
  *         c += 1
  *         c_node = c_next
  */
-    __pyx_t_6 = __pyx_f_4lxml_5etree__removeNode(__pyx_v_doc, __pyx_v_c_node); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1056; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __pyx_f_4lxml_5etree__removeNode(__pyx_v_doc, __pyx_v_c_node); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1057; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1057
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1058
  *             c_next = next_element(c_next)
  *         _removeNode(doc, c_node)
  *         c += 1             # <<<<<<<<<<<<<<
@@ -22317,7 +22332,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
  */
     __pyx_v_c = (__pyx_v_c + 1);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1058
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1059
  *         _removeNode(doc, c_node)
  *         c += 1
  *         c_node = c_next             # <<<<<<<<<<<<<<
@@ -22327,7 +22342,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
     __pyx_v_c_node = __pyx_v_c_next;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1059
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1060
  *         c += 1
  *         c_node = c_next
  *     return 0             # <<<<<<<<<<<<<<
@@ -22347,7 +22362,7 @@ static int __pyx_f_4lxml_5etree__deleteSlice(struct LxmlDocument *__pyx_v_doc, x
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1061
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1062
  *     return 0
  * 
  * cdef int _replaceSlice(_Element parent, xmlNode* c_node,             # <<<<<<<<<<<<<<
@@ -22385,7 +22400,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   __Pyx_RefNannySetupContext("_replaceSlice", 0);
   __Pyx_INCREF(__pyx_v_elements);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1076
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1077
  *     cdef Py_ssize_t seqlength, i, c
  *     cdef _node_to_node_function next_element
  *     assert step > 0             # <<<<<<<<<<<<<<
@@ -22395,11 +22410,11 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_step > 0) != 0))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1076; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1077; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1077
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1078
  *     cdef _node_to_node_function next_element
  *     assert step > 0
  *     if left_to_right:             # <<<<<<<<<<<<<<
@@ -22409,7 +22424,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   __pyx_t_1 = (__pyx_v_left_to_right != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1078
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1079
  *     assert step > 0
  *     if left_to_right:
  *         next_element = _nextElement             # <<<<<<<<<<<<<<
@@ -22421,7 +22436,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1080
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1081
  *         next_element = _nextElement
  *     else:
  *         next_element = _previousElement             # <<<<<<<<<<<<<<
@@ -22432,7 +22447,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1082
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1083
  *         next_element = _previousElement
  * 
  *     if not python.PyList_Check(elements) and \             # <<<<<<<<<<<<<<
@@ -22442,7 +22457,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   __pyx_t_1 = ((!(PyList_Check(__pyx_v_elements) != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1083
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1084
  * 
  *     if not python.PyList_Check(elements) and \
  *             not python.PyTuple_Check(elements):             # <<<<<<<<<<<<<<
@@ -22456,19 +22471,19 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1084
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1085
  *     if not python.PyList_Check(elements) and \
  *             not python.PyTuple_Check(elements):
  *         elements = list(elements)             # <<<<<<<<<<<<<<
  * 
  *     if step > 1:
  */
-    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1084; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1085; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__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))), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1084; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyList_Type))), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1085; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_elements, __pyx_t_5);
@@ -22477,7 +22492,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1086
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1087
  *         elements = list(elements)
  * 
  *     if step > 1:             # <<<<<<<<<<<<<<
@@ -22487,17 +22502,17 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   __pyx_t_3 = ((__pyx_v_step > 1) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1088
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1089
  *     if step > 1:
  *         # *replacing* children stepwise with list => check size!
  *         seqlength = len(elements)             # <<<<<<<<<<<<<<
  *         if seqlength != slicelength:
  *             raise ValueError, u"attempt to assign sequence of size %d " \
  */
-    __pyx_t_6 = PyObject_Length(__pyx_v_elements); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1088; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_Length(__pyx_v_elements); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1089; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_seqlength = __pyx_t_6;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1089
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1090
  *         # *replacing* children stepwise with list => check size!
  *         seqlength = len(elements)
  *         if seqlength != slicelength:             # <<<<<<<<<<<<<<
@@ -22507,18 +22522,18 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
     __pyx_t_3 = ((__pyx_v_seqlength != __pyx_v_slicelength) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1091
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1092
  *         if seqlength != slicelength:
  *             raise ValueError, u"attempt to assign sequence of size %d " \
  *                 u"to extended slice of size %d" % (seqlength, slicelength)             # <<<<<<<<<<<<<<
  * 
  *     if c_node is NULL:
  */
-      __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_seqlength); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1091; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_seqlength); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1092; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_slicelength); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1091; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_slicelength); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1092; __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 = 1091; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1092; __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);
@@ -22526,12 +22541,12 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __Pyx_GIVEREF(__pyx_t_4);
       __pyx_t_5 = 0;
       __pyx_t_4 = 0;
-      __pyx_t_4 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_27), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1091; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyNumber_Remainder(((PyObject *)__pyx_kp_u_27), ((PyObject *)__pyx_t_7)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1092; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(((PyObject *)__pyx_t_4));
       __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
       __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_4), 0, 0);
       __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1090; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1091; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L6;
     }
     __pyx_L6:;
@@ -22539,7 +22554,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1093
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1094
  *                 u"to extended slice of size %d" % (seqlength, slicelength)
  * 
  *     if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -22549,7 +22564,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   __pyx_t_3 = ((__pyx_v_c_node == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1095
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1096
  *     if c_node is NULL:
  *         # no children yet => add all elements straight away
  *         if left_to_right:             # <<<<<<<<<<<<<<
@@ -22559,7 +22574,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
     __pyx_t_3 = (__pyx_v_left_to_right != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1096
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1097
  *         # no children yet => add all elements straight away
  *         if left_to_right:
  *             for element in elements:             # <<<<<<<<<<<<<<
@@ -22570,7 +22585,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
         __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_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_4);
         __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext;
       }
@@ -22578,33 +22593,33 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
         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_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1096; __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 = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #else
-          __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 = 1096; __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 = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #endif
         } 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_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1096; __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 = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #else
-          __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 = 1096; __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 = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #endif
         } else {
           __pyx_t_7 = __pyx_t_8(__pyx_t_4);
           if (unlikely(!__pyx_t_7)) {
             if (PyErr_Occurred()) {
               if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-              else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             break;
           }
           __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[4]; __pyx_lineno = 1096; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_4lxml_5etree__Element))))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_XDECREF_SET(__pyx_v_element, ((struct LxmlElement *)__pyx_t_7));
         __pyx_t_7 = 0;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1097
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1098
  *         if left_to_right:
  *             for element in elements:
  *                 assert element is not None, u"Node must not be None"             # <<<<<<<<<<<<<<
@@ -22615,25 +22630,25 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
         __pyx_t_3 = (((PyObject *)__pyx_v_element) != Py_None);
         if (unlikely(!(__pyx_t_3 != 0))) {
           PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_u_28));
-          {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1097; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         #endif
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1098
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1099
  *             for element in elements:
  *                 assert element is not None, u"Node must not be None"
  *                 _appendChild(parent, element)             # <<<<<<<<<<<<<<
  *         else:
  *             for element in elements:
  */
-        __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 = 1098; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __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 = 1099; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       goto __pyx_L8;
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1100
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1101
  *                 _appendChild(parent, element)
  *         else:
  *             for element in elements:             # <<<<<<<<<<<<<<
@@ -22644,7 +22659,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
         __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_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_4);
         __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext;
       }
@@ -22652,33 +22667,33 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
         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_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1100; __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 = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #else
-          __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 = 1100; __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 = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #endif
         } 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_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1100; __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 = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #else
-          __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 = 1100; __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 = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           #endif
         } else {
           __pyx_t_7 = __pyx_t_8(__pyx_t_4);
           if (unlikely(!__pyx_t_7)) {
             if (PyErr_Occurred()) {
               if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-              else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+              else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
             }
             break;
           }
           __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[4]; __pyx_lineno = 1100; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_4lxml_5etree__Element))))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_XDECREF_SET(__pyx_v_element, ((struct LxmlElement *)__pyx_t_7));
         __pyx_t_7 = 0;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1101
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1102
  *         else:
  *             for element in elements:
  *                 assert element is not None, u"Node must not be None"             # <<<<<<<<<<<<<<
@@ -22689,24 +22704,24 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
         __pyx_t_3 = (((PyObject *)__pyx_v_element) != Py_None);
         if (unlikely(!(__pyx_t_3 != 0))) {
           PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_u_28));
-          {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1101; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         #endif
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1102
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1103
  *             for element in elements:
  *                 assert element is not None, u"Node must not be None"
  *                 _prependChild(parent, element)             # <<<<<<<<<<<<<<
  *         return 0
  * 
  */
-        __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 = 1102; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __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 = 1103; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     }
     __pyx_L8:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1103
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1104
  *                 assert element is not None, u"Node must not be None"
  *                 _prependChild(parent, element)
  *         return 0             # <<<<<<<<<<<<<<
@@ -22719,7 +22734,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   }
   __pyx_L7:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1106
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1107
  * 
  *     # remove the elements first as some might be re-added
  *     if left_to_right:             # <<<<<<<<<<<<<<
@@ -22729,7 +22744,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   __pyx_t_3 = (__pyx_v_left_to_right != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1108
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1109
  *     if left_to_right:
  *         # L->R, remember left neighbour
  *         c_orig_neighbour = _previousElement(c_node)             # <<<<<<<<<<<<<<
@@ -22741,7 +22756,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1111
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1112
  *     else:
  *         # R->L, remember right neighbour
  *         c_orig_neighbour = _nextElement(c_node)             # <<<<<<<<<<<<<<
@@ -22752,7 +22767,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   }
   __pyx_L13:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1117
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1118
  *     # safe to let _removeNode() try (and fail) to free them even if
  *     # the element itself or one of its descendents will be reinserted.
  *     c = 0             # <<<<<<<<<<<<<<
@@ -22761,7 +22776,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
   __pyx_v_c = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1118
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1119
  *     # the element itself or one of its descendents will be reinserted.
  *     c = 0
  *     c_next = c_node             # <<<<<<<<<<<<<<
@@ -22770,7 +22785,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
   __pyx_v_c_next = __pyx_v_c_node;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1119
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1120
  *     c = 0
  *     c_next = c_node
  *     while c_node is not NULL and c < slicelength:             # <<<<<<<<<<<<<<
@@ -22787,7 +22802,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
     }
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1120
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1121
  *     c_next = c_node
  *     while c_node is not NULL and c < slicelength:
  *         for i in range(step):             # <<<<<<<<<<<<<<
@@ -22798,7 +22813,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
     for (__pyx_t_10 = 0; __pyx_t_10 < __pyx_t_6; __pyx_t_10+=1) {
       __pyx_v_i = __pyx_t_10;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1121
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1122
  *     while c_node is not NULL and c < slicelength:
  *         for i in range(step):
  *             c_next = next_element(c_next)             # <<<<<<<<<<<<<<
@@ -22808,7 +22823,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __pyx_v_c_next = __pyx_v_next_element(__pyx_v_c_next);
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1122
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1123
  *         for i in range(step):
  *             c_next = next_element(c_next)
  *         _removeNode(parent._doc, c_node)             # <<<<<<<<<<<<<<
@@ -22817,10 +22832,10 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
     __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 = 1122; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __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 = 1123; __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":1123
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1124
  *             c_next = next_element(c_next)
  *         _removeNode(parent._doc, c_node)
  *         c += 1             # <<<<<<<<<<<<<<
@@ -22829,7 +22844,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
     __pyx_v_c = (__pyx_v_c + 1);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1124
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1125
  *         _removeNode(parent._doc, c_node)
  *         c += 1
  *         c_node = c_next             # <<<<<<<<<<<<<<
@@ -22839,19 +22854,19 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
     __pyx_v_c_node = __pyx_v_c_next;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1127
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1128
  * 
  *     # make sure each element is inserted only once
  *     elements = iter(elements)             # <<<<<<<<<<<<<<
  * 
  *     # find the first node right of the new insertion point
  */
-  __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1127; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1128; __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":1130
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1131
  * 
  *     # find the first node right of the new insertion point
  *     if left_to_right:             # <<<<<<<<<<<<<<
@@ -22861,7 +22876,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   __pyx_t_2 = (__pyx_v_left_to_right != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1131
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1132
  *     # find the first node right of the new insertion point
  *     if left_to_right:
  *         if c_orig_neighbour is not NULL:             # <<<<<<<<<<<<<<
@@ -22871,7 +22886,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
     __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":1132
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1133
  *     if left_to_right:
  *         if c_orig_neighbour is not NULL:
  *             c_node = next_element(c_orig_neighbour)             # <<<<<<<<<<<<<<
@@ -22883,7 +22898,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1135
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1136
  *         else:
  *             # before the first element
  *             c_node = _findChildForwards(parent._c_node, 0)             # <<<<<<<<<<<<<<
@@ -22896,7 +22911,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
     goto __pyx_L18;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1136
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1137
  *             # before the first element
  *             c_node = _findChildForwards(parent._c_node, 0)
  *     elif c_orig_neighbour is NULL:             # <<<<<<<<<<<<<<
@@ -22906,7 +22921,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   __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":1139
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1140
  *         # at the end, but reversed stepping
  *         # append one element and go to the next insertion point
  *         for element in elements:             # <<<<<<<<<<<<<<
@@ -22917,7 +22932,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __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_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext;
     }
@@ -22925,33 +22940,33 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       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_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1139; __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 = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __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 = 1139; __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 = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } 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_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1139; __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 = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __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 = 1139; __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 = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else {
         __pyx_t_7 = __pyx_t_8(__pyx_t_4);
         if (unlikely(!__pyx_t_7)) {
           if (PyErr_Occurred()) {
             if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-            else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           break;
         }
         __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[4]; __pyx_lineno = 1139; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_4lxml_5etree__Element))))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_v_element = ((struct LxmlElement *)__pyx_t_7);
       __pyx_t_7 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1140
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1141
  *         # append one element and go to the next insertion point
  *         for element in elements:
  *             assert element is not None, u"Node must not be None"             # <<<<<<<<<<<<<<
@@ -22962,20 +22977,20 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
       if (unlikely(!(__pyx_t_2 != 0))) {
         PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_u_28));
-        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1140; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       #endif
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1141
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1142
  *         for element in elements:
  *             assert element is not None, u"Node must not be None"
  *             _appendChild(parent, element)             # <<<<<<<<<<<<<<
  *             c_node = element._c_node
  *             if slicelength > 0:
  */
-      __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 = 1141; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __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 = 1142; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1142
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1143
  *             assert element is not None, u"Node must not be None"
  *             _appendChild(parent, element)
  *             c_node = element._c_node             # <<<<<<<<<<<<<<
@@ -22985,7 +23000,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __pyx_t_11 = __pyx_v_element->_c_node;
       __pyx_v_c_node = __pyx_t_11;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1143
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1144
  *             _appendChild(parent, element)
  *             c_node = element._c_node
  *             if slicelength > 0:             # <<<<<<<<<<<<<<
@@ -22995,7 +23010,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __pyx_t_2 = ((__pyx_v_slicelength > 0) != 0);
       if (__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1144
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1145
  *             c_node = element._c_node
  *             if slicelength > 0:
  *                 slicelength -= 1             # <<<<<<<<<<<<<<
@@ -23004,7 +23019,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
         __pyx_v_slicelength = (__pyx_v_slicelength - 1);
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1145
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1146
  *             if slicelength > 0:
  *                 slicelength -= 1
  *                 for i in range(1, step):             # <<<<<<<<<<<<<<
@@ -23015,7 +23030,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
         for (__pyx_t_12 = 1; __pyx_t_12 < __pyx_t_10; __pyx_t_12+=1) {
           __pyx_v_i = __pyx_t_12;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1146
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1147
  *                 slicelength -= 1
  *                 for i in range(1, step):
  *                     c_node = next_element(c_node)             # <<<<<<<<<<<<<<
@@ -23028,7 +23043,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       }
       __pyx_L22:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1147
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1148
  *                 for i in range(1, step):
  *                     c_node = next_element(c_node)
  *             break             # <<<<<<<<<<<<<<
@@ -23043,7 +23058,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   }
   __pyx_L18:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1149
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1150
  *             break
  * 
  *     if left_to_right:             # <<<<<<<<<<<<<<
@@ -23053,7 +23068,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   __pyx_t_2 = (__pyx_v_left_to_right != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1152
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1153
  *         # adjust step size after removing slice as we are not stepping
  *         # over the newly inserted elements
  *         step -= 1             # <<<<<<<<<<<<<<
@@ -23065,7 +23080,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   }
   __pyx_L25:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1155
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1156
  * 
  *     # now insert elements where we removed them
  *     if c_node is not NULL:             # <<<<<<<<<<<<<<
@@ -23075,7 +23090,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   __pyx_t_2 = ((__pyx_v_c_node != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1156
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1157
  *     # now insert elements where we removed them
  *     if c_node is not NULL:
  *         for element in elements:             # <<<<<<<<<<<<<<
@@ -23086,7 +23101,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __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_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext;
     }
@@ -23094,33 +23109,33 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       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_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1156; __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 = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __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 = 1156; __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 = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } 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_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1156; __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 = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __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 = 1156; __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 = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else {
         __pyx_t_7 = __pyx_t_8(__pyx_t_4);
         if (unlikely(!__pyx_t_7)) {
           if (PyErr_Occurred()) {
             if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-            else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           break;
         }
         __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[4]; __pyx_lineno = 1156; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_4lxml_5etree__Element))))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_XDECREF_SET(__pyx_v_element, ((struct LxmlElement *)__pyx_t_7));
       __pyx_t_7 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1157
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1158
  *     if c_node is not NULL:
  *         for element in elements:
  *             assert element is not None, u"Node must not be None"             # <<<<<<<<<<<<<<
@@ -23131,20 +23146,20 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
       if (unlikely(!(__pyx_t_2 != 0))) {
         PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_u_28));
-        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1157; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       #endif
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1158
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1159
  *         for element in elements:
  *             assert element is not None, u"Node must not be None"
  *             _assertValidNode(element)             # <<<<<<<<<<<<<<
  *             # move element and tail over
  *             c_source_doc = element._c_node.doc
  */
-      __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1158; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1159; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1160
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1161
  *             _assertValidNode(element)
  *             # move element and tail over
  *             c_source_doc = element._c_node.doc             # <<<<<<<<<<<<<<
@@ -23154,7 +23169,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __pyx_t_13 = __pyx_v_element->_c_node->doc;
       __pyx_v_c_source_doc = __pyx_t_13;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1161
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1162
  *             # move element and tail over
  *             c_source_doc = element._c_node.doc
  *             c_next = element._c_node.next             # <<<<<<<<<<<<<<
@@ -23164,7 +23179,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __pyx_t_11 = __pyx_v_element->_c_node->next;
       __pyx_v_c_next = __pyx_t_11;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1162
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1163
  *             c_source_doc = element._c_node.doc
  *             c_next = element._c_node.next
  *             tree.xmlAddPrevSibling(c_node, element._c_node)             # <<<<<<<<<<<<<<
@@ -23173,7 +23188,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
       xmlAddPrevSibling(__pyx_v_c_node, __pyx_v_element->_c_node);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1163
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1164
  *             c_next = element._c_node.next
  *             tree.xmlAddPrevSibling(c_node, element._c_node)
  *             _moveTail(c_next, element._c_node)             # <<<<<<<<<<<<<<
@@ -23182,7 +23197,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
       __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_element->_c_node);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1166
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1167
  * 
  *             # integrate element into new document
  *             moveNodeToDocument(parent._doc, c_source_doc, element._c_node)             # <<<<<<<<<<<<<<
@@ -23191,10 +23206,10 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
       __pyx_t_7 = ((PyObject *)__pyx_v_parent->_doc);
       __Pyx_INCREF(__pyx_t_7);
-      __pyx_t_9 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_7), __pyx_v_c_source_doc, __pyx_v_element->_c_node); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1166; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_7), __pyx_v_c_source_doc, __pyx_v_element->_c_node); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1167; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1169
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1170
  * 
  *             # stop at the end of the slice
  *             if slicelength > 0:             # <<<<<<<<<<<<<<
@@ -23204,7 +23219,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __pyx_t_2 = ((__pyx_v_slicelength > 0) != 0);
       if (__pyx_t_2) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1170
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1171
  *             # stop at the end of the slice
  *             if slicelength > 0:
  *                 slicelength = slicelength - 1             # <<<<<<<<<<<<<<
@@ -23213,7 +23228,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
  */
         __pyx_v_slicelength = (__pyx_v_slicelength - 1);
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1171
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1172
  *             if slicelength > 0:
  *                 slicelength = slicelength - 1
  *                 for i in range(step):             # <<<<<<<<<<<<<<
@@ -23224,7 +23239,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
         for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_10; __pyx_t_12+=1) {
           __pyx_v_i = __pyx_t_12;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1172
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1173
  *                 slicelength = slicelength - 1
  *                 for i in range(step):
  *                     c_node = next_element(c_node)             # <<<<<<<<<<<<<<
@@ -23234,7 +23249,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
           __pyx_v_c_node = __pyx_v_next_element(__pyx_v_c_node);
         }
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1173
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1174
  *                 for i in range(step):
  *                     c_node = next_element(c_node)
  *                 if c_node is NULL:             # <<<<<<<<<<<<<<
@@ -23244,7 +23259,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
         __pyx_t_2 = ((__pyx_v_c_node == NULL) != 0);
         if (__pyx_t_2) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1174
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1175
  *                     c_node = next_element(c_node)
  *                 if c_node is NULL:
  *                     break             # <<<<<<<<<<<<<<
@@ -23261,7 +23276,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1177
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1178
  *         else:
  *             # everything inserted
  *             return 0             # <<<<<<<<<<<<<<
@@ -23278,7 +23293,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   }
   __pyx_L26:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1180
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1181
  * 
  *     # append the remaining elements at the respective end
  *     if left_to_right:             # <<<<<<<<<<<<<<
@@ -23288,7 +23303,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   __pyx_t_2 = (__pyx_v_left_to_right != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1181
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1182
  *     # append the remaining elements at the respective end
  *     if left_to_right:
  *         for element in elements:             # <<<<<<<<<<<<<<
@@ -23299,7 +23314,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __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_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext;
     }
@@ -23307,33 +23322,33 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       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_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1181; __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 = 1182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __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 = 1181; __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 = 1182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } 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_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_7); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1181; __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 = 1182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __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 = 1181; __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 = 1182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else {
         __pyx_t_7 = __pyx_t_8(__pyx_t_4);
         if (unlikely(!__pyx_t_7)) {
           if (PyErr_Occurred()) {
             if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-            else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           break;
         }
         __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[4]; __pyx_lineno = 1181; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_4lxml_5etree__Element))))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_XDECREF_SET(__pyx_v_element, ((struct LxmlElement *)__pyx_t_7));
       __pyx_t_7 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1182
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1183
  *     if left_to_right:
  *         for element in elements:
  *             assert element is not None, u"Node must not be None"             # <<<<<<<<<<<<<<
@@ -23344,34 +23359,34 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
       if (unlikely(!(__pyx_t_2 != 0))) {
         PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_u_28));
-        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1182; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       #endif
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1183
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1184
  *         for element in elements:
  *             assert element is not None, u"Node must not be None"
  *             _assertValidNode(element)             # <<<<<<<<<<<<<<
  *             _appendChild(parent, element)
  *     else:
  */
-      __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1183; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1184
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1185
  *             assert element is not None, u"Node must not be None"
  *             _assertValidNode(element)
  *             _appendChild(parent, element)             # <<<<<<<<<<<<<<
  *     else:
  *         for element in elements:
  */
-      __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 = 1184; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __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 = 1185; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L34;
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1186
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1187
  *             _appendChild(parent, element)
  *     else:
  *         for element in elements:             # <<<<<<<<<<<<<<
@@ -23382,7 +23397,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __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_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_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_elements); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_8 = Py_TYPE(__pyx_t_4)->tp_iternext;
     }
@@ -23390,33 +23405,33 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       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_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;}
+        __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 = 1187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __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;}
+        __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 = 1187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } 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_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;}
+        __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 = 1187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __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;}
+        __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 = 1187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else {
         __pyx_t_7 = __pyx_t_8(__pyx_t_4);
         if (unlikely(!__pyx_t_7)) {
           if (PyErr_Occurred()) {
             if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-            else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            else {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           break;
         }
         __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[4]; __pyx_lineno = 1186; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(((__pyx_t_7) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_4lxml_5etree__Element))))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_XDECREF_SET(__pyx_v_element, ((struct LxmlElement *)__pyx_t_7));
       __pyx_t_7 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1187
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1188
  *     else:
  *         for element in elements:
  *             assert element is not None, u"Node must not be None"             # <<<<<<<<<<<<<<
@@ -23427,33 +23442,33 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
       __pyx_t_2 = (((PyObject *)__pyx_v_element) != Py_None);
       if (unlikely(!(__pyx_t_2 != 0))) {
         PyErr_SetObject(PyExc_AssertionError, ((PyObject *)__pyx_kp_u_28));
-        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1187; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       #endif
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1188
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1189
  *         for element in elements:
  *             assert element is not None, u"Node must not be None"
  *             _assertValidNode(element)             # <<<<<<<<<<<<<<
  *             _prependChild(parent, element)
  * 
  */
-      __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1188; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = __pyx_f_4lxml_5etree__assertValidNode(__pyx_v_element); if (unlikely(__pyx_t_9 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1189
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1190
  *             assert element is not None, u"Node must not be None"
  *             _assertValidNode(element)
  *             _prependChild(parent, element)             # <<<<<<<<<<<<<<
  * 
  *     return 0
  */
-      __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 = 1189; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __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 = 1190; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
   __pyx_L34:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1191
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1192
  *             _prependChild(parent, element)
  * 
  *     return 0             # <<<<<<<<<<<<<<
@@ -23478,7 +23493,7 @@ static int __pyx_f_4lxml_5etree__replaceSlice(struct LxmlElement *__pyx_v_parent
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1193
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1194
  *     return 0
  * 
  * cdef int _appendChild(_Element parent, _Element child) except -1:             # <<<<<<<<<<<<<<
@@ -23503,7 +23518,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_appendChild", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1196
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1197
  *     u"""Append a new child to a parent element.
  *     """
  *     c_node = child._c_node             # <<<<<<<<<<<<<<
@@ -23513,7 +23528,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
   __pyx_t_1 = __pyx_v_child->_c_node;
   __pyx_v_c_node = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1197
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1198
  *     """
  *     c_node = child._c_node
  *     c_source_doc = c_node.doc             # <<<<<<<<<<<<<<
@@ -23523,7 +23538,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
   __pyx_t_2 = __pyx_v_c_node->doc;
   __pyx_v_c_source_doc = __pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1199
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1200
  *     c_source_doc = c_node.doc
  *     # prevent cycles
  *     c_parent = parent._c_node             # <<<<<<<<<<<<<<
@@ -23533,7 +23548,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
   __pyx_t_1 = __pyx_v_parent->_c_node;
   __pyx_v_c_parent = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1200
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1201
  *     # prevent cycles
  *     c_parent = parent._c_node
  *     while c_parent:             # <<<<<<<<<<<<<<
@@ -23544,7 +23559,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
     __pyx_t_3 = (__pyx_v_c_parent != 0);
     if (!__pyx_t_3) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1201
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1202
  *     c_parent = parent._c_node
  *     while c_parent:
  *         if c_parent is c_node:             # <<<<<<<<<<<<<<
@@ -23554,23 +23569,23 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
     __pyx_t_3 = ((__pyx_v_c_parent == __pyx_v_c_node) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1202
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1203
  *     while c_parent:
  *         if c_parent is c_node:
  *             raise ValueError("cannot append parent to itself")             # <<<<<<<<<<<<<<
  *         c_parent = c_parent.parent
  *     # store possible text node
  */
-      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_30), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_30), NULL); 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_Raise(__pyx_t_4, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L5;
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1203
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1204
  *         if c_parent is c_node:
  *             raise ValueError("cannot append parent to itself")
  *         c_parent = c_parent.parent             # <<<<<<<<<<<<<<
@@ -23581,7 +23596,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
     __pyx_v_c_parent = __pyx_t_1;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1205
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1206
  *         c_parent = c_parent.parent
  *     # store possible text node
  *     c_next = c_node.next             # <<<<<<<<<<<<<<
@@ -23591,7 +23606,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
   __pyx_t_1 = __pyx_v_c_node->next;
   __pyx_v_c_next = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1207
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1208
  *     c_next = c_node.next
  *     # move node itself
  *     tree.xmlUnlinkNode(c_node)             # <<<<<<<<<<<<<<
@@ -23600,7 +23615,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
  */
   xmlUnlinkNode(__pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1208
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1209
  *     # move node itself
  *     tree.xmlUnlinkNode(c_node)
  *     tree.xmlAddChild(parent._c_node, c_node)             # <<<<<<<<<<<<<<
@@ -23609,7 +23624,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
  */
   xmlAddChild(__pyx_v_parent->_c_node, __pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1209
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1210
  *     tree.xmlUnlinkNode(c_node)
  *     tree.xmlAddChild(parent._c_node, c_node)
  *     _moveTail(c_next, c_node)             # <<<<<<<<<<<<<<
@@ -23618,7 +23633,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
  */
   __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1212
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1213
  *     # uh oh, elements may be pointing to different doc when
  *     # parent element has moved; change them too..
  *     moveNodeToDocument(parent._doc, c_source_doc, c_node)             # <<<<<<<<<<<<<<
@@ -23627,7 +23642,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
  */
   __pyx_t_4 = ((PyObject *)__pyx_v_parent->_doc);
   __Pyx_INCREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1212; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1213; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   __pyx_r = 0;
@@ -23641,7 +23656,7 @@ static int __pyx_f_4lxml_5etree__appendChild(struct LxmlElement *__pyx_v_parent,
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1214
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1215
  *     moveNodeToDocument(parent._doc, c_source_doc, c_node)
  * 
  * cdef int _prependChild(_Element parent, _Element child) except -1:             # <<<<<<<<<<<<<<
@@ -23667,7 +23682,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_prependChild", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1217
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1218
  *     u"""Prepend a new child to a parent element.
  *     """
  *     c_node = child._c_node             # <<<<<<<<<<<<<<
@@ -23677,7 +23692,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
   __pyx_t_1 = __pyx_v_child->_c_node;
   __pyx_v_c_node = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1218
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1219
  *     """
  *     c_node = child._c_node
  *     c_source_doc = c_node.doc             # <<<<<<<<<<<<<<
@@ -23687,7 +23702,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
   __pyx_t_2 = __pyx_v_c_node->doc;
   __pyx_v_c_source_doc = __pyx_t_2;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1220
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1221
  *     c_source_doc = c_node.doc
  *     # prevent cycles
  *     c_parent = parent._c_node             # <<<<<<<<<<<<<<
@@ -23697,7 +23712,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
   __pyx_t_1 = __pyx_v_parent->_c_node;
   __pyx_v_c_parent = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1221
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1222
  *     # prevent cycles
  *     c_parent = parent._c_node
  *     while c_parent:             # <<<<<<<<<<<<<<
@@ -23708,7 +23723,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
     __pyx_t_3 = (__pyx_v_c_parent != 0);
     if (!__pyx_t_3) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1222
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1223
  *     c_parent = parent._c_node
  *     while c_parent:
  *         if c_parent is c_node:             # <<<<<<<<<<<<<<
@@ -23718,23 +23733,23 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
     __pyx_t_3 = ((__pyx_v_c_parent == __pyx_v_c_node) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1223
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1224
  *     while c_parent:
  *         if c_parent is c_node:
  *             raise ValueError("cannot append parent to itself")             # <<<<<<<<<<<<<<
  *         c_parent = c_parent.parent
  *     # store possible text node
  */
-      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_31), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_31), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1224; __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[4]; __pyx_lineno = 1223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L5;
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1224
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1225
  *         if c_parent is c_node:
  *             raise ValueError("cannot append parent to itself")
  *         c_parent = c_parent.parent             # <<<<<<<<<<<<<<
@@ -23745,7 +23760,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
     __pyx_v_c_parent = __pyx_t_1;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1226
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1227
  *         c_parent = c_parent.parent
  *     # store possible text node
  *     c_next = c_node.next             # <<<<<<<<<<<<<<
@@ -23755,7 +23770,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
   __pyx_t_1 = __pyx_v_c_node->next;
   __pyx_v_c_next = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1228
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1229
  *     c_next = c_node.next
  *     # move node itself
  *     c_child = _findChildForwards(parent._c_node, 0)             # <<<<<<<<<<<<<<
@@ -23764,7 +23779,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
  */
   __pyx_v_c_child = __pyx_f_4lxml_5etree__findChildForwards(__pyx_v_parent->_c_node, 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1229
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1230
  *     # move node itself
  *     c_child = _findChildForwards(parent._c_node, 0)
  *     if c_child is NULL:             # <<<<<<<<<<<<<<
@@ -23774,7 +23789,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
   __pyx_t_3 = ((__pyx_v_c_child == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1230
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1231
  *     c_child = _findChildForwards(parent._c_node, 0)
  *     if c_child is NULL:
  *         tree.xmlUnlinkNode(c_node)             # <<<<<<<<<<<<<<
@@ -23783,7 +23798,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
  */
     xmlUnlinkNode(__pyx_v_c_node);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1231
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1232
  *     if c_child is NULL:
  *         tree.xmlUnlinkNode(c_node)
  *         tree.xmlAddChild(parent._c_node, c_node)             # <<<<<<<<<<<<<<
@@ -23795,7 +23810,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1233
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1234
  *         tree.xmlAddChild(parent._c_node, c_node)
  *     else:
  *         tree.xmlAddPrevSibling(c_child, c_node)             # <<<<<<<<<<<<<<
@@ -23806,7 +23821,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
   }
   __pyx_L6:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1234
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1235
  *     else:
  *         tree.xmlAddPrevSibling(c_child, c_node)
  *     _moveTail(c_next, c_node)             # <<<<<<<<<<<<<<
@@ -23815,7 +23830,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
  */
   __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1237
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1238
  *     # uh oh, elements may be pointing to different doc when
  *     # parent element has moved; change them too..
  *     moveNodeToDocument(parent._doc, c_source_doc, c_node)             # <<<<<<<<<<<<<<
@@ -23824,7 +23839,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
  */
   __pyx_t_4 = ((PyObject *)__pyx_v_parent->_doc);
   __Pyx_INCREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1237; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1238; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   __pyx_r = 0;
@@ -23838,7 +23853,7 @@ static int __pyx_f_4lxml_5etree__prependChild(struct LxmlElement *__pyx_v_parent
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1239
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1240
  *     moveNodeToDocument(parent._doc, c_source_doc, c_node)
  * 
  * cdef int _appendSibling(_Element element, _Element sibling) except -1:             # <<<<<<<<<<<<<<
@@ -23862,7 +23877,7 @@ static int __pyx_f_4lxml_5etree__appendSibling(struct LxmlElement *__pyx_v_eleme
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_appendSibling", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1242
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1243
  *     u"""Add a new sibling behind an element.
  *     """
  *     c_node = sibling._c_node             # <<<<<<<<<<<<<<
@@ -23872,7 +23887,7 @@ static int __pyx_f_4lxml_5etree__appendSibling(struct LxmlElement *__pyx_v_eleme
   __pyx_t_1 = __pyx_v_sibling->_c_node;
   __pyx_v_c_node = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1243
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1244
  *     """
  *     c_node = sibling._c_node
  *     if element._c_node is c_node:             # <<<<<<<<<<<<<<
@@ -23882,7 +23897,7 @@ static int __pyx_f_4lxml_5etree__appendSibling(struct LxmlElement *__pyx_v_eleme
   __pyx_t_2 = ((__pyx_v_element->_c_node == __pyx_v_c_node) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1244
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1245
  *     c_node = sibling._c_node
  *     if element._c_node is c_node:
  *         return 0  # nothing to do             # <<<<<<<<<<<<<<
@@ -23895,7 +23910,7 @@ static int __pyx_f_4lxml_5etree__appendSibling(struct LxmlElement *__pyx_v_eleme
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1245
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1246
  *     if element._c_node is c_node:
  *         return 0  # nothing to do
  *     c_source_doc = c_node.doc             # <<<<<<<<<<<<<<
@@ -23905,7 +23920,7 @@ static int __pyx_f_4lxml_5etree__appendSibling(struct LxmlElement *__pyx_v_eleme
   __pyx_t_3 = __pyx_v_c_node->doc;
   __pyx_v_c_source_doc = __pyx_t_3;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1247
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1248
  *     c_source_doc = c_node.doc
  *     # store possible text node
  *     c_next = c_node.next             # <<<<<<<<<<<<<<
@@ -23915,7 +23930,7 @@ static int __pyx_f_4lxml_5etree__appendSibling(struct LxmlElement *__pyx_v_eleme
   __pyx_t_1 = __pyx_v_c_node->next;
   __pyx_v_c_next = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1249
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1250
  *     c_next = c_node.next
  *     # move node itself
  *     tree.xmlAddNextSibling(element._c_node, c_node)             # <<<<<<<<<<<<<<
@@ -23924,7 +23939,7 @@ static int __pyx_f_4lxml_5etree__appendSibling(struct LxmlElement *__pyx_v_eleme
  */
   xmlAddNextSibling(__pyx_v_element->_c_node, __pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1250
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1251
  *     # move node itself
  *     tree.xmlAddNextSibling(element._c_node, c_node)
  *     _moveTail(c_next, c_node)             # <<<<<<<<<<<<<<
@@ -23933,7 +23948,7 @@ static int __pyx_f_4lxml_5etree__appendSibling(struct LxmlElement *__pyx_v_eleme
  */
   __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1253
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1254
  *     # uh oh, elements may be pointing to different doc when
  *     # parent element has moved; change them too..
  *     moveNodeToDocument(element._doc, c_source_doc, c_node)             # <<<<<<<<<<<<<<
@@ -23942,7 +23957,7 @@ static int __pyx_f_4lxml_5etree__appendSibling(struct LxmlElement *__pyx_v_eleme
  */
   __pyx_t_4 = ((PyObject *)__pyx_v_element->_doc);
   __Pyx_INCREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1253; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1254; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   __pyx_r = 0;
@@ -23956,7 +23971,7 @@ static int __pyx_f_4lxml_5etree__appendSibling(struct LxmlElement *__pyx_v_eleme
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1255
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1256
  *     moveNodeToDocument(element._doc, c_source_doc, c_node)
  * 
  * cdef int _prependSibling(_Element element, _Element sibling) except -1:             # <<<<<<<<<<<<<<
@@ -23980,7 +23995,7 @@ static int __pyx_f_4lxml_5etree__prependSibling(struct LxmlElement *__pyx_v_elem
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_prependSibling", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1258
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1259
  *     u"""Add a new sibling before an element.
  *     """
  *     c_node = sibling._c_node             # <<<<<<<<<<<<<<
@@ -23990,7 +24005,7 @@ static int __pyx_f_4lxml_5etree__prependSibling(struct LxmlElement *__pyx_v_elem
   __pyx_t_1 = __pyx_v_sibling->_c_node;
   __pyx_v_c_node = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1259
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1260
  *     """
  *     c_node = sibling._c_node
  *     if element._c_node is c_node:             # <<<<<<<<<<<<<<
@@ -24000,7 +24015,7 @@ static int __pyx_f_4lxml_5etree__prependSibling(struct LxmlElement *__pyx_v_elem
   __pyx_t_2 = ((__pyx_v_element->_c_node == __pyx_v_c_node) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1260
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1261
  *     c_node = sibling._c_node
  *     if element._c_node is c_node:
  *         return 0  # nothing to do             # <<<<<<<<<<<<<<
@@ -24013,7 +24028,7 @@ static int __pyx_f_4lxml_5etree__prependSibling(struct LxmlElement *__pyx_v_elem
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1261
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1262
  *     if element._c_node is c_node:
  *         return 0  # nothing to do
  *     c_source_doc = c_node.doc             # <<<<<<<<<<<<<<
@@ -24023,7 +24038,7 @@ static int __pyx_f_4lxml_5etree__prependSibling(struct LxmlElement *__pyx_v_elem
   __pyx_t_3 = __pyx_v_c_node->doc;
   __pyx_v_c_source_doc = __pyx_t_3;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1263
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1264
  *     c_source_doc = c_node.doc
  *     # store possible text node
  *     c_next = c_node.next             # <<<<<<<<<<<<<<
@@ -24033,7 +24048,7 @@ static int __pyx_f_4lxml_5etree__prependSibling(struct LxmlElement *__pyx_v_elem
   __pyx_t_1 = __pyx_v_c_node->next;
   __pyx_v_c_next = __pyx_t_1;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1265
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1266
  *     c_next = c_node.next
  *     # move node itself
  *     tree.xmlAddPrevSibling(element._c_node, c_node)             # <<<<<<<<<<<<<<
@@ -24042,7 +24057,7 @@ static int __pyx_f_4lxml_5etree__prependSibling(struct LxmlElement *__pyx_v_elem
  */
   xmlAddPrevSibling(__pyx_v_element->_c_node, __pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1266
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1267
  *     # move node itself
  *     tree.xmlAddPrevSibling(element._c_node, c_node)
  *     _moveTail(c_next, c_node)             # <<<<<<<<<<<<<<
@@ -24051,7 +24066,7 @@ static int __pyx_f_4lxml_5etree__prependSibling(struct LxmlElement *__pyx_v_elem
  */
   __pyx_f_4lxml_5etree__moveTail(__pyx_v_c_next, __pyx_v_c_node);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1269
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1270
  *     # uh oh, elements may be pointing to different doc when
  *     # parent element has moved; change them too..
  *     moveNodeToDocument(element._doc, c_source_doc, c_node)             # <<<<<<<<<<<<<<
@@ -24060,7 +24075,7 @@ static int __pyx_f_4lxml_5etree__prependSibling(struct LxmlElement *__pyx_v_elem
  */
   __pyx_t_4 = ((PyObject *)__pyx_v_element->_doc);
   __Pyx_INCREF(__pyx_t_4);
-  __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1269; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree_moveNodeToDocument(((struct LxmlDocument *)__pyx_t_4), __pyx_v_c_source_doc, __pyx_v_c_node); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1270; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   __pyx_r = 0;
@@ -24074,7 +24089,7 @@ static int __pyx_f_4lxml_5etree__prependSibling(struct LxmlElement *__pyx_v_elem
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1271
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1272
  *     moveNodeToDocument(element._doc, c_source_doc, c_node)
  * 
  * cdef inline int isutf8(const_xmlChar* s):             # <<<<<<<<<<<<<<
@@ -24089,7 +24104,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) {
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("isutf8", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1272
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1273
  * 
  * cdef inline int isutf8(const_xmlChar* s):
  *     cdef xmlChar c = s[0]             # <<<<<<<<<<<<<<
@@ -24098,7 +24113,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) {
  */
   __pyx_v_c = (__pyx_v_s[0]);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1273
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1274
  * cdef inline int isutf8(const_xmlChar* s):
  *     cdef xmlChar c = s[0]
  *     while c != c'\0':             # <<<<<<<<<<<<<<
@@ -24109,7 +24124,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) {
     __pyx_t_1 = ((__pyx_v_c != '\x00') != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1274
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1275
  *     cdef xmlChar c = s[0]
  *     while c != c'\0':
  *         if c & 0x80:             # <<<<<<<<<<<<<<
@@ -24119,7 +24134,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) {
     __pyx_t_1 = ((__pyx_v_c & 0x80) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1275
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1276
  *     while c != c'\0':
  *         if c & 0x80:
  *             return 1             # <<<<<<<<<<<<<<
@@ -24132,7 +24147,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) {
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1276
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1277
  *         if c & 0x80:
  *             return 1
  *         s += 1             # <<<<<<<<<<<<<<
@@ -24141,7 +24156,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) {
  */
     __pyx_v_s = (__pyx_v_s + 1);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1277
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1278
  *             return 1
  *         s += 1
  *         c = s[0]             # <<<<<<<<<<<<<<
@@ -24151,7 +24166,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) {
     __pyx_v_c = (__pyx_v_s[0]);
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1278
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1279
  *         s += 1
  *         c = s[0]
  *     return 0             # <<<<<<<<<<<<<<
@@ -24167,7 +24182,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree_isutf8(const xmlChar *__pyx_v_s) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1280
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1281
  *     return 0
  * 
  * cdef int check_string_utf8(bytes pystring):             # <<<<<<<<<<<<<<
@@ -24190,7 +24205,7 @@ static int __pyx_f_4lxml_5etree_check_string_utf8(PyObject *__pyx_v_pystring) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("check_string_utf8", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1285
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1286
  *     bytes or ASCII control characters.
  *     """
  *     cdef const_xmlChar* s = _xcstr(pystring)             # <<<<<<<<<<<<<<
@@ -24199,7 +24214,7 @@ static int __pyx_f_4lxml_5etree_check_string_utf8(PyObject *__pyx_v_pystring) {
  */
   __pyx_v_s = (const xmlChar*)PyBytes_AS_STRING(((PyObject *)__pyx_v_pystring));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1286
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1287
  *     """
  *     cdef const_xmlChar* s = _xcstr(pystring)
  *     cdef const_xmlChar* c_end = s + len(pystring)             # <<<<<<<<<<<<<<
@@ -24208,12 +24223,12 @@ static int __pyx_f_4lxml_5etree_check_string_utf8(PyObject *__pyx_v_pystring) {
  */
   if (unlikely(((PyObject *)__pyx_v_pystring) == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_1 = PyBytes_GET_SIZE(((PyObject *)__pyx_v_pystring)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1286; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyBytes_GET_SIZE(((PyObject *)__pyx_v_pystring)); if (unlikely(__pyx_t_1 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1287; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_v_c_end = (__pyx_v_s + __pyx_t_1);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1287
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1288
  *     cdef const_xmlChar* s = _xcstr(pystring)
  *     cdef const_xmlChar* c_end = s + len(pystring)
  *     cdef bint is_non_ascii = 0             # <<<<<<<<<<<<<<
@@ -24222,7 +24237,7 @@ static int __pyx_f_4lxml_5etree_check_string_utf8(PyObject *__pyx_v_pystring) {
  */
   __pyx_v_is_non_ascii = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1288
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1289
  *     cdef const_xmlChar* c_end = s + len(pystring)
  *     cdef bint is_non_ascii = 0
  *     while s < c_end:             # <<<<<<<<<<<<<<
@@ -24233,7 +24248,7 @@ static int __pyx_f_4lxml_5etree_check_string_utf8(PyObject *__pyx_v_pystring) {
     __pyx_t_2 = ((__pyx_v_s < __pyx_v_c_end) != 0);
     if (!__pyx_t_2) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1289
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1290
  *     cdef bint is_non_ascii = 0
  *     while s < c_end:
  *         if s[0] & 0x80:             # <<<<<<<<<<<<<<
@@ -24243,7 +24258,7 @@ static int __pyx_f_4lxml_5etree_check_string_utf8(PyObject *__pyx_v_pystring) {
     __pyx_t_2 = (((__pyx_v_s[0]) & 0x80) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1291
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1292
  *         if s[0] & 0x80:
  *             # skip over multi byte sequences
  *             while s < c_end and s[0] & 0x80:             # <<<<<<<<<<<<<<
@@ -24259,7 +24274,7 @@ static int __pyx_f_4lxml_5etree_check_string_utf8(PyObject *__pyx_v_pystring) {
         }
         if (!__pyx_t_3) break;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1292
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1293
  *             # skip over multi byte sequences
  *             while s < c_end and s[0] & 0x80:
  *                 s += 1             # <<<<<<<<<<<<<<
@@ -24269,7 +24284,7 @@ static int __pyx_f_4lxml_5etree_check_string_utf8(PyObject *__pyx_v_pystring) {
         __pyx_v_s = (__pyx_v_s + 1);
       }
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1293
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1294
  *             while s < c_end and s[0] & 0x80:
  *                 s += 1
  *             is_non_ascii = 1             # <<<<<<<<<<<<<<
@@ -24281,7 +24296,7 @@ static int __pyx_f_4lxml_5etree_check_string_utf8(PyObject *__pyx_v_pystring) {
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1294
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1295
  *                 s += 1
  *             is_non_ascii = 1
  *         if  s < c_end and not tree.xmlIsChar_ch(s[0]):             # <<<<<<<<<<<<<<
@@ -24297,7 +24312,7 @@ static int __pyx_f_4lxml_5etree_check_string_utf8(PyObject *__pyx_v_pystring) {
     }
     if (__pyx_t_4) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1295
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1296
  *             is_non_ascii = 1
  *         if  s < c_end and not tree.xmlIsChar_ch(s[0]):
  *             return -1 # invalid!             # <<<<<<<<<<<<<<
@@ -24310,7 +24325,7 @@ static int __pyx_f_4lxml_5etree_check_string_utf8(PyObject *__pyx_v_pystring) {
     }
     __pyx_L8:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1296
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1297
  *         if  s < c_end and not tree.xmlIsChar_ch(s[0]):
  *             return -1 # invalid!
  *         s += 1             # <<<<<<<<<<<<<<
@@ -24320,7 +24335,7 @@ static int __pyx_f_4lxml_5etree_check_string_utf8(PyObject *__pyx_v_pystring) {
     __pyx_v_s = (__pyx_v_s + 1);
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1297
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1298
  *             return -1 # invalid!
  *         s += 1
  *     return is_non_ascii             # <<<<<<<<<<<<<<
@@ -24340,7 +24355,7 @@ static int __pyx_f_4lxml_5etree_check_string_utf8(PyObject *__pyx_v_pystring) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1299
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1300
  *     return is_non_ascii
  * 
  * cdef inline object funicodeOrNone(const_xmlChar* s):             # <<<<<<<<<<<<<<
@@ -24358,7 +24373,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrNone(const xmlChar
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("funicodeOrNone", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1300
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1301
  * 
  * cdef inline object funicodeOrNone(const_xmlChar* s):
  *     return funicode(s) if s is not NULL else None             # <<<<<<<<<<<<<<
@@ -24367,7 +24382,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrNone(const xmlChar
  */
   __Pyx_XDECREF(__pyx_r);
   if (((__pyx_v_s != NULL) != 0)) {
-    __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_s); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1300; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_s); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1301; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = __pyx_t_2;
     __pyx_t_2 = 0;
@@ -24392,7 +24407,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrNone(const xmlChar
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1302
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1303
  *     return funicode(s) if s is not NULL else None
  * 
  * cdef inline object funicodeOrEmpty(const_xmlChar* s):             # <<<<<<<<<<<<<<
@@ -24410,7 +24425,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrEmpty(const xmlCha
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("funicodeOrEmpty", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1303
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1304
  * 
  * cdef inline object funicodeOrEmpty(const_xmlChar* s):
  *     return funicode(s) if s is not NULL else ''             # <<<<<<<<<<<<<<
@@ -24419,7 +24434,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrEmpty(const xmlCha
  */
   __Pyx_XDECREF(__pyx_r);
   if (((__pyx_v_s != NULL) != 0)) {
-    __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_s); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1303; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_s); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1304; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_1 = __pyx_t_2;
     __pyx_t_2 = 0;
@@ -24444,7 +24459,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree_funicodeOrEmpty(const xmlCha
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1305
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1306
  *     return funicode(s) if s is not NULL else ''
  * 
  * cdef object funicode(const_xmlChar* s):             # <<<<<<<<<<<<<<
@@ -24465,7 +24480,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("funicode", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1309
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1310
  *     cdef const_xmlChar* spos
  *     cdef bint is_non_ascii
  *     if python.LXML_UNICODE_STRINGS:             # <<<<<<<<<<<<<<
@@ -24475,7 +24490,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
   __pyx_t_1 = (LXML_UNICODE_STRINGS != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1310
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1311
  *     cdef bint is_non_ascii
  *     if python.LXML_UNICODE_STRINGS:
  *         return s.decode('UTF-8')             # <<<<<<<<<<<<<<
@@ -24483,7 +24498,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
  *     is_non_ascii = 0
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = ((PyObject *)__Pyx_decode_c_string(((char *)__pyx_v_s), 0, strlen(((char *)__pyx_v_s)), NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1310; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__Pyx_decode_c_string(((char *)__pyx_v_s), 0, strlen(((char *)__pyx_v_s)), NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1311; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     __pyx_r = ((PyObject *)__pyx_t_2);
     __pyx_t_2 = 0;
@@ -24492,7 +24507,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1311
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1312
  *     if python.LXML_UNICODE_STRINGS:
  *         return s.decode('UTF-8')
  *     spos = s             # <<<<<<<<<<<<<<
@@ -24501,7 +24516,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
  */
   __pyx_v_spos = __pyx_v_s;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1312
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1313
  *         return s.decode('UTF-8')
  *     spos = s
  *     is_non_ascii = 0             # <<<<<<<<<<<<<<
@@ -24510,7 +24525,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
  */
   __pyx_v_is_non_ascii = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1313
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1314
  *     spos = s
  *     is_non_ascii = 0
  *     while spos[0] != c'\0':             # <<<<<<<<<<<<<<
@@ -24521,7 +24536,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
     __pyx_t_1 = (((__pyx_v_spos[0]) != '\x00') != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1314
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1315
  *     is_non_ascii = 0
  *     while spos[0] != c'\0':
  *         if spos[0] & 0x80:             # <<<<<<<<<<<<<<
@@ -24531,7 +24546,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
     __pyx_t_1 = (((__pyx_v_spos[0]) & 0x80) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1315
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1316
  *     while spos[0] != c'\0':
  *         if spos[0] & 0x80:
  *             is_non_ascii = 1             # <<<<<<<<<<<<<<
@@ -24540,7 +24555,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
  */
       __pyx_v_is_non_ascii = 1;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1316
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1317
  *         if spos[0] & 0x80:
  *             is_non_ascii = 1
  *             break             # <<<<<<<<<<<<<<
@@ -24552,7 +24567,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
     }
     __pyx_L6:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1317
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1318
  *             is_non_ascii = 1
  *             break
  *         spos += 1             # <<<<<<<<<<<<<<
@@ -24563,7 +24578,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
   }
   __pyx_L5_break:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1318
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1319
  *             break
  *         spos += 1
  *     slen = spos - s             # <<<<<<<<<<<<<<
@@ -24572,7 +24587,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
  */
   __pyx_v_slen = (__pyx_v_spos - __pyx_v_s);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1319
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1320
  *         spos += 1
  *     slen = spos - s
  *     if spos[0] != c'\0':             # <<<<<<<<<<<<<<
@@ -24582,7 +24597,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
   __pyx_t_1 = (((__pyx_v_spos[0]) != '\x00') != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1320
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1321
  *     slen = spos - s
  *     if spos[0] != c'\0':
  *         slen += tree.xmlStrlen(spos)             # <<<<<<<<<<<<<<
@@ -24594,7 +24609,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
   }
   __pyx_L7:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1321
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1322
  *     if spos[0] != c'\0':
  *         slen += tree.xmlStrlen(spos)
  *     if is_non_ascii:             # <<<<<<<<<<<<<<
@@ -24604,7 +24619,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
   __pyx_t_1 = (__pyx_v_is_non_ascii != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1322
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1323
  *         slen += tree.xmlStrlen(spos)
  *     if is_non_ascii:
  *         return s[:slen].decode('UTF-8')             # <<<<<<<<<<<<<<
@@ -24612,7 +24627,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
  * 
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = ((PyObject *)__Pyx_decode_c_string(((char *)__pyx_v_s), 0, __pyx_v_slen, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1322; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__Pyx_decode_c_string(((char *)__pyx_v_s), 0, __pyx_v_slen, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_2));
     __pyx_r = ((PyObject *)__pyx_t_2);
     __pyx_t_2 = 0;
@@ -24621,7 +24636,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
   }
   __pyx_L8:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1323
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1324
  *     if is_non_ascii:
  *         return s[:slen].decode('UTF-8')
  *     return <bytes>s[:slen]             # <<<<<<<<<<<<<<
@@ -24629,7 +24644,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
  * cdef bytes _utf8(object s):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_s) + 0, __pyx_v_slen - 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1323; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __Pyx_PyBytes_FromStringAndSize(((const char*)__pyx_v_s) + 0, __pyx_v_slen - 0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1324; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_2));
   __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_t_2)));
   __pyx_r = ((PyObject *)__pyx_t_2);
@@ -24648,7 +24663,7 @@ static PyObject *__pyx_f_4lxml_5etree_funicode(const xmlChar *__pyx_v_s) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1325
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1326
  *     return <bytes>s[:slen]
  * 
  * cdef bytes _utf8(object s):             # <<<<<<<<<<<<<<
@@ -24671,7 +24686,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_utf8", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1332
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1333
  *     cdef int invalid
  *     cdef bytes utf8_string
  *     if not python.IS_PYTHON3 and type(s) is bytes:             # <<<<<<<<<<<<<<
@@ -24687,7 +24702,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1333
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1334
  *     cdef bytes utf8_string
  *     if not python.IS_PYTHON3 and type(s) is bytes:
  *         utf8_string = <bytes>s             # <<<<<<<<<<<<<<
@@ -24697,7 +24712,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
     __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_v_s)));
     __pyx_v_utf8_string = ((PyObject*)__pyx_v_s);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1334
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1335
  *     if not python.IS_PYTHON3 and type(s) is bytes:
  *         utf8_string = <bytes>s
  *         invalid = check_string_utf8(utf8_string)             # <<<<<<<<<<<<<<
@@ -24708,7 +24723,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
     goto __pyx_L3;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1335
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1336
  *         utf8_string = <bytes>s
  *         invalid = check_string_utf8(utf8_string)
  *     elif isinstance(s, unicode):             # <<<<<<<<<<<<<<
@@ -24719,7 +24734,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
   __pyx_t_1 = (__pyx_t_3 != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1336
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1337
  *         invalid = check_string_utf8(utf8_string)
  *     elif isinstance(s, unicode):
  *         utf8_string = (<unicode>s).encode('utf8')             # <<<<<<<<<<<<<<
@@ -24728,15 +24743,15 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
  */
     if (unlikely(__pyx_v_s == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "encode");
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_4 = ((PyObject *)PyUnicode_AsUTF8String(((PyObject*)__pyx_v_s))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)PyUnicode_AsUTF8String(((PyObject*)__pyx_v_s))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_4));
-    if (!(likely(PyBytes_CheckExact(((PyObject *)__pyx_t_4)))||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(((PyObject *)__pyx_t_4))->tp_name), 0))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1336; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyBytes_CheckExact(((PyObject *)__pyx_t_4)))||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(((PyObject *)__pyx_t_4))->tp_name), 0))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1337; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_v_utf8_string = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1337
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1338
  *     elif isinstance(s, unicode):
  *         utf8_string = (<unicode>s).encode('utf8')
  *         invalid = check_string_utf8(utf8_string) == -1 # non-XML?             # <<<<<<<<<<<<<<
@@ -24747,7 +24762,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
     goto __pyx_L3;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1338
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1339
  *         utf8_string = (<unicode>s).encode('utf8')
  *         invalid = check_string_utf8(utf8_string) == -1 # non-XML?
  *     elif isinstance(s, bytes):             # <<<<<<<<<<<<<<
@@ -24758,25 +24773,25 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
   __pyx_t_3 = (__pyx_t_1 != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1339
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1340
  *         invalid = check_string_utf8(utf8_string) == -1 # non-XML?
  *     elif isinstance(s, bytes):
  *         utf8_string = bytes(s)             # <<<<<<<<<<<<<<
  *         invalid = check_string_utf8(utf8_string)
  *     else:
  */
-    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __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))), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1339; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)(&PyBytes_Type))), ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1340; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
     __pyx_v_utf8_string = ((PyObject*)__pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1340
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1341
  *     elif isinstance(s, bytes):
  *         utf8_string = bytes(s)
  *         invalid = check_string_utf8(utf8_string)             # <<<<<<<<<<<<<<
@@ -24788,33 +24803,33 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1342
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1343
  *         invalid = check_string_utf8(utf8_string)
  *     else:
  *         raise TypeError("Argument must be bytes or unicode, got '%.200s'" % type(s).__name__)             # <<<<<<<<<<<<<<
  *     if invalid:
  *         raise ValueError(
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_s)), __pyx_n_s____name__); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(__pyx_v_s)), __pyx_n_s____name__); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_4 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_32), __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_32), __pyx_t_5); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     __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 = 1342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_t_4));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_4));
     __pyx_t_4 = 0;
-    __pyx_t_4 = PyObject_Call(__pyx_builtin_TypeError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_builtin_TypeError, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
     __Pyx_Raise(__pyx_t_4, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1342; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1343; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1343
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1344
  *     else:
  *         raise TypeError("Argument must be bytes or unicode, got '%.200s'" % type(s).__name__)
  *     if invalid:             # <<<<<<<<<<<<<<
@@ -24824,23 +24839,23 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
   __pyx_t_3 = (__pyx_v_invalid != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1344
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1345
  *         raise TypeError("Argument must be bytes or unicode, got '%.200s'" % type(s).__name__)
  *     if invalid:
  *         raise ValueError(             # <<<<<<<<<<<<<<
  *             "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, ((PyObject *)__pyx_k_tuple_34), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_k_tuple_34), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1345; __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[4]; __pyx_lineno = 1344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L4;
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1346
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1347
  *         raise ValueError(
  *             "All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters")
  *     return utf8_string             # <<<<<<<<<<<<<<
@@ -24866,7 +24881,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8(PyObject *__pyx_v_s) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1348
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1349
  *     return utf8_string
  * 
  * cdef bytes _utf8orNone(object s):             # <<<<<<<<<<<<<<
@@ -24885,7 +24900,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8orNone(PyObject *__pyx_v_s) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_utf8orNone", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1349
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1350
  * 
  * cdef bytes _utf8orNone(object s):
  *     return _utf8(s) if s is not None else None             # <<<<<<<<<<<<<<
@@ -24895,7 +24910,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8orNone(PyObject *__pyx_v_s) {
   __Pyx_XDECREF(((PyObject *)__pyx_r));
   __pyx_t_2 = (__pyx_v_s != Py_None);
   if ((__pyx_t_2 != 0)) {
-    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_s)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_s)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_1 = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -24903,7 +24918,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8orNone(PyObject *__pyx_v_s) {
     __Pyx_INCREF(Py_None);
     __pyx_t_1 = Py_None;
   }
-  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1349; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyBytes_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_t_1)->tp_name), 0))) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1350; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
   goto __pyx_L0;
@@ -24921,7 +24936,7 @@ static PyObject *__pyx_f_4lxml_5etree__utf8orNone(PyObject *__pyx_v_s) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1351
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1352
  *     return _utf8(s) if s is not None else None
  * 
  * cdef bint _isFilePath(const_xmlChar* c_path):             # <<<<<<<<<<<<<<
@@ -24939,7 +24954,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("_isFilePath", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1355
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1356
  *     cdef xmlChar c
  *     # test if it looks like an absolute Unix path or a Windows network path
  *     if c_path[0] == c'/':             # <<<<<<<<<<<<<<
@@ -24949,7 +24964,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
   __pyx_t_1 = (((__pyx_v_c_path[0]) == '/') != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1356
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1357
  *     # test if it looks like an absolute Unix path or a Windows network path
  *     if c_path[0] == c'/':
  *         return 1             # <<<<<<<<<<<<<<
@@ -24962,7 +24977,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1358
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1359
  *         return 1
  *     # test if it looks like an absolute Windows path
  *     if (c_path[0] >= c'a' and c_path[0] <= c'z') or \             # <<<<<<<<<<<<<<
@@ -24978,7 +24993,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
   }
   if (!__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1359
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1360
  *     # test if it looks like an absolute Windows path
  *     if (c_path[0] >= c'a' and c_path[0] <= c'z') or \
  *             (c_path[0] >= c'A' and c_path[0] <= c'Z'):             # <<<<<<<<<<<<<<
@@ -24998,7 +25013,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
   }
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1360
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1361
  *     if (c_path[0] >= c'a' and c_path[0] <= c'z') or \
  *             (c_path[0] >= c'A' and c_path[0] <= c'Z'):
  *         if c_path[1] == c':':             # <<<<<<<<<<<<<<
@@ -25008,7 +25023,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
     __pyx_t_1 = (((__pyx_v_c_path[1]) == ':') != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1361
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1362
  *             (c_path[0] >= c'A' and c_path[0] <= c'Z'):
  *         if c_path[1] == c':':
  *             return 1             # <<<<<<<<<<<<<<
@@ -25024,7 +25039,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1363
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1364
  *             return 1
  *     # test if it looks like a relative path
  *     while c_path[0] != c'\0':             # <<<<<<<<<<<<<<
@@ -25035,7 +25050,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
     __pyx_t_1 = (((__pyx_v_c_path[0]) != '\x00') != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1364
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1365
  *     # test if it looks like a relative path
  *     while c_path[0] != c'\0':
  *         c = c_path[0]             # <<<<<<<<<<<<<<
@@ -25044,7 +25059,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
  */
     __pyx_v_c = (__pyx_v_c_path[0]);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1369
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1370
  *         elif c == c'/':
  *             return 1
  *         elif c == c'\\':             # <<<<<<<<<<<<<<
@@ -25053,7 +25068,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
  */
     switch (__pyx_v_c) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1365
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1366
  *     while c_path[0] != c'\0':
  *         c = c_path[0]
  *         if c == c':':             # <<<<<<<<<<<<<<
@@ -25062,7 +25077,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
  */
       case ':':
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1366
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1367
  *         c = c_path[0]
  *         if c == c':':
  *             return 0             # <<<<<<<<<<<<<<
@@ -25073,7 +25088,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
       goto __pyx_L0;
       break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1367
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1368
  *         if c == c':':
  *             return 0
  *         elif c == c'/':             # <<<<<<<<<<<<<<
@@ -25082,7 +25097,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
  */
       case '/':
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1368
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1369
  *             return 0
  *         elif c == c'/':
  *             return 1             # <<<<<<<<<<<<<<
@@ -25093,7 +25108,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
       goto __pyx_L0;
       break;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1369
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1370
  *         elif c == c'/':
  *             return 1
  *         elif c == c'\\':             # <<<<<<<<<<<<<<
@@ -25102,7 +25117,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
  */
       case '\\':
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1370
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1371
  *             return 1
  *         elif c == c'\\':
  *             return 1             # <<<<<<<<<<<<<<
@@ -25114,7 +25129,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
       break;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1371
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1372
  *         elif c == c'\\':
  *             return 1
  *         c_path += 1             # <<<<<<<<<<<<<<
@@ -25124,7 +25139,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
     __pyx_v_c_path = (__pyx_v_c_path + 1);
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1372
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1373
  *             return 1
  *         c_path += 1
  *     return 1             # <<<<<<<<<<<<<<
@@ -25140,7 +25155,7 @@ static int __pyx_f_4lxml_5etree__isFilePath(const xmlChar *__pyx_v_c_path) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1374
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1375
  *     return 1
  * 
  * cdef object _encodeFilename(object filename):             # <<<<<<<<<<<<<<
@@ -25165,7 +25180,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_encodeFilename", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1377
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1378
  *     u"""Make sure a filename is 8-bit encoded (or None).
  *     """
  *     if filename is None:             # <<<<<<<<<<<<<<
@@ -25176,7 +25191,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1378
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1379
  *     """
  *     if filename is None:
  *         return None             # <<<<<<<<<<<<<<
@@ -25190,7 +25205,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
     goto __pyx_L3;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1379
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1380
  *     if filename is None:
  *         return None
  *     elif isinstance(filename, bytes):             # <<<<<<<<<<<<<<
@@ -25201,7 +25216,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1380
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1381
  *         return None
  *     elif isinstance(filename, bytes):
  *         return filename             # <<<<<<<<<<<<<<
@@ -25215,7 +25230,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
     goto __pyx_L3;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1381
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1382
  *     elif isinstance(filename, bytes):
  *         return filename
  *     elif isinstance(filename, unicode):             # <<<<<<<<<<<<<<
@@ -25226,7 +25241,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1382
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1383
  *         return filename
  *     elif isinstance(filename, unicode):
  *         filename8 = (<unicode>filename).encode('utf8')             # <<<<<<<<<<<<<<
@@ -25235,25 +25250,25 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
  */
     if (unlikely(__pyx_v_filename == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "encode");
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_3 = ((PyObject *)PyUnicode_AsUTF8String(((PyObject*)__pyx_v_filename))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1382; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = ((PyObject *)PyUnicode_AsUTF8String(((PyObject*)__pyx_v_filename))); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __pyx_v_filename8 = ((PyObject *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1383
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1384
  *     elif isinstance(filename, unicode):
  *         filename8 = (<unicode>filename).encode('utf8')
  *         if _isFilePath(<unsigned char*>filename8):             # <<<<<<<<<<<<<<
  *             try:
  *                 return python.PyUnicode_AsEncodedString(
  */
-    __pyx_t_4 = __Pyx_PyObject_AsUString(__pyx_v_filename8); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1383; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyObject_AsUString(__pyx_v_filename8); if (unlikely((!__pyx_t_4) && PyErr_Occurred())) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1384; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_2 = (__pyx_f_4lxml_5etree__isFilePath(((unsigned char *)__pyx_t_4)) != 0);
     if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1384
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1385
  *         filename8 = (<unicode>filename).encode('utf8')
  *         if _isFilePath(<unsigned char*>filename8):
  *             try:             # <<<<<<<<<<<<<<
@@ -25267,7 +25282,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
         __Pyx_XGOTREF(__pyx_t_7);
         /*try:*/ {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1385
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1386
  *         if _isFilePath(<unsigned char*>filename8):
  *             try:
  *                 return python.PyUnicode_AsEncodedString(             # <<<<<<<<<<<<<<
@@ -25276,14 +25291,14 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
  */
           __Pyx_XDECREF(__pyx_r);
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1386
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1387
  *             try:
  *                 return python.PyUnicode_AsEncodedString(
  *                     filename, _C_FILENAME_ENCODING, NULL)             # <<<<<<<<<<<<<<
  *             except UnicodeEncodeError:
  *                 pass
  */
-          __pyx_t_3 = ((PyObject *)PyUnicode_AsEncodedString(__pyx_v_filename, __pyx_v_4lxml_5etree__C_FILENAME_ENCODING, NULL)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1385; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          __pyx_t_3 = ((PyObject *)PyUnicode_AsEncodedString(__pyx_v_filename, __pyx_v_4lxml_5etree__C_FILENAME_ENCODING, NULL)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1386; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
           __Pyx_GOTREF(__pyx_t_3);
           __pyx_r = __pyx_t_3;
           __pyx_t_3 = 0;
@@ -25302,7 +25317,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
         __pyx_L5_error:;
         __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1387
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1388
  *                 return python.PyUnicode_AsEncodedString(
  *                     filename, _C_FILENAME_ENCODING, NULL)
  *             except UnicodeEncodeError:             # <<<<<<<<<<<<<<
@@ -25330,7 +25345,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1389
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1390
  *             except UnicodeEncodeError:
  *                 pass
  *         return filename8             # <<<<<<<<<<<<<<
@@ -25345,18 +25360,18 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1391
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1392
  *         return filename8
  *     else:
  *         raise TypeError("Argument must be string or unicode.")             # <<<<<<<<<<<<<<
  * 
  * cdef object _decodeFilename(const_xmlChar* c_path):
  */
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_TypeError, ((PyObject *)__pyx_k_tuple_36), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Call(__pyx_builtin_TypeError, ((PyObject *)__pyx_k_tuple_36), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1392; __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[4]; __pyx_lineno = 1391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_L3:;
 
@@ -25373,7 +25388,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilename(PyObject *__pyx_v_filename
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1393
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1394
  *         raise TypeError("Argument must be string or unicode.")
  * 
  * cdef object _decodeFilename(const_xmlChar* c_path):             # <<<<<<<<<<<<<<
@@ -25390,7 +25405,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilename(const xmlChar *__pyx_v_c_p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_decodeFilename", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1396
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1397
  *     u"""Make the filename a unicode string if we are in Py3.
  *     """
  *     return _decodeFilenameWithLength(c_path, tree.xmlStrlen(c_path))             # <<<<<<<<<<<<<<
@@ -25398,7 +25413,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilename(const xmlChar *__pyx_v_c_p
  * cdef object _decodeFilenameWithLength(const_xmlChar* c_path, size_t c_len):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__decodeFilenameWithLength(__pyx_v_c_path, xmlStrlen(__pyx_v_c_path)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1396; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_4lxml_5etree__decodeFilenameWithLength(__pyx_v_c_path, xmlStrlen(__pyx_v_c_path)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1397; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -25416,7 +25431,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilename(const xmlChar *__pyx_v_c_p
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1398
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1399
  *     return _decodeFilenameWithLength(c_path, tree.xmlStrlen(c_path))
  * 
  * cdef object _decodeFilenameWithLength(const_xmlChar* c_path, size_t c_len):             # <<<<<<<<<<<<<<
@@ -25441,7 +25456,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_decodeFilenameWithLength", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1401
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1402
  *     u"""Make the filename a unicode string if we are in Py3.
  *     """
  *     if _isFilePath(c_path):             # <<<<<<<<<<<<<<
@@ -25451,7 +25466,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_
   __pyx_t_1 = (__pyx_f_4lxml_5etree__isFilePath(__pyx_v_c_path) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1402
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1403
  *     """
  *     if _isFilePath(c_path):
  *         try:             # <<<<<<<<<<<<<<
@@ -25465,7 +25480,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_
       __Pyx_XGOTREF(__pyx_t_4);
       /*try:*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1403
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1404
  *     if _isFilePath(c_path):
  *         try:
  *             return python.PyUnicode_Decode(             # <<<<<<<<<<<<<<
@@ -25474,14 +25489,14 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_
  */
         __Pyx_XDECREF(__pyx_r);
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1404
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1405
  *         try:
  *             return python.PyUnicode_Decode(
  *                 <const_char*>c_path, c_len, _C_FILENAME_ENCODING, NULL)             # <<<<<<<<<<<<<<
  *         except UnicodeDecodeError:
  *             pass
  */
-        __pyx_t_5 = ((PyObject *)PyUnicode_Decode(((const char *)__pyx_v_c_path), __pyx_v_c_len, __pyx_v_4lxml_5etree__C_FILENAME_ENCODING, NULL)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1403; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
+        __pyx_t_5 = ((PyObject *)PyUnicode_Decode(((const char *)__pyx_v_c_path), __pyx_v_c_len, __pyx_v_4lxml_5etree__C_FILENAME_ENCODING, NULL)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1404; __pyx_clineno = __LINE__; goto __pyx_L4_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __pyx_r = __pyx_t_5;
         __pyx_t_5 = 0;
@@ -25500,7 +25515,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_
       __pyx_L4_error:;
       __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1405
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1406
  *             return python.PyUnicode_Decode(
  *                 <const_char*>c_path, c_len, _C_FILENAME_ENCODING, NULL)
  *         except UnicodeDecodeError:             # <<<<<<<<<<<<<<
@@ -25528,7 +25543,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1407
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1408
  *         except UnicodeDecodeError:
  *             pass
  *     try:             # <<<<<<<<<<<<<<
@@ -25542,7 +25557,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_
     __Pyx_XGOTREF(__pyx_t_2);
     /*try:*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1408
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1409
  *             pass
  *     try:
  *         return (<unsigned char*>c_path)[:c_len].decode('UTF-8')             # <<<<<<<<<<<<<<
@@ -25550,7 +25565,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_
  *         # this is a stupid fallback, but it might still work...
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_5 = ((PyObject *)__Pyx_decode_c_string(((char *)((unsigned char *)__pyx_v_c_path)), 0, __pyx_v_c_len, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1408; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
+      __pyx_t_5 = ((PyObject *)__Pyx_decode_c_string(((char *)((unsigned char *)__pyx_v_c_path)), 0, __pyx_v_c_len, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1409; __pyx_clineno = __LINE__; goto __pyx_L12_error;}
       __Pyx_GOTREF(((PyObject *)__pyx_t_5));
       __pyx_r = ((PyObject *)__pyx_t_5);
       __pyx_t_5 = 0;
@@ -25569,7 +25584,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_
     __pyx_L12_error:;
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1409
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1410
  *     try:
  *         return (<unsigned char*>c_path)[:c_len].decode('UTF-8')
  *     except UnicodeDecodeError:             # <<<<<<<<<<<<<<
@@ -25579,12 +25594,12 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_
     __pyx_t_6 = PyErr_ExceptionMatches(__pyx_builtin_UnicodeDecodeError);
     if (__pyx_t_6) {
       __Pyx_AddTraceback("lxml.etree._decodeFilenameWithLength", __pyx_clineno, __pyx_lineno, __pyx_filename);
-      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_7, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1409; __pyx_clineno = __LINE__; goto __pyx_L14_except_error;}
+      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_7, &__pyx_t_8) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1410; __pyx_clineno = __LINE__; goto __pyx_L14_except_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_8);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1411
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1412
  *     except UnicodeDecodeError:
  *         # this is a stupid fallback, but it might still work...
  *         return (<unsigned char*>c_path)[:c_len].decode('latin-1', 'replace')             # <<<<<<<<<<<<<<
@@ -25592,7 +25607,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_
  * cdef object _encodeFilenameUTF8(object filename):
  */
       __Pyx_XDECREF(__pyx_r);
-      __pyx_t_9 = ((PyObject *)__Pyx_decode_c_string(((char *)((unsigned char *)__pyx_v_c_path)), 0, __pyx_v_c_len, NULL, __pyx_k__replace, PyUnicode_DecodeLatin1)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1411; __pyx_clineno = __LINE__; goto __pyx_L14_except_error;}
+      __pyx_t_9 = ((PyObject *)__Pyx_decode_c_string(((char *)((unsigned char *)__pyx_v_c_path)), 0, __pyx_v_c_len, NULL, __pyx_k__replace, PyUnicode_DecodeLatin1)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1412; __pyx_clineno = __LINE__; goto __pyx_L14_except_error;}
       __Pyx_GOTREF(((PyObject *)__pyx_t_9));
       __pyx_r = ((PyObject *)__pyx_t_9);
       __pyx_t_9 = 0;
@@ -25640,7 +25655,7 @@ static PyObject *__pyx_f_4lxml_5etree__decodeFilenameWithLength(const xmlChar *_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1413
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1414
  *         return (<unsigned char*>c_path)[:c_len].decode('latin-1', 'replace')
  * 
  * cdef object _encodeFilenameUTF8(object filename):             # <<<<<<<<<<<<<<
@@ -25675,7 +25690,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
   __Pyx_RefNannySetupContext("_encodeFilenameUTF8", 0);
   __Pyx_INCREF(__pyx_v_filename);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1418
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1419
  *     """
  *     cdef char* c_filename
  *     if filename is None:             # <<<<<<<<<<<<<<
@@ -25686,7 +25701,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1419
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1420
  *     cdef char* c_filename
  *     if filename is None:
  *         return None             # <<<<<<<<<<<<<<
@@ -25700,7 +25715,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
     goto __pyx_L3;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1420
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1421
  *     if filename is None:
  *         return None
  *     elif isinstance(filename, bytes):             # <<<<<<<<<<<<<<
@@ -25711,7 +25726,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1421
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1422
  *         return None
  *     elif isinstance(filename, bytes):
  *         if not check_string_utf8(<bytes>filename):             # <<<<<<<<<<<<<<
@@ -25721,7 +25736,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
     __pyx_t_1 = ((!(__pyx_f_4lxml_5etree_check_string_utf8(((PyObject*)__pyx_v_filename)) != 0)) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1423
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1424
  *         if not check_string_utf8(<bytes>filename):
  *             # plain ASCII!
  *             return filename             # <<<<<<<<<<<<<<
@@ -25736,7 +25751,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1424
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1425
  *             # plain ASCII!
  *             return filename
  *         c_filename = _cstr(<bytes>filename)             # <<<<<<<<<<<<<<
@@ -25745,7 +25760,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
  */
     __pyx_v_c_filename = PyBytes_AS_STRING(__pyx_v_filename);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1425
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1426
  *             return filename
  *         c_filename = _cstr(<bytes>filename)
  *         try:             # <<<<<<<<<<<<<<
@@ -25759,7 +25774,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
       __Pyx_XGOTREF(__pyx_t_5);
       /*try:*/ {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1428
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1429
  *             # try to decode with default encoding
  *             filename = python.PyUnicode_Decode(
  *                 c_filename, len(<bytes>filename),             # <<<<<<<<<<<<<<
@@ -25768,18 +25783,18 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
  */
         if (unlikely(__pyx_v_filename == Py_None)) {
           PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-          {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1428; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+          {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1429; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
         }
-        __pyx_t_6 = PyBytes_GET_SIZE(((PyObject *)((PyObject*)__pyx_v_filename))); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1428; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_6 = PyBytes_GET_SIZE(((PyObject *)((PyObject*)__pyx_v_filename))); if (unlikely(__pyx_t_6 == -1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1429; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1429
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1430
  *             filename = python.PyUnicode_Decode(
  *                 c_filename, len(<bytes>filename),
  *                 _C_FILENAME_ENCODING, NULL)             # <<<<<<<<<<<<<<
  *         except UnicodeDecodeError as decode_exc:
  *             try:
  */
-        __pyx_t_7 = ((PyObject *)PyUnicode_Decode(__pyx_v_c_filename, __pyx_t_6, __pyx_v_4lxml_5etree__C_FILENAME_ENCODING, NULL)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1427; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
+        __pyx_t_7 = ((PyObject *)PyUnicode_Decode(__pyx_v_c_filename, __pyx_t_6, __pyx_v_4lxml_5etree__C_FILENAME_ENCODING, NULL)); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1428; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_7);
         __pyx_t_7 = 0;
@@ -25791,7 +25806,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
       __pyx_L5_error:;
       __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1430
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1431
  *                 c_filename, len(<bytes>filename),
  *                 _C_FILENAME_ENCODING, NULL)
  *         except UnicodeDecodeError as decode_exc:             # <<<<<<<<<<<<<<
@@ -25801,14 +25816,14 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
       __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_UnicodeDecodeError);
       if (__pyx_t_8) {
         __Pyx_AddTraceback("lxml.etree._encodeFilenameUTF8", __pyx_clineno, __pyx_lineno, __pyx_filename);
-        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_9, &__pyx_t_10) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1430; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
+        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_9, &__pyx_t_10) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1431; __pyx_clineno = __LINE__; goto __pyx_L7_except_error;}
         __Pyx_GOTREF(__pyx_t_7);
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_INCREF(__pyx_t_9);
         __pyx_v_decode_exc = __pyx_t_9;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1431
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1432
  *                 _C_FILENAME_ENCODING, NULL)
  *         except UnicodeDecodeError as decode_exc:
  *             try:             # <<<<<<<<<<<<<<
@@ -25822,7 +25837,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
           __Pyx_XGOTREF(__pyx_t_13);
           /*try:*/ {
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1433
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1434
  *             try:
  *                 # try if it's proper UTF-8
  *                 (<bytes>filename).decode('utf8')             # <<<<<<<<<<<<<<
@@ -25831,13 +25846,13 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
  */
             if (unlikely(__pyx_v_filename == Py_None)) {
               PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "decode");
-              {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1433; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+              {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
             }
-            __pyx_t_14 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_filename)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1433; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
+            __pyx_t_14 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_filename)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_14)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1434; __pyx_clineno = __LINE__; goto __pyx_L15_error;}
             __Pyx_GOTREF(((PyObject *)__pyx_t_14));
             __Pyx_DECREF(((PyObject *)__pyx_t_14)); __pyx_t_14 = 0;
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1434
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1435
  *                 # try if it's proper UTF-8
  *                 (<bytes>filename).decode('utf8')
  *                 return filename             # <<<<<<<<<<<<<<
@@ -25865,7 +25880,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
           __pyx_L15_error:;
           __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1435
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1436
  *                 (<bytes>filename).decode('utf8')
  *                 return filename
  *             except UnicodeDecodeError:             # <<<<<<<<<<<<<<
@@ -25875,12 +25890,12 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
           __pyx_t_8 = PyErr_ExceptionMatches(__pyx_builtin_UnicodeDecodeError);
           if (__pyx_t_8) {
             __Pyx_AddTraceback("lxml.etree._encodeFilenameUTF8", __pyx_clineno, __pyx_lineno, __pyx_filename);
-            if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1435; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;}
+            if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;}
             __Pyx_GOTREF(__pyx_t_14);
             __Pyx_GOTREF(__pyx_t_15);
             __Pyx_GOTREF(__pyx_t_16);
 
-            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1436
+            /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1437
  *                 return filename
  *             except UnicodeDecodeError:
  *                 raise decode_exc # otherwise re-raise original exception             # <<<<<<<<<<<<<<
@@ -25888,7 +25903,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
  *         return (<unicode>filename).encode('utf8')
  */
             __Pyx_Raise(__pyx_v_decode_exc, 0, 0, 0);
-            {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1436; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;}
+            {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1437; __pyx_clineno = __LINE__; goto __pyx_L17_except_error;}
             __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
             __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
             __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
@@ -25935,7 +25950,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1437
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1438
  *             except UnicodeDecodeError:
  *                 raise decode_exc # otherwise re-raise original exception
  *     if isinstance(filename, unicode):             # <<<<<<<<<<<<<<
@@ -25946,7 +25961,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1438
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1439
  *                 raise decode_exc # otherwise re-raise original exception
  *     if isinstance(filename, unicode):
  *         return (<unicode>filename).encode('utf8')             # <<<<<<<<<<<<<<
@@ -25956,9 +25971,9 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
     __Pyx_XDECREF(__pyx_r);
     if (unlikely(__pyx_v_filename == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "encode");
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_10 = ((PyObject *)PyUnicode_AsUTF8String(((PyObject*)__pyx_v_filename))); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1438; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = ((PyObject *)PyUnicode_AsUTF8String(((PyObject*)__pyx_v_filename))); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1439; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_10));
     __pyx_r = ((PyObject *)__pyx_t_10);
     __pyx_t_10 = 0;
@@ -25967,18 +25982,18 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1440
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1441
  *         return (<unicode>filename).encode('utf8')
  *     else:
  *         raise TypeError("Argument must be string or unicode.")             # <<<<<<<<<<<<<<
  * 
  * cdef tuple _getNsTag(tag):
  */
-    __pyx_t_10 = PyObject_Call(__pyx_builtin_TypeError, ((PyObject *)__pyx_k_tuple_37), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_10 = PyObject_Call(__pyx_builtin_TypeError, ((PyObject *)__pyx_k_tuple_37), NULL); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1441; __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;
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_L25:;
 
@@ -26001,7 +26016,7 @@ static PyObject *__pyx_f_4lxml_5etree__encodeFilenameUTF8(PyObject *__pyx_v_file
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1442
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1443
  *         raise TypeError("Argument must be string or unicode.")
  * 
  * cdef tuple _getNsTag(tag):             # <<<<<<<<<<<<<<
@@ -26018,7 +26033,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNsTag(PyObject *__pyx_v_tag) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_getNsTag", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1446
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1447
  *     Return None for NS uri if no namespace URI provided.
  *     """
  *     return __getNsTag(tag, 0)             # <<<<<<<<<<<<<<
@@ -26026,7 +26041,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNsTag(PyObject *__pyx_v_tag) {
  * cdef tuple _getNsTagWithEmptyNs(tag):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree___getNsTag(__pyx_v_tag, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1446; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree___getNsTag(__pyx_v_tag, 0)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1447; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -26044,7 +26059,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNsTag(PyObject *__pyx_v_tag) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1448
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1449
  *     return __getNsTag(tag, 0)
  * 
  * cdef tuple _getNsTagWithEmptyNs(tag):             # <<<<<<<<<<<<<<
@@ -26061,7 +26076,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNsTagWithEmptyNs(PyObject *__pyx_v_tag
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_getNsTagWithEmptyNs", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1453
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1454
  *     part is '{}'.
  *     """
  *     return __getNsTag(tag, 1)             # <<<<<<<<<<<<<<
@@ -26069,7 +26084,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNsTagWithEmptyNs(PyObject *__pyx_v_tag
  * cdef tuple __getNsTag(tag, bint empty_ns):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree___getNsTag(__pyx_v_tag, 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1453; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree___getNsTag(__pyx_v_tag, 1)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1454; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
@@ -26087,7 +26102,7 @@ static PyObject *__pyx_f_4lxml_5etree__getNsTagWithEmptyNs(PyObject *__pyx_v_tag
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1455
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1456
  *     return __getNsTag(tag, 1)
  * 
  * cdef tuple __getNsTag(tag, bint empty_ns):             # <<<<<<<<<<<<<<
@@ -26113,7 +26128,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
   __Pyx_RefNannySetupContext("__getNsTag", 0);
   __Pyx_INCREF(__pyx_v_tag);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1460
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1461
  *     cdef Py_ssize_t taglen
  *     cdef Py_ssize_t nslen
  *     cdef bytes ns = None             # <<<<<<<<<<<<<<
@@ -26123,7 +26138,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
   __Pyx_INCREF(Py_None);
   __pyx_v_ns = ((PyObject*)Py_None);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1462
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1463
  *     cdef bytes ns = None
  *     # _isString() is much faster than isinstance()
  *     if not _isString(tag) and isinstance(tag, QName):             # <<<<<<<<<<<<<<
@@ -26139,7 +26154,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1463
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1464
  *     # _isString() is much faster than isinstance()
  *     if not _isString(tag) and isinstance(tag, QName):
  *         tag = (<QName>tag).text             # <<<<<<<<<<<<<<
@@ -26154,19 +26169,19 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1464
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1465
  *     if not _isString(tag) and isinstance(tag, QName):
  *         tag = (<QName>tag).text
  *     tag = _utf8(tag)             # <<<<<<<<<<<<<<
  *     c_tag = _cstr(tag)
  *     if c_tag[0] == c'{':
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_tag)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1464; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_tag)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1465; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF_SET(__pyx_v_tag, __pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1465
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1466
  *         tag = (<QName>tag).text
  *     tag = _utf8(tag)
  *     c_tag = _cstr(tag)             # <<<<<<<<<<<<<<
@@ -26175,7 +26190,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
  */
   __pyx_v_c_tag = PyBytes_AS_STRING(__pyx_v_tag);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1466
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1467
  *     tag = _utf8(tag)
  *     c_tag = _cstr(tag)
  *     if c_tag[0] == c'{':             # <<<<<<<<<<<<<<
@@ -26185,7 +26200,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
   __pyx_t_3 = (((__pyx_v_c_tag[0]) == '{') != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1467
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1468
  *     c_tag = _cstr(tag)
  *     if c_tag[0] == c'{':
  *         c_tag += 1             # <<<<<<<<<<<<<<
@@ -26194,7 +26209,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
  */
       __pyx_v_c_tag = (__pyx_v_c_tag + 1);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1468
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1469
  *     if c_tag[0] == c'{':
  *         c_tag += 1
  *         c_ns_end = cstring_h.strchr(c_tag, c'}')             # <<<<<<<<<<<<<<
@@ -26203,7 +26218,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
  */
     __pyx_v_c_ns_end = strchr(__pyx_v_c_tag, '}');
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1469
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1470
  *         c_tag += 1
  *         c_ns_end = cstring_h.strchr(c_tag, c'}')
  *         if c_ns_end is NULL:             # <<<<<<<<<<<<<<
@@ -26213,7 +26228,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
     __pyx_t_3 = ((__pyx_v_c_ns_end == NULL) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1470
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1471
  *         c_ns_end = cstring_h.strchr(c_tag, c'}')
  *         if c_ns_end is NULL:
  *             raise ValueError, u"Invalid tag name"             # <<<<<<<<<<<<<<
@@ -26221,12 +26236,12 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
  *         taglen = python.PyBytes_GET_SIZE(tag) - nslen - 2
  */
       __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_u_38), 0, 0);
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1470; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1471; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L5;
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1471
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1472
  *         if c_ns_end is NULL:
  *             raise ValueError, u"Invalid tag name"
  *         nslen  = c_ns_end - c_tag             # <<<<<<<<<<<<<<
@@ -26235,7 +26250,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
  */
     __pyx_v_nslen = (__pyx_v_c_ns_end - __pyx_v_c_tag);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1472
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1473
  *             raise ValueError, u"Invalid tag name"
  *         nslen  = c_ns_end - c_tag
  *         taglen = python.PyBytes_GET_SIZE(tag) - nslen - 2             # <<<<<<<<<<<<<<
@@ -26244,7 +26259,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
  */
     __pyx_v_taglen = ((PyBytes_GET_SIZE(__pyx_v_tag) - __pyx_v_nslen) - 2);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1473
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1474
  *         nslen  = c_ns_end - c_tag
  *         taglen = python.PyBytes_GET_SIZE(tag) - nslen - 2
  *         if taglen == 0:             # <<<<<<<<<<<<<<
@@ -26254,7 +26269,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
     __pyx_t_3 = ((__pyx_v_taglen == 0) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1474
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1475
  *         taglen = python.PyBytes_GET_SIZE(tag) - nslen - 2
  *         if taglen == 0:
  *             raise ValueError, u"Empty tag name"             # <<<<<<<<<<<<<<
@@ -26262,12 +26277,12 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
  *             ns = <bytes>c_tag[:nslen]
  */
       __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_u_39), 0, 0);
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1474; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1475; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L6;
     }
     __pyx_L6:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1475
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1476
  *         if taglen == 0:
  *             raise ValueError, u"Empty tag name"
  *         if nslen > 0:             # <<<<<<<<<<<<<<
@@ -26277,14 +26292,14 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
     __pyx_t_3 = ((__pyx_v_nslen > 0) != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1476
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1477
  *             raise ValueError, u"Empty tag name"
  *         if nslen > 0:
  *             ns = <bytes>c_tag[:nslen]             # <<<<<<<<<<<<<<
  *         elif empty_ns:
  *             ns = b''
  */
-      __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_c_tag + 0, __pyx_v_nslen - 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1476; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_c_tag + 0, __pyx_v_nslen - 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1477; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(((PyObject *)__pyx_t_4));
       __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_t_4)));
       __Pyx_DECREF_SET(__pyx_v_ns, ((PyObject*)__pyx_t_4));
@@ -26292,7 +26307,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
       goto __pyx_L7;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1477
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1478
  *         if nslen > 0:
  *             ns = <bytes>c_tag[:nslen]
  *         elif empty_ns:             # <<<<<<<<<<<<<<
@@ -26302,7 +26317,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
     __pyx_t_3 = (__pyx_v_empty_ns != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1478
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1479
  *             ns = <bytes>c_tag[:nslen]
  *         elif empty_ns:
  *             ns = b''             # <<<<<<<<<<<<<<
@@ -26315,14 +26330,14 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
     }
     __pyx_L7:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1479
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1480
  *         elif empty_ns:
  *             ns = b''
  *         tag = <bytes>c_ns_end[1:taglen+1]             # <<<<<<<<<<<<<<
  *     elif python.PyBytes_GET_SIZE(tag) == 0:
  *         raise ValueError, u"Empty tag name"
  */
-    __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_c_ns_end + 1, (__pyx_v_taglen + 1) - 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1479; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_c_ns_end + 1, (__pyx_v_taglen + 1) - 1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1480; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_4));
     __Pyx_INCREF(((PyObject *)((PyObject*)__pyx_t_4)));
     __Pyx_DECREF_SET(__pyx_v_tag, ((PyObject *)__pyx_t_4));
@@ -26330,7 +26345,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
     goto __pyx_L4;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1480
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1481
  *             ns = b''
  *         tag = <bytes>c_ns_end[1:taglen+1]
  *     elif python.PyBytes_GET_SIZE(tag) == 0:             # <<<<<<<<<<<<<<
@@ -26340,7 +26355,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
   __pyx_t_3 = ((PyBytes_GET_SIZE(__pyx_v_tag) == 0) != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1481
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1482
  *         tag = <bytes>c_ns_end[1:taglen+1]
  *     elif python.PyBytes_GET_SIZE(tag) == 0:
  *         raise ValueError, u"Empty tag name"             # <<<<<<<<<<<<<<
@@ -26348,12 +26363,12 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
  * 
  */
     __Pyx_Raise(__pyx_builtin_ValueError, ((PyObject *)__pyx_kp_u_39), 0, 0);
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1481; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L4;
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1482
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1483
  *     elif python.PyBytes_GET_SIZE(tag) == 0:
  *         raise ValueError, u"Empty tag name"
  *     return ns, tag             # <<<<<<<<<<<<<<
@@ -26361,7 +26376,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
  * cdef inline int _pyXmlNameIsValid(name_utf8):
  */
   __Pyx_XDECREF(((PyObject *)__pyx_r));
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1482; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1483; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(((PyObject *)__pyx_v_ns));
   PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_ns));
@@ -26387,7 +26402,7 @@ static PyObject *__pyx_f_4lxml_5etree___getNsTag(PyObject *__pyx_v_tag, int __py
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1484
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1485
  *     return ns, tag
  * 
  * cdef inline int _pyXmlNameIsValid(name_utf8):             # <<<<<<<<<<<<<<
@@ -26400,7 +26415,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__pyXmlNameIsValid(PyObject *__pyx_
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_pyXmlNameIsValid", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1485
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1486
  * 
  * cdef inline int _pyXmlNameIsValid(name_utf8):
  *     return _xmlNameIsValid(_xcstr(name_utf8))             # <<<<<<<<<<<<<<
@@ -26416,7 +26431,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__pyXmlNameIsValid(PyObject *__pyx_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1487
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1488
  *     return _xmlNameIsValid(_xcstr(name_utf8))
  * 
  * cdef inline int _pyHtmlNameIsValid(name_utf8):             # <<<<<<<<<<<<<<
@@ -26429,7 +26444,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__pyHtmlNameIsValid(PyObject *__pyx
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_pyHtmlNameIsValid", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1488
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1489
  * 
  * cdef inline int _pyHtmlNameIsValid(name_utf8):
  *     return _htmlNameIsValid(_xcstr(name_utf8))             # <<<<<<<<<<<<<<
@@ -26445,7 +26460,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__pyHtmlNameIsValid(PyObject *__pyx
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1490
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1491
  *     return _htmlNameIsValid(_xcstr(name_utf8))
  * 
  * cdef inline int _xmlNameIsValid(const_xmlChar* c_name):             # <<<<<<<<<<<<<<
@@ -26458,7 +26473,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__xmlNameIsValid(const xmlChar *__p
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("_xmlNameIsValid", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1491
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1492
  * 
  * cdef inline int _xmlNameIsValid(const_xmlChar* c_name):
  *     return tree.xmlValidateNCName(c_name, 0) == 0             # <<<<<<<<<<<<<<
@@ -26474,7 +26489,7 @@ static CYTHON_INLINE int __pyx_f_4lxml_5etree__xmlNameIsValid(const xmlChar *__p
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1493
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1494
  *     return tree.xmlValidateNCName(c_name, 0) == 0
  * 
  * cdef int _htmlNameIsValid(const_xmlChar* c_name):             # <<<<<<<<<<<<<<
@@ -26490,7 +26505,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name)
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("_htmlNameIsValid", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1494
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1495
  * 
  * cdef int _htmlNameIsValid(const_xmlChar* c_name):
  *     if c_name is NULL or c_name[0] == c'\0':             # <<<<<<<<<<<<<<
@@ -26506,7 +26521,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name)
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1495
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1496
  * cdef int _htmlNameIsValid(const_xmlChar* c_name):
  *     if c_name is NULL or c_name[0] == c'\0':
  *         return 0             # <<<<<<<<<<<<<<
@@ -26519,7 +26534,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name)
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1496
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1497
  *     if c_name is NULL or c_name[0] == c'\0':
  *         return 0
  *     while c_name[0] != c'\0':             # <<<<<<<<<<<<<<
@@ -26530,7 +26545,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name)
     __pyx_t_3 = (((__pyx_v_c_name[0]) != '\x00') != 0);
     if (!__pyx_t_3) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1497
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1498
  *         return 0
  *     while c_name[0] != c'\0':
  *         if c_name[0] in b'&<>/"\'\t\n\x0B\x0C\r ':             # <<<<<<<<<<<<<<
@@ -26551,7 +26566,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name)
       case '<':
       case '>':
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1498
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1499
  *     while c_name[0] != c'\0':
  *         if c_name[0] in b'&<>/"\'\t\n\x0B\x0C\r ':
  *             return 0             # <<<<<<<<<<<<<<
@@ -26563,7 +26578,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name)
       break;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1499
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1500
  *         if c_name[0] in b'&<>/"\'\t\n\x0B\x0C\r ':
  *             return 0
  *         c_name += 1             # <<<<<<<<<<<<<<
@@ -26573,7 +26588,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name)
     __pyx_v_c_name = (__pyx_v_c_name + 1);
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1500
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1501
  *             return 0
  *         c_name += 1
  *     return 1             # <<<<<<<<<<<<<<
@@ -26589,7 +26604,7 @@ static int __pyx_f_4lxml_5etree__htmlNameIsValid(const xmlChar *__pyx_v_c_name)
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1502
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1503
  *     return 1
  * 
  * cdef bint _characterReferenceIsValid(const_xmlChar* c_name):             # <<<<<<<<<<<<<<
@@ -26606,7 +26621,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("_characterReferenceIsValid", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1504
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1505
  * cdef bint _characterReferenceIsValid(const_xmlChar* c_name):
  *     cdef bint is_hex
  *     if c_name[0] == c'x':             # <<<<<<<<<<<<<<
@@ -26616,7 +26631,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
   __pyx_t_1 = (((__pyx_v_c_name[0]) == 'x') != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1505
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1506
  *     cdef bint is_hex
  *     if c_name[0] == c'x':
  *         c_name += 1             # <<<<<<<<<<<<<<
@@ -26625,7 +26640,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
  */
     __pyx_v_c_name = (__pyx_v_c_name + 1);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1506
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1507
  *     if c_name[0] == c'x':
  *         c_name += 1
  *         is_hex = 1             # <<<<<<<<<<<<<<
@@ -26637,7 +26652,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1508
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1509
  *         is_hex = 1
  *     else:
  *         is_hex = 0             # <<<<<<<<<<<<<<
@@ -26648,7 +26663,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1509
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1510
  *     else:
  *         is_hex = 0
  *     if c_name[0] == c'\0':             # <<<<<<<<<<<<<<
@@ -26658,7 +26673,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
   __pyx_t_1 = (((__pyx_v_c_name[0]) == '\x00') != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1510
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1511
  *         is_hex = 0
  *     if c_name[0] == c'\0':
  *         return 0             # <<<<<<<<<<<<<<
@@ -26671,7 +26686,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1511
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1512
  *     if c_name[0] == c'\0':
  *         return 0
  *     while c_name[0] != c'\0':             # <<<<<<<<<<<<<<
@@ -26682,7 +26697,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
     __pyx_t_1 = (((__pyx_v_c_name[0]) != '\x00') != 0);
     if (!__pyx_t_1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1512
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1513
  *         return 0
  *     while c_name[0] != c'\0':
  *         if c_name[0] < c'0' or c_name[0] > c'9':             # <<<<<<<<<<<<<<
@@ -26698,7 +26713,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
     }
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1513
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1514
  *     while c_name[0] != c'\0':
  *         if c_name[0] < c'0' or c_name[0] > c'9':
  *             if not is_hex:             # <<<<<<<<<<<<<<
@@ -26708,7 +26723,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
       __pyx_t_3 = ((!(__pyx_v_is_hex != 0)) != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1514
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1515
  *         if c_name[0] < c'0' or c_name[0] > c'9':
  *             if not is_hex:
  *                 return 0             # <<<<<<<<<<<<<<
@@ -26721,7 +26736,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
       }
       __pyx_L8:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1515
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1516
  *             if not is_hex:
  *                 return 0
  *             if not (c'a' <= c_name[0] <= c'f'):             # <<<<<<<<<<<<<<
@@ -26735,7 +26750,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
       __pyx_t_1 = ((!(__pyx_t_3 != 0)) != 0);
       if (__pyx_t_1) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1516
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1517
  *                 return 0
  *             if not (c'a' <= c_name[0] <= c'f'):
  *                 if not (c'A' <= c_name[0] <= c'F'):             # <<<<<<<<<<<<<<
@@ -26749,7 +26764,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
         __pyx_t_3 = ((!(__pyx_t_1 != 0)) != 0);
         if (__pyx_t_3) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1517
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1518
  *             if not (c'a' <= c_name[0] <= c'f'):
  *                 if not (c'A' <= c_name[0] <= c'F'):
  *                     return 0             # <<<<<<<<<<<<<<
@@ -26768,7 +26783,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
     }
     __pyx_L7:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1518
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1519
  *                 if not (c'A' <= c_name[0] <= c'F'):
  *                     return 0
  *         c_name += 1             # <<<<<<<<<<<<<<
@@ -26778,7 +26793,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
     __pyx_v_c_name = (__pyx_v_c_name + 1);
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1519
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1520
  *                     return 0
  *         c_name += 1
  *     return 1             # <<<<<<<<<<<<<<
@@ -26794,7 +26809,7 @@ static int __pyx_f_4lxml_5etree__characterReferenceIsValid(const xmlChar *__pyx_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1521
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1522
  *     return 1
  * 
  * cdef int _tagValidOrRaise(tag_utf) except -1:             # <<<<<<<<<<<<<<
@@ -26813,7 +26828,7 @@ static int __pyx_f_4lxml_5etree__tagValidOrRaise(PyObject *__pyx_v_tag_utf) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_tagValidOrRaise", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1522
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1523
  * 
  * cdef int _tagValidOrRaise(tag_utf) except -1:
  *     if not _pyXmlNameIsValid(tag_utf):             # <<<<<<<<<<<<<<
@@ -26823,7 +26838,7 @@ static int __pyx_f_4lxml_5etree__tagValidOrRaise(PyObject *__pyx_v_tag_utf) {
   __pyx_t_1 = ((!(__pyx_f_4lxml_5etree__pyXmlNameIsValid(__pyx_v_tag_utf) != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1524
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1525
  *     if not _pyXmlNameIsValid(tag_utf):
  *         raise ValueError("Invalid tag name %r" %
  *                          (<bytes>tag_utf).decode('utf8'))             # <<<<<<<<<<<<<<
@@ -26832,29 +26847,29 @@ static int __pyx_f_4lxml_5etree__tagValidOrRaise(PyObject *__pyx_v_tag_utf) {
  */
     if (unlikely(__pyx_v_tag_utf == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "decode");
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_2 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_tag_utf)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_tag_utf)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1525; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_40), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_40), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1523; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1524; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1525
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1526
  *         raise ValueError("Invalid tag name %r" %
  *                          (<bytes>tag_utf).decode('utf8'))
  *     return 0             # <<<<<<<<<<<<<<
@@ -26876,7 +26891,7 @@ static int __pyx_f_4lxml_5etree__tagValidOrRaise(PyObject *__pyx_v_tag_utf) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1527
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1528
  *     return 0
  * 
  * cdef int _htmlTagValidOrRaise(tag_utf) except -1:             # <<<<<<<<<<<<<<
@@ -26895,7 +26910,7 @@ static int __pyx_f_4lxml_5etree__htmlTagValidOrRaise(PyObject *__pyx_v_tag_utf)
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_htmlTagValidOrRaise", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1528
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1529
  * 
  * cdef int _htmlTagValidOrRaise(tag_utf) except -1:
  *     if not _pyHtmlNameIsValid(tag_utf):             # <<<<<<<<<<<<<<
@@ -26905,7 +26920,7 @@ static int __pyx_f_4lxml_5etree__htmlTagValidOrRaise(PyObject *__pyx_v_tag_utf)
   __pyx_t_1 = ((!(__pyx_f_4lxml_5etree__pyHtmlNameIsValid(__pyx_v_tag_utf) != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1530
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1531
  *     if not _pyHtmlNameIsValid(tag_utf):
  *         raise ValueError("Invalid HTML tag name %r" %
  *                          (<bytes>tag_utf).decode('utf8'))             # <<<<<<<<<<<<<<
@@ -26914,29 +26929,29 @@ static int __pyx_f_4lxml_5etree__htmlTagValidOrRaise(PyObject *__pyx_v_tag_utf)
  */
     if (unlikely(__pyx_v_tag_utf == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "decode");
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_2 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_tag_utf)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_tag_utf)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1531; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_41), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_41), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1529; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1530; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1531
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1532
  *         raise ValueError("Invalid HTML tag name %r" %
  *                          (<bytes>tag_utf).decode('utf8'))
  *     return 0             # <<<<<<<<<<<<<<
@@ -26958,7 +26973,7 @@ static int __pyx_f_4lxml_5etree__htmlTagValidOrRaise(PyObject *__pyx_v_tag_utf)
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1533
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1534
  *     return 0
  * 
  * cdef int _attributeValidOrRaise(name_utf) except -1:             # <<<<<<<<<<<<<<
@@ -26977,7 +26992,7 @@ static int __pyx_f_4lxml_5etree__attributeValidOrRaise(PyObject *__pyx_v_name_ut
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_attributeValidOrRaise", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1534
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1535
  * 
  * cdef int _attributeValidOrRaise(name_utf) except -1:
  *     if not _pyXmlNameIsValid(name_utf):             # <<<<<<<<<<<<<<
@@ -26987,7 +27002,7 @@ static int __pyx_f_4lxml_5etree__attributeValidOrRaise(PyObject *__pyx_v_name_ut
   __pyx_t_1 = ((!(__pyx_f_4lxml_5etree__pyXmlNameIsValid(__pyx_v_name_utf) != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1536
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1537
  *     if not _pyXmlNameIsValid(name_utf):
  *         raise ValueError("Invalid attribute name %r" %
  *                          (<bytes>name_utf).decode('utf8'))             # <<<<<<<<<<<<<<
@@ -26996,29 +27011,29 @@ static int __pyx_f_4lxml_5etree__attributeValidOrRaise(PyObject *__pyx_v_name_ut
  */
     if (unlikely(__pyx_v_name_utf == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "decode");
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_2 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_name_utf)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_name_utf)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1537; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_42), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_42), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1535; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1536; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1537
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1538
  *         raise ValueError("Invalid attribute name %r" %
  *                          (<bytes>name_utf).decode('utf8'))
  *     return 0             # <<<<<<<<<<<<<<
@@ -27040,7 +27055,7 @@ static int __pyx_f_4lxml_5etree__attributeValidOrRaise(PyObject *__pyx_v_name_ut
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1539
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1540
  *     return 0
  * 
  * cdef int _prefixValidOrRaise(tag_utf) except -1:             # <<<<<<<<<<<<<<
@@ -27059,7 +27074,7 @@ static int __pyx_f_4lxml_5etree__prefixValidOrRaise(PyObject *__pyx_v_tag_utf) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_prefixValidOrRaise", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1540
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1541
  * 
  * cdef int _prefixValidOrRaise(tag_utf) except -1:
  *     if not _pyXmlNameIsValid(tag_utf):             # <<<<<<<<<<<<<<
@@ -27069,7 +27084,7 @@ static int __pyx_f_4lxml_5etree__prefixValidOrRaise(PyObject *__pyx_v_tag_utf) {
   __pyx_t_1 = ((!(__pyx_f_4lxml_5etree__pyXmlNameIsValid(__pyx_v_tag_utf) != 0)) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1542
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1543
  *     if not _pyXmlNameIsValid(tag_utf):
  *         raise ValueError("Invalid namespace prefix %r" %
  *                          (<bytes>tag_utf).decode('utf8'))             # <<<<<<<<<<<<<<
@@ -27078,29 +27093,29 @@ static int __pyx_f_4lxml_5etree__prefixValidOrRaise(PyObject *__pyx_v_tag_utf) {
  */
     if (unlikely(__pyx_v_tag_utf == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "decode");
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_2 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_tag_utf)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_tag_utf)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1543; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_43), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_43), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1541; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1542; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1543
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1544
  *         raise ValueError("Invalid namespace prefix %r" %
  *                          (<bytes>tag_utf).decode('utf8'))
  *     return 0             # <<<<<<<<<<<<<<
@@ -27122,7 +27137,7 @@ static int __pyx_f_4lxml_5etree__prefixValidOrRaise(PyObject *__pyx_v_tag_utf) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1545
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1546
  *     return 0
  * 
  * cdef int _uriValidOrRaise(uri_utf) except -1:             # <<<<<<<<<<<<<<
@@ -27142,7 +27157,7 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) {
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_uriValidOrRaise", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1546
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1547
  * 
  * cdef int _uriValidOrRaise(uri_utf) except -1:
  *     cdef uri.xmlURI* c_uri = uri.xmlParseURI(_cstr(uri_utf))             # <<<<<<<<<<<<<<
@@ -27151,7 +27166,7 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) {
  */
   __pyx_v_c_uri = xmlParseURI(PyBytes_AS_STRING(__pyx_v_uri_utf));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1547
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1548
  * cdef int _uriValidOrRaise(uri_utf) except -1:
  *     cdef uri.xmlURI* c_uri = uri.xmlParseURI(_cstr(uri_utf))
  *     if c_uri is NULL:             # <<<<<<<<<<<<<<
@@ -27161,7 +27176,7 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) {
   __pyx_t_1 = ((__pyx_v_c_uri == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1549
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1550
  *     if c_uri is NULL:
  *         raise ValueError("Invalid namespace URI %r" %
  *                          (<bytes>uri_utf).decode('utf8'))             # <<<<<<<<<<<<<<
@@ -27170,29 +27185,29 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) {
  */
     if (unlikely(__pyx_v_uri_utf == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "decode");
-      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_2 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_uri_utf)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_uri_utf)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1550; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_2));
-    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_44), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_44), ((PyObject *)__pyx_t_2)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
-    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_t_3));
     __Pyx_GIVEREF(((PyObject *)__pyx_t_3));
     __pyx_t_3 = 0;
-    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Call(__pyx_builtin_ValueError, ((PyObject *)__pyx_t_2), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(((PyObject *)__pyx_t_2)); __pyx_t_2 = 0;
     __Pyx_Raise(__pyx_t_3, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1548; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1549; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1550
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1551
  *         raise ValueError("Invalid namespace URI %r" %
  *                          (<bytes>uri_utf).decode('utf8'))
  *     uri.xmlFreeURI(c_uri)             # <<<<<<<<<<<<<<
@@ -27201,7 +27216,7 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) {
  */
   xmlFreeURI(__pyx_v_c_uri);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1551
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1552
  *                          (<bytes>uri_utf).decode('utf8'))
  *     uri.xmlFreeURI(c_uri)
  *     return 0             # <<<<<<<<<<<<<<
@@ -27223,7 +27238,7 @@ static int __pyx_f_4lxml_5etree__uriValidOrRaise(PyObject *__pyx_v_uri_utf) {
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1553
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1554
  *     return 0
  * 
  * cdef inline object _namespacedName(xmlNode* c_node):             # <<<<<<<<<<<<<<
@@ -27240,7 +27255,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree__namespacedName(xmlNode *__p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_namespacedName", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1554
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1555
  * 
  * cdef inline object _namespacedName(xmlNode* c_node):
  *     return _namespacedNameFromNsName(_getNs(c_node), c_node.name)             # <<<<<<<<<<<<<<
@@ -27248,7 +27263,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree__namespacedName(xmlNode *__p
  * cdef object _namespacedNameFromNsName(const_xmlChar* href, const_xmlChar* name):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_4lxml_5etree__namespacedNameFromNsName(_getNs(__pyx_v_c_node), __pyx_v_c_node->name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1554; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __pyx_f_4lxml_5etree__namespacedNameFromNsName(_getNs(__pyx_v_c_node), __pyx_v_c_node->name); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1555; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -27266,7 +27281,7 @@ static CYTHON_INLINE PyObject *__pyx_f_4lxml_5etree__namespacedName(xmlNode *__p
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1556
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1557
  *     return _namespacedNameFromNsName(_getNs(c_node), c_node.name)
  * 
  * cdef object _namespacedNameFromNsName(const_xmlChar* href, const_xmlChar* name):             # <<<<<<<<<<<<<<
@@ -27286,7 +27301,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_namespacedNameFromNsName", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1557
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1558
  * 
  * cdef object _namespacedNameFromNsName(const_xmlChar* href, const_xmlChar* name):
  *     if href is NULL:             # <<<<<<<<<<<<<<
@@ -27296,7 +27311,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_
   __pyx_t_1 = ((__pyx_v_href == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1558
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1559
  * cdef object _namespacedNameFromNsName(const_xmlChar* href, const_xmlChar* name):
  *     if href is NULL:
  *         return funicode(name)             # <<<<<<<<<<<<<<
@@ -27304,7 +27319,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_
  *         return python.PyUnicode_FromFormat("{%s}%s", href, name)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1558; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_4lxml_5etree_funicode(__pyx_v_name); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1559; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
@@ -27312,7 +27327,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_
     goto __pyx_L3;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1559
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1560
  *     if href is NULL:
  *         return funicode(name)
  *     elif python.LXML_UNICODE_STRINGS and python.PY_VERSION_HEX >= 0x02060000:             # <<<<<<<<<<<<<<
@@ -27327,7 +27342,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_
   }
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1560
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1561
  *         return funicode(name)
  *     elif python.LXML_UNICODE_STRINGS and python.PY_VERSION_HEX >= 0x02060000:
  *         return python.PyUnicode_FromFormat("{%s}%s", href, name)             # <<<<<<<<<<<<<<
@@ -27335,7 +27350,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_
  *         s = python.PyBytes_FromFormat("{%s}%s", href, name)
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_2 = ((PyObject *)PyUnicode_FromFormat(__pyx_k_45, __pyx_v_href, __pyx_v_name)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1560; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)PyUnicode_FromFormat(__pyx_k_45, __pyx_v_href, __pyx_v_name)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1561; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
@@ -27344,19 +27359,19 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1562
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1563
  *         return python.PyUnicode_FromFormat("{%s}%s", href, name)
  *     else:
  *         s = python.PyBytes_FromFormat("{%s}%s", href, name)             # <<<<<<<<<<<<<<
  *         if python.LXML_UNICODE_STRINGS or isutf8(_xcstr(s)):
  *             return (<bytes>s).decode('utf8')
  */
-    __pyx_t_2 = ((PyObject *)PyBytes_FromFormat(__pyx_k_45, __pyx_v_href, __pyx_v_name)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1562; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = ((PyObject *)PyBytes_FromFormat(__pyx_k_45, __pyx_v_href, __pyx_v_name)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1563; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_s = ((PyObject*)__pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1563
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1564
  *     else:
  *         s = python.PyBytes_FromFormat("{%s}%s", href, name)
  *         if python.LXML_UNICODE_STRINGS or isutf8(_xcstr(s)):             # <<<<<<<<<<<<<<
@@ -27371,7 +27386,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_
     }
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1564
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1565
  *         s = python.PyBytes_FromFormat("{%s}%s", href, name)
  *         if python.LXML_UNICODE_STRINGS or isutf8(_xcstr(s)):
  *             return (<bytes>s).decode('utf8')             # <<<<<<<<<<<<<<
@@ -27381,9 +27396,9 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_
       __Pyx_XDECREF(__pyx_r);
       if (unlikely(((PyObject *)__pyx_v_s) == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "decode");
-        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __pyx_t_2 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_s)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1564; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = ((PyObject *)__Pyx_decode_bytes(((PyObject *)((PyObject*)__pyx_v_s)), 0, PY_SSIZE_T_MAX, NULL, NULL, PyUnicode_DecodeUTF8)); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1565; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(((PyObject *)__pyx_t_2));
       __pyx_r = ((PyObject *)__pyx_t_2);
       __pyx_t_2 = 0;
@@ -27392,7 +27407,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1566
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1567
  *             return (<bytes>s).decode('utf8')
  *         else:
  *             return s             # <<<<<<<<<<<<<<
@@ -27421,7 +27436,7 @@ static PyObject *__pyx_f_4lxml_5etree__namespacedNameFromNsName(const xmlChar *_
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1568
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1569
  *             return s
  * 
  * cdef _getFilenameForFile(source):             # <<<<<<<<<<<<<<
@@ -27444,7 +27459,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
   CYTHON_UNUSED int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_getFilenameForFile", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1574
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1575
  *     """
  *     # urllib2 provides a geturl() method
  *     try:             # <<<<<<<<<<<<<<
@@ -27458,7 +27473,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
     __Pyx_XGOTREF(__pyx_t_3);
     /*try:*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1575
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1576
  *     # urllib2 provides a geturl() method
  *     try:
  *         return source.geturl()             # <<<<<<<<<<<<<<
@@ -27466,9 +27481,9 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
  *         pass
  */
       __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 = 1575; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __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 = 1576; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1575; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_t_5 = PyObject_Call(__pyx_t_4, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1576; __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;
@@ -27489,7 +27504,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1576
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1577
  *     try:
  *         return source.geturl()
  *     except:             # <<<<<<<<<<<<<<
@@ -27508,7 +27523,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
     __pyx_L10_try_end:;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1579
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1580
  *         pass
  *     # file instances have a name attribute
  *     try:             # <<<<<<<<<<<<<<
@@ -27522,19 +27537,19 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
     __Pyx_XGOTREF(__pyx_t_1);
     /*try:*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1580
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1581
  *     # file instances have a name attribute
  *     try:
  *         filename = source.name             # <<<<<<<<<<<<<<
  *         if _isString(filename):
  *             return os_path_abspath(filename)
  */
-      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s__name); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1580; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s__name); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1581; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_v_filename = __pyx_t_5;
       __pyx_t_5 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1581
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1582
  *     try:
  *         filename = source.name
  *         if _isString(filename):             # <<<<<<<<<<<<<<
@@ -27544,7 +27559,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
       __pyx_t_6 = (_isString(__pyx_v_filename) != 0);
       if (__pyx_t_6) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1582
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1583
  *         filename = source.name
  *         if _isString(filename):
  *             return os_path_abspath(filename)             # <<<<<<<<<<<<<<
@@ -27552,12 +27567,12 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
  *         pass
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1582; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1583; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __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, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1582; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
+        __pyx_t_4 = PyObject_Call(__pyx_v_4lxml_5etree_os_path_abspath, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1583; __pyx_clineno = __LINE__; goto __pyx_L11_error;}
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
         __pyx_r = __pyx_t_4;
@@ -27581,7 +27596,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1583
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1584
  *         if _isString(filename):
  *             return os_path_abspath(filename)
  *     except:             # <<<<<<<<<<<<<<
@@ -27600,7 +27615,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
     __pyx_L18_try_end:;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1586
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1587
  *         pass
  *     # gzip file instances have a filename attribute (before Py3k)
  *     try:             # <<<<<<<<<<<<<<
@@ -27614,19 +27629,19 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
     __Pyx_XGOTREF(__pyx_t_3);
     /*try:*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1587
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1588
  *     # gzip file instances have a filename attribute (before Py3k)
  *     try:
  *         filename = source.filename             # <<<<<<<<<<<<<<
  *         if _isString(filename):
  *             return os_path_abspath(filename)
  */
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s__filename); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1587; __pyx_clineno = __LINE__; goto __pyx_L20_error;}
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s__filename); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1588; __pyx_clineno = __LINE__; goto __pyx_L20_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_XDECREF_SET(__pyx_v_filename, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1588
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1589
  *     try:
  *         filename = source.filename
  *         if _isString(filename):             # <<<<<<<<<<<<<<
@@ -27636,7 +27651,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
       __pyx_t_6 = (_isString(__pyx_v_filename) != 0);
       if (__pyx_t_6) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1589
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1590
  *         filename = source.filename
  *         if _isString(filename):
  *             return os_path_abspath(filename)             # <<<<<<<<<<<<<<
@@ -27644,12 +27659,12 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
  *         pass
  */
         __Pyx_XDECREF(__pyx_r);
-        __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1589; __pyx_clineno = __LINE__; goto __pyx_L20_error;}
+        __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1590; __pyx_clineno = __LINE__; goto __pyx_L20_error;}
         __Pyx_GOTREF(__pyx_t_4);
         __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, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1589; __pyx_clineno = __LINE__; goto __pyx_L20_error;}
+        __pyx_t_5 = PyObject_Call(__pyx_v_4lxml_5etree_os_path_abspath, ((PyObject *)__pyx_t_4), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1590; __pyx_clineno = __LINE__; goto __pyx_L20_error;}
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
         __pyx_r = __pyx_t_5;
@@ -27673,7 +27688,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1590
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1591
  *         if _isString(filename):
  *             return os_path_abspath(filename)
  *     except:             # <<<<<<<<<<<<<<
@@ -27692,7 +27707,7 @@ static PyObject *__pyx_f_4lxml_5etree__getFilenameForFile(PyObject *__pyx_v_sour
     __pyx_L27_try_end:;
   }
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1593
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1594
  *         pass
  *     # can't determine filename
  *     return None             # <<<<<<<<<<<<<<
@@ -94767,7 +94782,7 @@ static void __pyx_f_4lxml_5etree__handleSaxStart(void *__pyx_v_ctxt, const xmlCh
  *             attrib = EMPTY_READ_ONLY_DICT
  *         else:
  *             attrib = {}             # <<<<<<<<<<<<<<
- *             for i in range(0, c_nb_attributes):
+ *             for i in range(c_nb_attributes):
  *                 name = _namespacedNameFromNsName(
  */
         __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 145; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
@@ -94778,7 +94793,7 @@ static void __pyx_f_4lxml_5etree__handleSaxStart(void *__pyx_v_ctxt, const xmlCh
         /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":146
  *         else:
  *             attrib = {}
- *             for i in range(0, c_nb_attributes):             # <<<<<<<<<<<<<<
+ *             for i in range(c_nb_attributes):             # <<<<<<<<<<<<<<
  *                 name = _namespacedNameFromNsName(
  *                     c_attributes[2], c_attributes[0])
  */
@@ -94787,7 +94802,7 @@ static void __pyx_f_4lxml_5etree__handleSaxStart(void *__pyx_v_ctxt, const xmlCh
           __pyx_v_i = __pyx_t_7;
 
           /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":148
- *             for i in range(0, c_nb_attributes):
+ *             for i in range(c_nb_attributes):
  *                 name = _namespacedNameFromNsName(
  *                     c_attributes[2], c_attributes[0])             # <<<<<<<<<<<<<<
  *                 if c_attributes[3] is NULL:
@@ -94883,7 +94898,7 @@ static void __pyx_f_4lxml_5etree__handleSaxStart(void *__pyx_v_ctxt, const xmlCh
  *             nsmap = EMPTY_READ_ONLY_DICT
  *         else:
  *             nsmap = {}             # <<<<<<<<<<<<<<
- *             for i in range(0, c_nb_attributes):
+ *             for i in range(c_nb_namespaces):
  *                 prefix = funicodeOrNone(c_namespaces[0])
  */
         __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[12]; __pyx_lineno = 160; __pyx_clineno = __LINE__; goto __pyx_L5_error;}
@@ -94894,17 +94909,17 @@ static void __pyx_f_4lxml_5etree__handleSaxStart(void *__pyx_v_ctxt, const xmlCh
         /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":161
  *         else:
  *             nsmap = {}
- *             for i in range(0, c_nb_attributes):             # <<<<<<<<<<<<<<
+ *             for i in range(c_nb_namespaces):             # <<<<<<<<<<<<<<
  *                 prefix = funicodeOrNone(c_namespaces[0])
  *                 nsmap[prefix] = funicode(c_namespaces[1])
  */
-        __pyx_t_6 = __pyx_v_c_nb_attributes;
+        __pyx_t_6 = __pyx_v_c_nb_namespaces;
         for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
           __pyx_v_i = __pyx_t_7;
 
           /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":162
  *             nsmap = {}
- *             for i in range(0, c_nb_attributes):
+ *             for i in range(c_nb_namespaces):
  *                 prefix = funicodeOrNone(c_namespaces[0])             # <<<<<<<<<<<<<<
  *                 nsmap[prefix] = funicode(c_namespaces[1])
  *                 c_namespaces += 2
@@ -94915,7 +94930,7 @@ static void __pyx_f_4lxml_5etree__handleSaxStart(void *__pyx_v_ctxt, const xmlCh
           __pyx_t_5 = 0;
 
           /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/saxparser.pxi":163
- *             for i in range(0, c_nb_attributes):
+ *             for i in range(c_nb_namespaces):
  *                 prefix = funicodeOrNone(c_namespaces[0])
  *                 nsmap[prefix] = funicode(c_namespaces[1])             # <<<<<<<<<<<<<<
  *                 c_namespaces += 2
@@ -106633,7 +106648,7 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
  *             encoding = b'ASCII'
  *         self._encoding = encoding             # <<<<<<<<<<<<<<
  *         self._c_encoding = _cstr(encoding) if encoding is not None else NULL
- *         self._target = _create_output_buffer(outfile, self._c_encoding, compresslevel, &self._c_out)
+ *         self._target = _create_output_buffer(
  */
   __Pyx_INCREF(((PyObject *)__pyx_v_encoding));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_encoding));
@@ -106645,8 +106660,8 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
  *             encoding = b'ASCII'
  *         self._encoding = encoding
  *         self._c_encoding = _cstr(encoding) if encoding is not None else NULL             # <<<<<<<<<<<<<<
- *         self._target = _create_output_buffer(outfile, self._c_encoding, compresslevel, &self._c_out)
- * 
+ *         self._target = _create_output_buffer(
+ *             outfile, self._c_encoding, compresslevel, &self._c_out)
  */
   __pyx_t_3 = (__pyx_v_encoding != ((PyObject*)Py_None));
   if ((__pyx_t_3 != 0)) {
@@ -106656,19 +106671,28 @@ static int __pyx_pf_4lxml_5etree_22_IncrementalFileWriter___cinit__(struct __pyx
   }
   __pyx_v_self->_c_encoding = __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":663
- *         self._encoding = encoding
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":664
  *         self._c_encoding = _cstr(encoding) if encoding is not None else NULL
- *         self._target = _create_output_buffer(outfile, self._c_encoding, compresslevel, &self._c_out)             # <<<<<<<<<<<<<<
+ *         self._target = _create_output_buffer(
+ *             outfile, self._c_encoding, compresslevel, &self._c_out)             # <<<<<<<<<<<<<<
  * 
  *     def __dealloc__(self):
  */
   __pyx_t_1 = __pyx_f_4lxml_5etree__create_output_buffer(__pyx_v_outfile, __pyx_v_self->_c_encoding, __pyx_v_compresslevel, (&__pyx_v_self->_c_out)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 663; __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__FilelikeWriter))))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 663; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":663
+ *         self._encoding = encoding
+ *         self._c_encoding = _cstr(encoding) if encoding is not None else NULL
+ *         self._target = _create_output_buffer(             # <<<<<<<<<<<<<<
+ *             outfile, self._c_encoding, compresslevel, &self._c_out)
+ * 
+ */
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->_target);
-  __Pyx_DECREF(__pyx_v_self->_target);
-  __pyx_v_self->_target = __pyx_t_1;
+  __Pyx_DECREF(((PyObject *)__pyx_v_self->_target));
+  __pyx_v_self->_target = ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)__pyx_t_1);
   __pyx_t_1 = 0;
 
   __pyx_r = 0;
@@ -106692,8 +106716,8 @@ static void __pyx_pw_4lxml_5etree_22_IncrementalFileWriter_3__dealloc__(PyObject
   __Pyx_RefNannyFinishContext();
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":665
- *         self._target = _create_output_buffer(outfile, self._c_encoding, compresslevel, &self._c_out)
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":666
+ *             outfile, self._c_encoding, compresslevel, &self._c_out)
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
  *         if self._c_out is not NULL:
@@ -106705,7 +106729,7 @@ static void __pyx_pf_4lxml_5etree_22_IncrementalFileWriter_2__dealloc__(struct _
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":666
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":667
  * 
  *     def __dealloc__(self):
  *         if self._c_out is not NULL:             # <<<<<<<<<<<<<<
@@ -106715,7 +106739,7 @@ static void __pyx_pf_4lxml_5etree_22_IncrementalFileWriter_2__dealloc__(struct _
   __pyx_t_1 = ((__pyx_v_self->_c_out != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":667
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":668
  *     def __dealloc__(self):
  *         if self._c_out is not NULL:
  *             tree.xmlOutputBufferClose(self._c_out)             # <<<<<<<<<<<<<<
@@ -106747,7 +106771,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_5write_declarati
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__version,&__pyx_n_s__standalone,&__pyx_n_s__doctype,0};
     PyObject* values[3] = {0,0,0};
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":669
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":670
  *             tree.xmlOutputBufferClose(self._c_out)
  * 
  *     def write_declaration(self, version=None, standalone=None, doctype=None):             # <<<<<<<<<<<<<<
@@ -106786,7 +106810,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_5write_declarati
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_declaration") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write_declaration") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -106803,7 +106827,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_5write_declarati
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write_declaration", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 669; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("write_declaration", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 670; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._IncrementalFileWriter.write_declaration", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -106832,7 +106856,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   __Pyx_INCREF(__pyx_v_version);
   __Pyx_INCREF(__pyx_v_doctype);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":674
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":675
  *         Write an XML declaration and (optionally) a doctype into the file.
  *         """
  *         assert self._c_out is not NULL             # <<<<<<<<<<<<<<
@@ -106842,11 +106866,11 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 674; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 675; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":677
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":678
  *         cdef const_xmlChar* c_version
  *         cdef int c_standalone
  *         if self._status >= WRITER_DECL_WRITTEN:             # <<<<<<<<<<<<<<
@@ -106856,38 +106880,38 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   __pyx_t_1 = ((__pyx_v_self->_status >= __pyx_e_4lxml_5etree_WRITER_DECL_WRITTEN) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":678
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":679
  *         cdef int c_standalone
  *         if self._status >= WRITER_DECL_WRITTEN:
  *             raise LxmlSyntaxError("XML declaration already written")             # <<<<<<<<<<<<<<
  *         version = _utf8orNone(version)
  *         c_version = _xcstr(version) if version is not None else NULL
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_254), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_254), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 679; __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);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":679
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":680
  *         if self._status >= WRITER_DECL_WRITTEN:
  *             raise LxmlSyntaxError("XML declaration already written")
  *         version = _utf8orNone(version)             # <<<<<<<<<<<<<<
  *         c_version = _xcstr(version) if version is not None else NULL
  *         doctype = _utf8orNone(doctype)
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__utf8orNone(__pyx_v_version)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__utf8orNone(__pyx_v_version)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 680; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_version, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":680
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":681
  *             raise LxmlSyntaxError("XML declaration already written")
  *         version = _utf8orNone(version)
  *         c_version = _xcstr(version) if version is not None else NULL             # <<<<<<<<<<<<<<
@@ -106902,19 +106926,19 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   }
   __pyx_v_c_version = __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":681
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":682
  *         version = _utf8orNone(version)
  *         c_version = _xcstr(version) if version is not None else NULL
  *         doctype = _utf8orNone(doctype)             # <<<<<<<<<<<<<<
  *         if standalone is None:
  *             c_standalone = -1
  */
-  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__utf8orNone(__pyx_v_doctype)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 681; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__utf8orNone(__pyx_v_doctype)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 682; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_doctype, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":682
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":683
  *         c_version = _xcstr(version) if version is not None else NULL
  *         doctype = _utf8orNone(doctype)
  *         if standalone is None:             # <<<<<<<<<<<<<<
@@ -106925,7 +106949,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   __pyx_t_5 = (__pyx_t_1 != 0);
   if (__pyx_t_5) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":683
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":684
  *         doctype = _utf8orNone(doctype)
  *         if standalone is None:
  *             c_standalone = -1             # <<<<<<<<<<<<<<
@@ -106937,14 +106961,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":685
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":686
  *             c_standalone = -1
  *         else:
  *             c_standalone = 1 if standalone else 0             # <<<<<<<<<<<<<<
  *         _writeDeclarationToBuffer(self._c_out, c_version, self._c_encoding, c_standalone)
  *         if doctype is not None:
  */
-    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_standalone); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 685; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_standalone); if (unlikely(__pyx_t_5 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 686; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     if (__pyx_t_5) {
       __pyx_t_6 = 1;
     } else {
@@ -106954,7 +106978,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":686
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":687
  *         else:
  *             c_standalone = 1 if standalone else 0
  *         _writeDeclarationToBuffer(self._c_out, c_version, self._c_encoding, c_standalone)             # <<<<<<<<<<<<<<
@@ -106963,7 +106987,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
  */
   __pyx_f_4lxml_5etree__writeDeclarationToBuffer(__pyx_v_self->_c_out, __pyx_v_c_version, __pyx_v_self->_c_encoding, __pyx_v_c_standalone);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":687
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":688
  *             c_standalone = 1 if standalone else 0
  *         _writeDeclarationToBuffer(self._c_out, c_version, self._c_encoding, c_standalone)
  *         if doctype is not None:             # <<<<<<<<<<<<<<
@@ -106974,7 +106998,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   __pyx_t_1 = (__pyx_t_5 != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":688
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":689
  *         _writeDeclarationToBuffer(self._c_out, c_version, self._c_encoding, c_standalone)
  *         if doctype is not None:
  *             _writeDoctype(self._c_out, _xcstr(doctype))             # <<<<<<<<<<<<<<
@@ -106983,7 +107007,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
  */
     __pyx_f_4lxml_5etree__writeDoctype(__pyx_v_self->_c_out, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_doctype));
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":689
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":690
  *         if doctype is not None:
  *             _writeDoctype(self._c_out, _xcstr(doctype))
  *             self._status = WRITER_DTD_WRITTEN             # <<<<<<<<<<<<<<
@@ -106995,7 +107019,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":691
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":692
  *             self._status = WRITER_DTD_WRITTEN
  *         else:
  *             self._status = WRITER_DECL_WRITTEN             # <<<<<<<<<<<<<<
@@ -107006,14 +107030,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_4write_declarati
   }
   __pyx_L5:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":692
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":693
  *         else:
  *             self._status = WRITER_DECL_WRITTEN
  *         self._handle_error(self._c_out.error)             # <<<<<<<<<<<<<<
  * 
  *     def write_doctype(self, doctype):
  */
-  __pyx_t_3 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 692; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 693; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
@@ -107044,7 +107068,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_7write_doctype(P
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":694
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":695
  *         self._handle_error(self._c_out.error)
  * 
  *     def write_doctype(self, doctype):             # <<<<<<<<<<<<<<
@@ -107065,7 +107089,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
   __Pyx_RefNannySetupContext("write_doctype", 0);
   __Pyx_INCREF(__pyx_v_doctype);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":699
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":700
  *         Writes the given doctype declaration verbatimly into the file.
  *         """
  *         assert self._c_out is not NULL             # <<<<<<<<<<<<<<
@@ -107075,11 +107099,11 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 699; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 700; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":700
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":701
  *         """
  *         assert self._c_out is not NULL
  *         if doctype is None:             # <<<<<<<<<<<<<<
@@ -107090,7 +107114,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":701
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":702
  *         assert self._c_out is not NULL
  *         if doctype is None:
  *             return             # <<<<<<<<<<<<<<
@@ -107104,7 +107128,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":702
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":703
  *         if doctype is None:
  *             return
  *         if self._status >= WRITER_DTD_WRITTEN:             # <<<<<<<<<<<<<<
@@ -107114,38 +107138,38 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
   __pyx_t_2 = ((__pyx_v_self->_status >= __pyx_e_4lxml_5etree_WRITER_DTD_WRITTEN) != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":703
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":704
  *             return
  *         if self._status >= WRITER_DTD_WRITTEN:
  *             raise LxmlSyntaxError("DOCTYPE already written or cannot write it here")             # <<<<<<<<<<<<<<
  *         doctype = _utf8(doctype)
  *         _writeDoctype(self._c_out, _xcstr(doctype))
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_k_tuple_256), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_k_tuple_256), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 704; __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);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L4;
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":704
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":705
  *         if self._status >= WRITER_DTD_WRITTEN:
  *             raise LxmlSyntaxError("DOCTYPE already written or cannot write it here")
  *         doctype = _utf8(doctype)             # <<<<<<<<<<<<<<
  *         _writeDoctype(self._c_out, _xcstr(doctype))
  *         self._status = WRITER_DTD_WRITTEN
  */
-  __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_doctype)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_doctype)); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 705; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF_SET(__pyx_v_doctype, __pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":705
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":706
  *             raise LxmlSyntaxError("DOCTYPE already written or cannot write it here")
  *         doctype = _utf8(doctype)
  *         _writeDoctype(self._c_out, _xcstr(doctype))             # <<<<<<<<<<<<<<
@@ -107154,7 +107178,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
  */
   __pyx_f_4lxml_5etree__writeDoctype(__pyx_v_self->_c_out, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_doctype));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":706
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":707
  *         doctype = _utf8(doctype)
  *         _writeDoctype(self._c_out, _xcstr(doctype))
  *         self._status = WRITER_DTD_WRITTEN             # <<<<<<<<<<<<<<
@@ -107163,14 +107187,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_6write_doctype(s
  */
   __pyx_v_self->_status = __pyx_e_4lxml_5etree_WRITER_DTD_WRITTEN;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":707
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":708
  *         _writeDoctype(self._c_out, _xcstr(doctype))
  *         self._status = WRITER_DTD_WRITTEN
  *         self._handle_error(self._c_out.error)             # <<<<<<<<<<<<<<
  * 
  *     def element(self, tag, attrib=None, nsmap=None, **_extra):
  */
-  __pyx_t_4 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 707; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 708; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
@@ -107208,7 +107232,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_9element(PyObjec
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s__tag,&__pyx_n_s__attrib,&__pyx_n_s__nsmap,0};
     PyObject* values[3] = {0,0,0};
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":709
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":710
  *         self._handle_error(self._c_out.error)
  * 
  *     def element(self, tag, attrib=None, nsmap=None, **_extra):             # <<<<<<<<<<<<<<
@@ -107244,7 +107268,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_9element(PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "element") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v__extra, values, pos_args, "element") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
@@ -107261,7 +107285,7 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_9element(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("element", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 709; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("element", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 710; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v__extra); __pyx_v__extra = 0;
   __Pyx_AddTraceback("lxml.etree._IncrementalFileWriter.element", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -107304,7 +107328,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
   __Pyx_RefNannySetupContext("element", 0);
   __Pyx_INCREF(__pyx_v_attrib);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":714
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":715
  *         Returns a context manager that writes an opening and closing tag.
  *         """
  *         assert self._c_out is not NULL             # <<<<<<<<<<<<<<
@@ -107314,23 +107338,23 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 714; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":715
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":716
  *         """
  *         assert self._c_out is not NULL
  *         attributes = []             # <<<<<<<<<<<<<<
  *         if attrib is not None:
  *             if isinstance(attrib, (dict, _Attrib)):
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 715; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 716; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_attributes = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":716
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":717
  *         assert self._c_out is not NULL
  *         attributes = []
  *         if attrib is not None:             # <<<<<<<<<<<<<<
@@ -107341,7 +107365,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":717
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":718
  *         attributes = []
  *         if attrib is not None:
  *             if isinstance(attrib, (dict, _Attrib)):             # <<<<<<<<<<<<<<
@@ -107361,16 +107385,16 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
     __pyx_t_3 = (__pyx_t_4 != 0);
     if (__pyx_t_3) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":718
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":719
  *         if attrib is not None:
  *             if isinstance(attrib, (dict, _Attrib)):
  *                 attrib = attrib.items()             # <<<<<<<<<<<<<<
  *             for name, value in attrib:
  *                 if name not in _extra:
  */
-      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s__items); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_attrib, __pyx_n_s__items); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 718; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_Call(__pyx_t_1, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __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);
@@ -107379,7 +107403,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":719
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":720
  *             if isinstance(attrib, (dict, _Attrib)):
  *                 attrib = attrib.items()
  *             for name, value in attrib:             # <<<<<<<<<<<<<<
@@ -107390,7 +107414,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
       __pyx_t_5 = __pyx_v_attrib; __Pyx_INCREF(__pyx_t_5); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
     } else {
-      __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_attrib); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_attrib); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext;
     }
@@ -107398,23 +107422,23 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
       if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_5)) {
         if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_5)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_5)) {
         if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_6); __Pyx_INCREF(__pyx_t_1); __pyx_t_6++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_1 = PySequence_ITEM(__pyx_t_5, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else {
         __pyx_t_1 = __pyx_t_7(__pyx_t_5);
         if (unlikely(!__pyx_t_1)) {
           if (PyErr_Occurred()) {
             if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-            else {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            else {__pyx_filename = __pyx_f[6]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           break;
         }
@@ -107430,7 +107454,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -107443,16 +107467,16 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         __Pyx_INCREF(__pyx_t_8);
         __Pyx_INCREF(__pyx_t_9);
         #else
-        __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_8);
-        __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_9);
         #endif
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       } else
       {
         Py_ssize_t index = -1;
-        __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -107460,7 +107484,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         __Pyx_GOTREF(__pyx_t_8);
         index = 1; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L7_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_9);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_t_11 = NULL;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         goto __pyx_L8_unpacking_done;
@@ -107468,7 +107492,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __pyx_t_11 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 719; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_L8_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_8);
@@ -107476,25 +107500,25 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
       __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_9);
       __pyx_t_9 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":720
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":721
  *                 attrib = attrib.items()
  *             for name, value in attrib:
  *                 if name not in _extra:             # <<<<<<<<<<<<<<
  *                     ns, name = _getNsTag(name)
  *                     attributes.append((ns, name, _utf8(value)))
  */
-      __pyx_t_3 = (__Pyx_PyDict_Contains(__pyx_v_name, ((PyObject *)__pyx_v__extra), Py_NE)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 720; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = (__Pyx_PyDict_Contains(__pyx_v_name, ((PyObject *)__pyx_v__extra), Py_NE)); if (unlikely(__pyx_t_3 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_4 = (__pyx_t_3 != 0);
       if (__pyx_t_4) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":721
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":722
  *             for name, value in attrib:
  *                 if name not in _extra:
  *                     ns, name = _getNsTag(name)             # <<<<<<<<<<<<<<
  *                     attributes.append((ns, name, _utf8(value)))
  *         if _extra:
  */
-        __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_name)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_name)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_1);
         if (likely(PyTuple_CheckExact(__pyx_t_1))) {
           PyObject* sequence = __pyx_t_1;
@@ -107506,7 +107530,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
           if (unlikely(size != 2)) {
             if (size > 2) __Pyx_RaiseTooManyValuesError(2);
             else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-            {__pyx_filename = __pyx_f[6]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            {__pyx_filename = __pyx_f[6]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           #if CYTHON_COMPILING_IN_CPYTHON
           __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
@@ -107514,18 +107538,18 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
           __Pyx_INCREF(__pyx_t_9);
           __Pyx_INCREF(__pyx_t_8);
           #else
-          __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_9);
-          __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_8);
           #endif
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         } else if (1) {
-          __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         } else
         {
           Py_ssize_t index = -1;
-          __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_10);
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -107533,7 +107557,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
           __Pyx_GOTREF(__pyx_t_9);
           index = 1; __pyx_t_8 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_8)) goto __pyx_L10_unpacking_failed;
           __Pyx_GOTREF(__pyx_t_8);
-          if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __pyx_t_11 = NULL;
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
           goto __pyx_L11_unpacking_done;
@@ -107541,7 +107565,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
           __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
           __pyx_t_11 = NULL;
           if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 721; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __pyx_L11_unpacking_done:;
         }
         __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_9);
@@ -107549,16 +107573,16 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_8);
         __pyx_t_8 = 0;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":722
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":723
  *                 if name not in _extra:
  *                     ns, name = _getNsTag(name)
  *                     attributes.append((ns, name, _utf8(value)))             # <<<<<<<<<<<<<<
  *         if _extra:
  *             for name, value in _extra.iteritems():
  */
-        __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_8);
         __Pyx_INCREF(__pyx_v_ns);
         PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_ns);
@@ -107569,7 +107593,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_1);
         __Pyx_GIVEREF(__pyx_t_1);
         __pyx_t_1 = 0;
-        __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_attributes, ((PyObject *)__pyx_t_8)); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 722; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_attributes, ((PyObject *)__pyx_t_8)); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
         goto __pyx_L9;
       }
@@ -107580,17 +107604,17 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":723
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":724
  *                     ns, name = _getNsTag(name)
  *                     attributes.append((ns, name, _utf8(value)))
  *         if _extra:             # <<<<<<<<<<<<<<
  *             for name, value in _extra.iteritems():
  *                 ns, name = _getNsTag(name)
  */
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v__extra)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 723; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v__extra)); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_4) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":724
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":725
  *                     attributes.append((ns, name, _utf8(value)))
  *         if _extra:
  *             for name, value in _extra.iteritems():             # <<<<<<<<<<<<<<
@@ -107598,7 +107622,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
  *                 attributes.append((ns, name, _utf8(value)))
  */
     __pyx_t_6 = 0;
-    __pyx_t_8 = __Pyx_dict_iterator(((PyObject *)__pyx_v__extra), 1, ((PyObject *)__pyx_n_s__iteritems), (&__pyx_t_13), (&__pyx_t_14)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = __Pyx_dict_iterator(((PyObject *)__pyx_v__extra), 1, ((PyObject *)__pyx_n_s__iteritems), (&__pyx_t_13), (&__pyx_t_14)); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_XDECREF(__pyx_t_5);
     __pyx_t_5 = __pyx_t_8;
@@ -107606,7 +107630,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
     while (1) {
       __pyx_t_15 = __Pyx_dict_iter_next(__pyx_t_5, __pyx_t_13, &__pyx_t_6, &__pyx_t_8, &__pyx_t_1, NULL, __pyx_t_14);
       if (unlikely(__pyx_t_15 == 0)) break;
-      if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 724; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (unlikely(__pyx_t_15 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_8);
@@ -107614,14 +107638,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
       __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_1);
       __pyx_t_1 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":725
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":726
  *         if _extra:
  *             for name, value in _extra.iteritems():
  *                 ns, name = _getNsTag(name)             # <<<<<<<<<<<<<<
  *                 attributes.append((ns, name, _utf8(value)))
  *         reversed_nsmap = {}
  */
-      __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_name)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_name)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
       if (likely(PyTuple_CheckExact(__pyx_t_1))) {
         PyObject* sequence = __pyx_t_1;
@@ -107633,7 +107657,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); 
@@ -107641,18 +107665,18 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         __Pyx_INCREF(__pyx_t_8);
         __Pyx_INCREF(__pyx_t_9);
         #else
-        __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_8 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_8);
-        __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_9);
         #endif
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       } else if (1) {
-        __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       } else
       {
         Py_ssize_t index = -1;
-        __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_10 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
         __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -107660,7 +107684,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         __Pyx_GOTREF(__pyx_t_8);
         index = 1; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L15_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_9);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_t_11 = NULL;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         goto __pyx_L16_unpacking_done;
@@ -107668,7 +107692,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __pyx_t_11 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 725; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_L16_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_8);
@@ -107676,16 +107700,16 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
       __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_9);
       __pyx_t_9 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":726
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":727
  *             for name, value in _extra.iteritems():
  *                 ns, name = _getNsTag(name)
  *                 attributes.append((ns, name, _utf8(value)))             # <<<<<<<<<<<<<<
  *         reversed_nsmap = {}
  *         if nsmap:
  */
-      __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_1 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_value)); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_INCREF(__pyx_v_ns);
       PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_ns);
@@ -107696,7 +107720,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
       PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_1);
       __Pyx_GIVEREF(__pyx_t_1);
       __pyx_t_1 = 0;
-      __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_attributes, ((PyObject *)__pyx_t_9)); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 726; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_12 = __Pyx_PyList_Append(__pyx_v_attributes, ((PyObject *)__pyx_t_9)); if (unlikely(__pyx_t_12 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(((PyObject *)__pyx_t_9)); __pyx_t_9 = 0;
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -107704,45 +107728,45 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
   }
   __pyx_L12:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":727
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":728
  *                 ns, name = _getNsTag(name)
  *                 attributes.append((ns, name, _utf8(value)))
  *         reversed_nsmap = {}             # <<<<<<<<<<<<<<
  *         if nsmap:
  *             for prefix, ns in nsmap.items():
  */
-  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 727; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyDict_New(); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_5));
   __pyx_v_reversed_nsmap = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":728
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":729
  *                 attributes.append((ns, name, _utf8(value)))
  *         reversed_nsmap = {}
  *         if nsmap:             # <<<<<<<<<<<<<<
  *             for prefix, ns in nsmap.items():
  *                 if prefix is not None:
  */
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_nsmap); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 728; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_nsmap); if (unlikely(__pyx_t_4 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__pyx_t_4) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":729
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":730
  *         reversed_nsmap = {}
  *         if nsmap:
  *             for prefix, ns in nsmap.items():             # <<<<<<<<<<<<<<
  *                 if prefix is not None:
  *                     prefix = _utf8(prefix)
  */
-    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_nsmap, __pyx_n_s__items); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_nsmap, __pyx_n_s__items); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_9 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __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)) {
       __pyx_t_5 = __pyx_t_9; __Pyx_INCREF(__pyx_t_5); __pyx_t_13 = 0;
       __pyx_t_7 = NULL;
     } else {
-      __pyx_t_13 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_13 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext;
     }
@@ -107751,23 +107775,23 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
       if (!__pyx_t_7 && PyList_CheckExact(__pyx_t_5)) {
         if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_5)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_9 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_13); __Pyx_INCREF(__pyx_t_9); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_13); __Pyx_INCREF(__pyx_t_9); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else if (!__pyx_t_7 && PyTuple_CheckExact(__pyx_t_5)) {
         if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
         #if CYTHON_COMPILING_IN_CPYTHON
-        __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_13); __Pyx_INCREF(__pyx_t_9); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_13); __Pyx_INCREF(__pyx_t_9); __pyx_t_13++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #else
-        __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = PySequence_ITEM(__pyx_t_5, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         #endif
       } else {
         __pyx_t_9 = __pyx_t_7(__pyx_t_5);
         if (unlikely(!__pyx_t_9)) {
           if (PyErr_Occurred()) {
             if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) PyErr_Clear();
-            else {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+            else {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           }
           break;
         }
@@ -107783,7 +107807,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         if (unlikely(size != 2)) {
           if (size > 2) __Pyx_RaiseTooManyValuesError(2);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -107796,16 +107820,16 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         __Pyx_INCREF(__pyx_t_1);
         __Pyx_INCREF(__pyx_t_8);
         #else
-        __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_1);
-        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_8);
         #endif
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
       } else
       {
         Py_ssize_t index = -1;
-        __pyx_t_10 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_10 = PyObject_GetIter(__pyx_t_9); if (unlikely(!__pyx_t_10)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_10);
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext;
@@ -107813,7 +107837,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         __Pyx_GOTREF(__pyx_t_1);
         index = 1; __pyx_t_8 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_8)) goto __pyx_L20_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_8);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_t_11 = NULL;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         goto __pyx_L21_unpacking_done;
@@ -107821,7 +107845,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __pyx_t_11 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 729; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 730; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_L21_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_1);
@@ -107829,7 +107853,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
       __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_8);
       __pyx_t_8 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":730
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":731
  *         if nsmap:
  *             for prefix, ns in nsmap.items():
  *                 if prefix is not None:             # <<<<<<<<<<<<<<
@@ -107840,40 +107864,40 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
       __pyx_t_3 = (__pyx_t_4 != 0);
       if (__pyx_t_3) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":731
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":732
  *             for prefix, ns in nsmap.items():
  *                 if prefix is not None:
  *                     prefix = _utf8(prefix)             # <<<<<<<<<<<<<<
  *                     _prefixValidOrRaise(prefix)
  *                 reversed_nsmap[_utf8(ns)] = prefix
  */
-        __pyx_t_9 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_prefix)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 731; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_prefix)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_9);
         __pyx_t_9 = 0;
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":732
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":733
  *                 if prefix is not None:
  *                     prefix = _utf8(prefix)
  *                     _prefixValidOrRaise(prefix)             # <<<<<<<<<<<<<<
  *                 reversed_nsmap[_utf8(ns)] = prefix
  *         ns, name = _getNsTag(tag)
  */
-        __pyx_t_14 = __pyx_f_4lxml_5etree__prefixValidOrRaise(__pyx_v_prefix); if (unlikely(__pyx_t_14 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 732; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_14 = __pyx_f_4lxml_5etree__prefixValidOrRaise(__pyx_v_prefix); if (unlikely(__pyx_t_14 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         goto __pyx_L22;
       }
       __pyx_L22:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":733
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":734
  *                     prefix = _utf8(prefix)
  *                     _prefixValidOrRaise(prefix)
  *                 reversed_nsmap[_utf8(ns)] = prefix             # <<<<<<<<<<<<<<
  *         ns, name = _getNsTag(tag)
  *         return _FileWriterElement(self, (ns, name, attributes, reversed_nsmap))
  */
-      __pyx_t_9 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_ns)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_9 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_ns)); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_9);
-      if (PyDict_SetItem(((PyObject *)__pyx_v_reversed_nsmap), __pyx_t_9, __pyx_v_prefix) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 733; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (PyDict_SetItem(((PyObject *)__pyx_v_reversed_nsmap), __pyx_t_9, __pyx_v_prefix) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -107881,14 +107905,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
   }
   __pyx_L17:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":734
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":735
  *                     _prefixValidOrRaise(prefix)
  *                 reversed_nsmap[_utf8(ns)] = prefix
  *         ns, name = _getNsTag(tag)             # <<<<<<<<<<<<<<
  *         return _FileWriterElement(self, (ns, name, attributes, reversed_nsmap))
  * 
  */
-  __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_tag)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = ((PyObject *)__pyx_f_4lxml_5etree__getNsTag(__pyx_v_tag)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   if (likely(PyTuple_CheckExact(__pyx_t_5))) {
     PyObject* sequence = __pyx_t_5;
@@ -107900,7 +107924,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
@@ -107908,18 +107932,18 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
     __Pyx_INCREF(__pyx_t_9);
     __Pyx_INCREF(__pyx_t_8);
     #else
-    __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
     #endif
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else if (1) {
-    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __Pyx_RaiseNoneNotIterableError(); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   } else
   {
     Py_ssize_t index = -1;
-    __pyx_t_1 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_11 = Py_TYPE(__pyx_t_1)->tp_iternext;
@@ -107927,7 +107951,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
     __Pyx_GOTREF(__pyx_t_9);
     index = 1; __pyx_t_8 = __pyx_t_11(__pyx_t_1); if (unlikely(!__pyx_t_8)) goto __pyx_L23_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_8);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_1), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_1), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_11 = NULL;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     goto __pyx_L24_unpacking_done;
@@ -107935,7 +107959,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     __pyx_t_11 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 734; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_L24_unpacking_done:;
   }
   __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_9);
@@ -107943,7 +107967,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
   __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_8);
   __pyx_t_8 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":735
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":736
  *                 reversed_nsmap[_utf8(ns)] = prefix
  *         ns, name = _getNsTag(tag)
  *         return _FileWriterElement(self, (ns, name, attributes, reversed_nsmap))             # <<<<<<<<<<<<<<
@@ -107951,7 +107975,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
  *     cdef _write_qname(self, bytes name, bytes prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_ns);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_ns);
@@ -107965,7 +107989,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
   __Pyx_INCREF(((PyObject *)__pyx_v_reversed_nsmap));
   PyTuple_SET_ITEM(__pyx_t_5, 3, ((PyObject *)__pyx_v_reversed_nsmap));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_reversed_nsmap));
-  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_v_self));
@@ -107973,7 +107997,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
   PyTuple_SET_ITEM(__pyx_t_8, 1, ((PyObject *)__pyx_t_5));
   __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
   __pyx_t_5 = 0;
-  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FileWriterElement)), ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 735; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyObject_Call(((PyObject *)((PyObject*)__pyx_ptype_4lxml_5etree__FileWriterElement)), ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 736; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
   __pyx_r = __pyx_t_5;
@@ -108003,7 +108027,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_8element(struct
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":737
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":738
  *         return _FileWriterElement(self, (ns, name, attributes, reversed_nsmap))
  * 
  *     cdef _write_qname(self, bytes name, bytes prefix):             # <<<<<<<<<<<<<<
@@ -108022,7 +108046,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(stru
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_write_qname", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":738
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":739
  * 
  *     cdef _write_qname(self, bytes name, bytes prefix):
  *         if prefix is not None:             # <<<<<<<<<<<<<<
@@ -108033,7 +108057,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(stru
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":739
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":740
  *     cdef _write_qname(self, bytes name, bytes prefix):
  *         if prefix is not None:
  *             tree.xmlOutputBufferWrite(self._c_out, len(prefix), _cstr(prefix))             # <<<<<<<<<<<<<<
@@ -108042,12 +108066,12 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(stru
  */
     if (unlikely(((PyObject *)__pyx_v_prefix) == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_3 = PyBytes_GET_SIZE(((PyObject *)__pyx_v_prefix)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 739; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyBytes_GET_SIZE(((PyObject *)__pyx_v_prefix)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 740; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     xmlOutputBufferWrite(__pyx_v_self->_c_out, __pyx_t_3, PyBytes_AS_STRING(((PyObject *)__pyx_v_prefix)));
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":740
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":741
  *         if prefix is not None:
  *             tree.xmlOutputBufferWrite(self._c_out, len(prefix), _cstr(prefix))
  *             tree.xmlOutputBufferWrite(self._c_out, 1, ':')             # <<<<<<<<<<<<<<
@@ -108059,7 +108083,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(stru
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":741
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":742
  *             tree.xmlOutputBufferWrite(self._c_out, len(prefix), _cstr(prefix))
  *             tree.xmlOutputBufferWrite(self._c_out, 1, ':')
  *         tree.xmlOutputBufferWrite(self._c_out, len(name), _cstr(name))             # <<<<<<<<<<<<<<
@@ -108068,9 +108092,9 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(stru
  */
   if (unlikely(((PyObject *)__pyx_v_name) == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 742; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_3 = PyBytes_GET_SIZE(((PyObject *)__pyx_v_name)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 741; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = PyBytes_GET_SIZE(((PyObject *)__pyx_v_name)); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 742; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   xmlOutputBufferWrite(__pyx_v_self->_c_out, __pyx_t_3, PyBytes_AS_STRING(((PyObject *)__pyx_v_name)));
 
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
@@ -108084,7 +108108,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(stru
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":743
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":744
  *         tree.xmlOutputBufferWrite(self._c_out, len(name), _cstr(name))
  * 
  *     cdef _write_start_element(self, element_config):             # <<<<<<<<<<<<<<
@@ -108115,7 +108139,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_write_start_element", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":744
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":745
  * 
  *     cdef _write_start_element(self, element_config):
  *         if self._status > WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -108125,26 +108149,26 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   __pyx_t_1 = ((__pyx_v_self->_status > __pyx_e_4lxml_5etree_WRITER_IN_ELEMENT) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":745
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":746
  *     cdef _write_start_element(self, element_config):
  *         if self._status > WRITER_IN_ELEMENT:
  *             raise LxmlSyntaxError("cannot append trailing element to complete XML document")             # <<<<<<<<<<<<<<
  *         ns, name, attributes, nsmap = element_config
  *         flat_namespace_map, new_namespaces = self._collect_namespaces(nsmap)
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_259), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_259), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 746; __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);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":746
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":747
  *         if self._status > WRITER_IN_ELEMENT:
  *             raise LxmlSyntaxError("cannot append trailing element to complete XML document")
  *         ns, name, attributes, nsmap = element_config             # <<<<<<<<<<<<<<
@@ -108161,7 +108185,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     if (unlikely(size != 4)) {
       if (size > 4) __Pyx_RaiseTooManyValuesError(4);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -108183,7 +108207,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     Py_ssize_t i;
     PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_2,&__pyx_t_4,&__pyx_t_5};
     for (i=0; i < 4; i++) {
-      PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(item);
       *(temps[i]) = item;
     }
@@ -108192,7 +108216,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   {
     Py_ssize_t index = -1;
     PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_2,&__pyx_t_4,&__pyx_t_5};
-    __pyx_t_6 = PyObject_GetIter(__pyx_v_element_config); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = PyObject_GetIter(__pyx_v_element_config); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
     for (index=0; index < 4; index++) {
@@ -108200,7 +108224,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
       __Pyx_GOTREF(item);
       *(temps[index]) = item;
     }
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_7 = NULL;
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     goto __pyx_L5_unpacking_done;
@@ -108208,7 +108232,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     __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 = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_L5_unpacking_done:;
   }
   __pyx_v_ns = __pyx_t_3;
@@ -108220,15 +108244,15 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   __pyx_v_nsmap = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":747
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":748
  *             raise LxmlSyntaxError("cannot append trailing element to complete XML document")
  *         ns, name, attributes, nsmap = element_config
  *         flat_namespace_map, new_namespaces = self._collect_namespaces(nsmap)             # <<<<<<<<<<<<<<
  *         prefix = self._find_prefix(ns, flat_namespace_map, new_namespaces)
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '<')
  */
-  if (!(likely(PyDict_CheckExact(__pyx_v_nsmap))||((__pyx_v_nsmap) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected dict, got %.200s", Py_TYPE(__pyx_v_nsmap)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespaces(__pyx_v_self, ((PyObject*)__pyx_v_nsmap)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyDict_CheckExact(__pyx_v_nsmap))||((__pyx_v_nsmap) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected dict, got %.200s", Py_TYPE(__pyx_v_nsmap)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespaces(__pyx_v_self, ((PyObject*)__pyx_v_nsmap)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
     PyObject* sequence = __pyx_t_5;
@@ -108240,7 +108264,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -108253,16 +108277,16 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     __Pyx_INCREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_t_2);
     #else
-    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     #endif
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else
   {
     Py_ssize_t index = -1;
-    __pyx_t_3 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_7 = Py_TYPE(__pyx_t_3)->tp_iternext;
@@ -108270,7 +108294,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     __Pyx_GOTREF(__pyx_t_4);
     index = 1; __pyx_t_2 = __pyx_t_7(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L6_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_2);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_3), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_7 = NULL;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L7_unpacking_done;
@@ -108278,7 +108302,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_t_7 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 747; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_L7_unpacking_done:;
   }
   __pyx_v_flat_namespace_map = __pyx_t_4;
@@ -108286,22 +108310,22 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   __pyx_v_new_namespaces = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":748
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":749
  *         ns, name, attributes, nsmap = element_config
  *         flat_namespace_map, new_namespaces = self._collect_namespaces(nsmap)
  *         prefix = self._find_prefix(ns, flat_namespace_map, new_namespaces)             # <<<<<<<<<<<<<<
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '<')
  *         self._write_qname(name, prefix)
  */
-  if (!(likely(PyBytes_CheckExact(__pyx_v_ns))||((__pyx_v_ns) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_ns)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (!(likely(PyDict_CheckExact(__pyx_v_flat_namespace_map))||((__pyx_v_flat_namespace_map) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected dict, got %.200s", Py_TYPE(__pyx_v_flat_namespace_map)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (!(likely(PyList_CheckExact(__pyx_v_new_namespaces))||((__pyx_v_new_namespaces) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected list, got %.200s", Py_TYPE(__pyx_v_new_namespaces)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(__pyx_v_self, ((PyObject*)__pyx_v_ns), ((PyObject*)__pyx_v_flat_namespace_map), ((PyObject*)__pyx_v_new_namespaces)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 748; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyBytes_CheckExact(__pyx_v_ns))||((__pyx_v_ns) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_ns)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyDict_CheckExact(__pyx_v_flat_namespace_map))||((__pyx_v_flat_namespace_map) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected dict, got %.200s", Py_TYPE(__pyx_v_flat_namespace_map)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyList_CheckExact(__pyx_v_new_namespaces))||((__pyx_v_new_namespaces) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected list, got %.200s", Py_TYPE(__pyx_v_new_namespaces)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(__pyx_v_self, ((PyObject*)__pyx_v_ns), ((PyObject*)__pyx_v_flat_namespace_map), ((PyObject*)__pyx_v_new_namespaces)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 749; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_v_prefix = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":749
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":750
  *         flat_namespace_map, new_namespaces = self._collect_namespaces(nsmap)
  *         prefix = self._find_prefix(ns, flat_namespace_map, new_namespaces)
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '<')             # <<<<<<<<<<<<<<
@@ -108310,34 +108334,34 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  */
   xmlOutputBufferWrite(__pyx_v_self->_c_out, 1, __pyx_k_260);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":750
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":751
  *         prefix = self._find_prefix(ns, flat_namespace_map, new_namespaces)
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '<')
  *         self._write_qname(name, prefix)             # <<<<<<<<<<<<<<
  *         self._write_attributes_and_namespaces(
  *             attributes, flat_namespace_map, new_namespaces)
  */
-  if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_name)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 750; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 750; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(__pyx_v_self, ((PyObject*)__pyx_v_name), ((PyObject*)__pyx_v_prefix)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 750; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_name)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(__pyx_v_self, ((PyObject*)__pyx_v_name), ((PyObject*)__pyx_v_prefix)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":752
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":753
  *         self._write_qname(name, prefix)
  *         self._write_attributes_and_namespaces(
  *             attributes, flat_namespace_map, new_namespaces)             # <<<<<<<<<<<<<<
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '>')
  *         self._handle_error(self._c_out.error)
  */
-  if (!(likely(PyList_CheckExact(__pyx_v_attributes))||((__pyx_v_attributes) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected list, got %.200s", Py_TYPE(__pyx_v_attributes)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (!(likely(PyDict_CheckExact(__pyx_v_flat_namespace_map))||((__pyx_v_flat_namespace_map) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected dict, got %.200s", Py_TYPE(__pyx_v_flat_namespace_map)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (!(likely(PyList_CheckExact(__pyx_v_new_namespaces))||((__pyx_v_new_namespaces) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected list, got %.200s", Py_TYPE(__pyx_v_new_namespaces)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_and_namespaces(__pyx_v_self, ((PyObject*)__pyx_v_attributes), ((PyObject*)__pyx_v_flat_namespace_map), ((PyObject*)__pyx_v_new_namespaces)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 751; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyList_CheckExact(__pyx_v_attributes))||((__pyx_v_attributes) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected list, got %.200s", Py_TYPE(__pyx_v_attributes)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 753; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyDict_CheckExact(__pyx_v_flat_namespace_map))||((__pyx_v_flat_namespace_map) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected dict, got %.200s", Py_TYPE(__pyx_v_flat_namespace_map)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 753; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyList_CheckExact(__pyx_v_new_namespaces))||((__pyx_v_new_namespaces) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected list, got %.200s", Py_TYPE(__pyx_v_new_namespaces)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 753; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_and_namespaces(__pyx_v_self, ((PyObject*)__pyx_v_attributes), ((PyObject*)__pyx_v_flat_namespace_map), ((PyObject*)__pyx_v_new_namespaces)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 752; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":753
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":754
  *         self._write_attributes_and_namespaces(
  *             attributes, flat_namespace_map, new_namespaces)
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '>')             # <<<<<<<<<<<<<<
@@ -108346,18 +108370,18 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  */
   xmlOutputBufferWrite(__pyx_v_self->_c_out, 1, __pyx_k_261);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":754
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":755
  *             attributes, flat_namespace_map, new_namespaces)
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '>')
  *         self._handle_error(self._c_out.error)             # <<<<<<<<<<<<<<
  * 
  *         self._element_stack.append((ns, name, prefix, flat_namespace_map))
  */
-  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 754; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 755; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":756
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":757
  *         self._handle_error(self._c_out.error)
  * 
  *         self._element_stack.append((ns, name, prefix, flat_namespace_map))             # <<<<<<<<<<<<<<
@@ -108366,9 +108390,9 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
  */
   if (unlikely(((PyObject *)__pyx_v_self->_element_stack) == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append");
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 756; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 756; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_ns);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_ns);
@@ -108382,10 +108406,10 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   __Pyx_INCREF(__pyx_v_flat_namespace_map);
   PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_v_flat_namespace_map);
   __Pyx_GIVEREF(__pyx_v_flat_namespace_map);
-  __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_self->_element_stack, ((PyObject *)__pyx_t_5)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 756; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_8 = __Pyx_PyList_Append(__pyx_v_self->_element_stack, ((PyObject *)__pyx_t_5)); if (unlikely(__pyx_t_8 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 757; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":757
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":758
  * 
  *         self._element_stack.append((ns, name, prefix, flat_namespace_map))
  *         self._status = WRITER_IN_ELEMENT             # <<<<<<<<<<<<<<
@@ -108417,7 +108441,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_elem
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":759
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":760
  *         self._status = WRITER_IN_ELEMENT
  * 
  *     cdef _write_attributes_and_namespaces(self, list attributes,             # <<<<<<<<<<<<<<
@@ -108448,7 +108472,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   __Pyx_RefNannySetupContext("_write_attributes_and_namespaces", 0);
   __Pyx_INCREF(__pyx_v_attributes);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":762
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":763
  *                                           dict flat_namespace_map,
  *                                           list new_namespaces):
  *         if attributes:             # <<<<<<<<<<<<<<
@@ -108458,17 +108482,17 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   __pyx_t_1 = (((PyObject *)__pyx_v_attributes) != Py_None) && (PyList_GET_SIZE(((PyObject *)__pyx_v_attributes)) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":764
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":765
  *         if attributes:
  *             # _find_prefix() may append to new_namespaces => build them first
  *             attributes = [             # <<<<<<<<<<<<<<
  *                 (self._find_prefix(ns, flat_namespace_map, new_namespaces), name, value)
  *                 for ns, name, value in attributes ]
  */
-    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":766
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":767
  *             attributes = [
  *                 (self._find_prefix(ns, flat_namespace_map, new_namespaces), name, value)
  *                 for ns, name, value in attributes ]             # <<<<<<<<<<<<<<
@@ -108477,15 +108501,15 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
     if (unlikely(((PyObject *)__pyx_v_attributes) == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __pyx_t_3 = ((PyObject *)__pyx_v_attributes); __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
     for (;;) {
       if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
       #if CYTHON_COMPILING_IN_CPYTHON
-      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_5); __pyx_t_4++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       #else
-      __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       #endif
       if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
         PyObject* sequence = __pyx_t_5;
@@ -108497,7 +108521,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
         if (unlikely(size != 3)) {
           if (size > 3) __Pyx_RaiseTooManyValuesError(3);
           else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         }
         #if CYTHON_COMPILING_IN_CPYTHON
         if (likely(PyTuple_CheckExact(sequence))) {
@@ -108513,18 +108537,18 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
         __Pyx_INCREF(__pyx_t_7);
         __Pyx_INCREF(__pyx_t_8);
         #else
-        __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 767; __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[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_8);
         #endif
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       } else
       {
         Py_ssize_t index = -1;
-        __pyx_t_9 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_9 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_9)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_9);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
@@ -108534,7 +108558,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
         __Pyx_GOTREF(__pyx_t_7);
         index = 2; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L6_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_8);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 3) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 3) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         goto __pyx_L7_unpacking_done;
@@ -108542,7 +108566,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 767; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __pyx_L7_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_6);
@@ -108552,17 +108576,17 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
       __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_8);
       __pyx_t_8 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":765
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":766
  *             # _find_prefix() may append to new_namespaces => build them first
  *             attributes = [
  *                 (self._find_prefix(ns, flat_namespace_map, new_namespaces), name, value)             # <<<<<<<<<<<<<<
  *                 for ns, name, value in attributes ]
  *         if new_namespaces:
  */
-      if (!(likely(PyBytes_CheckExact(__pyx_v_ns))||((__pyx_v_ns) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_ns)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(__pyx_v_self, ((PyObject*)__pyx_v_ns), __pyx_v_flat_namespace_map, __pyx_v_new_namespaces); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (!(likely(PyBytes_CheckExact(__pyx_v_ns))||((__pyx_v_ns) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_ns)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(__pyx_v_self, ((PyObject*)__pyx_v_ns), __pyx_v_flat_namespace_map, __pyx_v_new_namespaces); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 766; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_8);
       PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5);
       __Pyx_GIVEREF(__pyx_t_5);
@@ -108573,7 +108597,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
       PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_v_value);
       __Pyx_GIVEREF(__pyx_v_value);
       __pyx_t_5 = 0;
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_8))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 764; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_8))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 765; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
@@ -108583,7 +108607,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":767
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":768
  *                 (self._find_prefix(ns, flat_namespace_map, new_namespaces), name, value)
  *                 for ns, name, value in attributes ]
  *         if new_namespaces:             # <<<<<<<<<<<<<<
@@ -108593,7 +108617,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   __pyx_t_1 = (((PyObject *)__pyx_v_new_namespaces) != Py_None) && (PyList_GET_SIZE(((PyObject *)__pyx_v_new_namespaces)) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":768
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":769
  *                 for ns, name, value in attributes ]
  *         if new_namespaces:
  *             new_namespaces.sort()             # <<<<<<<<<<<<<<
@@ -108602,25 +108626,25 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
     if (unlikely(((PyObject *)__pyx_v_new_namespaces) == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "sort");
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_11 = PyList_Sort(((PyObject *)__pyx_v_new_namespaces)); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 768; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_11 = PyList_Sort(((PyObject *)__pyx_v_new_namespaces)); if (unlikely(__pyx_t_11 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":769
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":770
  *         if new_namespaces:
  *             new_namespaces.sort()
  *             self._write_attributes_list(new_namespaces)             # <<<<<<<<<<<<<<
  *         if attributes:
  *             self._write_attributes_list(attributes)
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_list(__pyx_v_self, __pyx_v_new_namespaces); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 769; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_list(__pyx_v_self, __pyx_v_new_namespaces); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 770; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     goto __pyx_L8;
   }
   __pyx_L8:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":770
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":771
  *             new_namespaces.sort()
  *             self._write_attributes_list(new_namespaces)
  *         if attributes:             # <<<<<<<<<<<<<<
@@ -108630,14 +108654,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   __pyx_t_1 = (((PyObject *)__pyx_v_attributes) != Py_None) && (PyList_GET_SIZE(((PyObject *)__pyx_v_attributes)) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":771
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":772
  *             self._write_attributes_list(new_namespaces)
  *         if attributes:
  *             self._write_attributes_list(attributes)             # <<<<<<<<<<<<<<
  * 
  *     cdef _write_attributes_list(self, list attributes):
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_list(__pyx_v_self, __pyx_v_attributes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 771; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes_list(__pyx_v_self, __pyx_v_attributes); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 772; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     goto __pyx_L9;
@@ -108666,7 +108690,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":773
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":774
  *             self._write_attributes_list(attributes)
  * 
  *     cdef _write_attributes_list(self, list attributes):             # <<<<<<<<<<<<<<
@@ -108693,7 +108717,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_write_attributes_list", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":774
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":775
  * 
  *     cdef _write_attributes_list(self, list attributes):
  *         for prefix, name, value in attributes:             # <<<<<<<<<<<<<<
@@ -108702,15 +108726,15 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
   if (unlikely(((PyObject *)__pyx_v_attributes) == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   __pyx_t_1 = ((PyObject *)__pyx_v_attributes); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
   for (;;) {
     if (__pyx_t_2 >= PyList_GET_SIZE(__pyx_t_1)) break;
     #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     #else
-    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
       PyObject* sequence = __pyx_t_3;
@@ -108722,7 +108746,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
       if (unlikely(size != 3)) {
         if (size > 3) __Pyx_RaiseTooManyValuesError(3);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
       #if CYTHON_COMPILING_IN_CPYTHON
       if (likely(PyTuple_CheckExact(sequence))) {
@@ -108738,18 +108762,18 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
       __Pyx_INCREF(__pyx_t_5);
       __Pyx_INCREF(__pyx_t_6);
       #else
-      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       #endif
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     } else
     {
       Py_ssize_t index = -1;
-      __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -108759,7 +108783,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
       __Pyx_GOTREF(__pyx_t_5);
       index = 2; __pyx_t_6 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_6);
-      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_t_8 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L6_unpacking_done;
@@ -108767,7 +108791,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       __pyx_t_8 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 774; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 775; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __pyx_L6_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_4);
@@ -108777,7 +108801,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
     __Pyx_XDECREF_SET(__pyx_v_value, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":775
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":776
  *     cdef _write_attributes_list(self, list attributes):
  *         for prefix, name, value in attributes:
  *             tree.xmlOutputBufferWrite(self._c_out, 1, ' ')             # <<<<<<<<<<<<<<
@@ -108786,20 +108810,20 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
     xmlOutputBufferWrite(__pyx_v_self->_c_out, 1, __pyx_k_17);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":776
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":777
  *         for prefix, name, value in attributes:
  *             tree.xmlOutputBufferWrite(self._c_out, 1, ' ')
  *             self._write_qname(name, prefix)             # <<<<<<<<<<<<<<
  *             tree.xmlOutputBufferWrite(self._c_out, 2, '="')
  *             tree.xmlOutputBufferWriteEscape(self._c_out, _xcstr(value), NULL)
  */
-    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_name)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 776; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 776; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __pyx_t_3 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(__pyx_v_self, ((PyObject*)__pyx_v_name), ((PyObject*)__pyx_v_prefix)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 776; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_name)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 777; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(__pyx_v_self, ((PyObject*)__pyx_v_name), ((PyObject*)__pyx_v_prefix)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 777; __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/serializer.pxi":777
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":778
  *             tree.xmlOutputBufferWrite(self._c_out, 1, ' ')
  *             self._write_qname(name, prefix)
  *             tree.xmlOutputBufferWrite(self._c_out, 2, '="')             # <<<<<<<<<<<<<<
@@ -108808,7 +108832,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
     xmlOutputBufferWrite(__pyx_v_self->_c_out, 2, __pyx_k_262);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":778
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":779
  *             self._write_qname(name, prefix)
  *             tree.xmlOutputBufferWrite(self._c_out, 2, '="')
  *             tree.xmlOutputBufferWriteEscape(self._c_out, _xcstr(value), NULL)             # <<<<<<<<<<<<<<
@@ -108817,7 +108841,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
  */
     xmlOutputBufferWriteEscape(__pyx_v_self->_c_out, (const xmlChar*)PyBytes_AS_STRING(__pyx_v_value), NULL);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":779
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":780
  *             tree.xmlOutputBufferWrite(self._c_out, 2, '="')
  *             tree.xmlOutputBufferWriteEscape(self._c_out, _xcstr(value), NULL)
  *             tree.xmlOutputBufferWrite(self._c_out, 1, '"')             # <<<<<<<<<<<<<<
@@ -108848,7 +108872,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_attributes
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":781
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":782
  *             tree.xmlOutputBufferWrite(self._c_out, 1, '"')
  * 
  *     cdef _write_end_element(self, element_config):             # <<<<<<<<<<<<<<
@@ -108874,7 +108898,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_write_end_element", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":782
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":783
  * 
  *     cdef _write_end_element(self, element_config):
  *         if self._status != WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -108884,26 +108908,26 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   __pyx_t_1 = ((__pyx_v_self->_status != __pyx_e_4lxml_5etree_WRITER_IN_ELEMENT) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":783
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":784
  *     cdef _write_end_element(self, element_config):
  *         if self._status != WRITER_IN_ELEMENT:
  *             raise LxmlSyntaxError("not in an element")             # <<<<<<<<<<<<<<
  *         if not self._element_stack or self._element_stack[-1][:2] != element_config[:2]:
  *             raise LxmlSyntaxError("inconsistent exit action in context manager")
  */
-    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_264), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_264), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __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);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L3;
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":784
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":785
  *         if self._status != WRITER_IN_ELEMENT:
  *             raise LxmlSyntaxError("not in an element")
  *         if not self._element_stack or self._element_stack[-1][:2] != element_config[:2]:             # <<<<<<<<<<<<<<
@@ -108915,19 +108939,19 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   if (!__pyx_t_4) {
     if (unlikely(((PyObject *)__pyx_v_self->_element_stack) == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_3 = __Pyx_GetItemInt_List(((PyObject *)__pyx_v_self->_element_stack), -1, sizeof(long), PyInt_FromLong, 1, 1, 1); if (!__pyx_t_3) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetItemInt_List(((PyObject *)__pyx_v_self->_element_stack), -1, sizeof(long), PyInt_FromLong, 1, 1, 1); if (!__pyx_t_3) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_t_3, 0, 2, NULL, NULL, &__pyx_k_slice_265, 0, 1, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __Pyx_PyObject_GetSlice(__pyx_t_3, 0, 2, NULL, NULL, &__pyx_k_slice_265, 0, 1, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_element_config, 0, 2, NULL, NULL, &__pyx_k_slice_266, 0, 1, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyObject_GetSlice(__pyx_v_element_config, 0, 2, NULL, NULL, &__pyx_k_slice_266, 0, 1, 1); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_NE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_6 = __pyx_t_1;
   } else {
@@ -108935,35 +108959,35 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   }
   if (__pyx_t_6) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":785
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":786
  *             raise LxmlSyntaxError("not in an element")
  *         if not self._element_stack or self._element_stack[-1][:2] != element_config[:2]:
  *             raise LxmlSyntaxError("inconsistent exit action in context manager")             # <<<<<<<<<<<<<<
  * 
  *         name, prefix = self._element_stack.pop()[1:3]
  */
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_3 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_k_tuple_268), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_k_tuple_268), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 786; __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);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     goto __pyx_L4;
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":787
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":788
  *             raise LxmlSyntaxError("inconsistent exit action in context manager")
  * 
  *         name, prefix = self._element_stack.pop()[1:3]             # <<<<<<<<<<<<<<
  *         tree.xmlOutputBufferWrite(self._c_out, 2, '</')
  *         self._write_qname(name, prefix)
  */
-  __pyx_t_3 = __Pyx_PyObject_Pop(((PyObject *)__pyx_v_self->_element_stack)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyObject_Pop(((PyObject *)__pyx_v_self->_element_stack)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_t_3, 1, 3, NULL, NULL, &__pyx_k_slice_269, 1, 1, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_t_3, 1, 3, NULL, NULL, &__pyx_k_slice_269, 1, 1, 1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
@@ -108976,7 +109000,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     #if CYTHON_COMPILING_IN_CPYTHON
     if (likely(PyTuple_CheckExact(sequence))) {
@@ -108989,16 +109013,16 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
     __Pyx_INCREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_t_2);
     #else
-    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 787; __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 = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     #endif
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   } else
   {
     Py_ssize_t index = -1;
-    __pyx_t_7 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_8 = Py_TYPE(__pyx_t_7)->tp_iternext;
@@ -109006,7 +109030,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
     __Pyx_GOTREF(__pyx_t_3);
     index = 1; __pyx_t_2 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
     __Pyx_GOTREF(__pyx_t_2);
-    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -109014,7 +109038,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     __pyx_t_8 = NULL;
     if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_name = __pyx_t_3;
@@ -109022,7 +109046,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   __pyx_v_prefix = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":788
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":789
  * 
  *         name, prefix = self._element_stack.pop()[1:3]
  *         tree.xmlOutputBufferWrite(self._c_out, 2, '</')             # <<<<<<<<<<<<<<
@@ -109031,20 +109055,20 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
   xmlOutputBufferWrite(__pyx_v_self->_c_out, 2, __pyx_k_270);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":789
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":790
  *         name, prefix = self._element_stack.pop()[1:3]
  *         tree.xmlOutputBufferWrite(self._c_out, 2, '</')
  *         self._write_qname(name, prefix)             # <<<<<<<<<<<<<<
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '>')
  * 
  */
-  if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_name)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(__pyx_v_self, ((PyObject*)__pyx_v_name), ((PyObject*)__pyx_v_prefix)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 789; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyBytes_CheckExact(__pyx_v_name))||((__pyx_v_name) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_name)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (!(likely(PyBytes_CheckExact(__pyx_v_prefix))||((__pyx_v_prefix) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected bytes, got %.200s", Py_TYPE(__pyx_v_prefix)->tp_name), 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_qname(__pyx_v_self, ((PyObject*)__pyx_v_name), ((PyObject*)__pyx_v_prefix)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 790; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":790
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":791
  *         tree.xmlOutputBufferWrite(self._c_out, 2, '</')
  *         self._write_qname(name, prefix)
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '>')             # <<<<<<<<<<<<<<
@@ -109053,7 +109077,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
  */
   xmlOutputBufferWrite(__pyx_v_self->_c_out, 1, __pyx_k_261);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":792
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":793
  *         tree.xmlOutputBufferWrite(self._c_out, 1, '>')
  * 
  *         if not self._element_stack:             # <<<<<<<<<<<<<<
@@ -109064,7 +109088,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   __pyx_t_4 = ((!__pyx_t_6) != 0);
   if (__pyx_t_4) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":793
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":794
  * 
  *         if not self._element_stack:
  *             self._status = WRITER_FINISHED             # <<<<<<<<<<<<<<
@@ -109076,14 +109100,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   }
   __pyx_L7:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":794
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":795
  *         if not self._element_stack:
  *             self._status = WRITER_FINISHED
  *         self._handle_error(self._c_out.error)             # <<<<<<<<<<<<<<
  * 
  *     cdef _find_prefix(self, bytes href, dict flat_namespaces_map, list new_namespaces):
  */
-  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 794; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 795; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
@@ -109104,7 +109128,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_elemen
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":796
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":797
  *         self._handle_error(self._c_out.error)
  * 
  *     cdef _find_prefix(self, bytes href, dict flat_namespaces_map, list new_namespaces):             # <<<<<<<<<<<<<<
@@ -109128,7 +109152,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_find_prefix", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":797
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":798
  * 
  *     cdef _find_prefix(self, bytes href, dict flat_namespaces_map, list new_namespaces):
  *         if href is None:             # <<<<<<<<<<<<<<
@@ -109139,7 +109163,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":798
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":799
  *     cdef _find_prefix(self, bytes href, dict flat_namespaces_map, list new_namespaces):
  *         if href is None:
  *             return None             # <<<<<<<<<<<<<<
@@ -109154,7 +109178,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":799
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":800
  *         if href is None:
  *             return None
  *         if href in flat_namespaces_map:             # <<<<<<<<<<<<<<
@@ -109163,13 +109187,13 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
  */
   if (unlikely(((PyObject *)__pyx_v_flat_namespaces_map) == Py_None)) {
     PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_2 = (__Pyx_PyDict_Contains(((PyObject *)__pyx_v_href), ((PyObject *)__pyx_v_flat_namespaces_map), Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 799; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = (__Pyx_PyDict_Contains(((PyObject *)__pyx_v_href), ((PyObject *)__pyx_v_flat_namespaces_map), Py_EQ)); if (unlikely(__pyx_t_2 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 800; __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/serializer.pxi":800
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":801
  *             return None
  *         if href in flat_namespaces_map:
  *             return flat_namespaces_map[href]             # <<<<<<<<<<<<<<
@@ -109179,9 +109203,9 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
     __Pyx_XDECREF(__pyx_r);
     if (unlikely(((PyObject *)__pyx_v_flat_namespaces_map) == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_3 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_flat_namespaces_map), ((PyObject *)__pyx_v_href)); if (!__pyx_t_3) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 800; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_PyDict_GetItem(((PyObject *)__pyx_v_flat_namespaces_map), ((PyObject *)__pyx_v_href)); if (!__pyx_t_3) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 801; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
@@ -109190,7 +109214,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
   }
   __pyx_L4:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":802
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":803
  *             return flat_namespaces_map[href]
  *         # need to create a new prefix
  *         prefixes = flat_namespaces_map.values()             # <<<<<<<<<<<<<<
@@ -109199,14 +109223,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
  */
   if (unlikely(((PyObject *)__pyx_v_flat_namespaces_map) == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "values");
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 803; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_3 = __Pyx_PyDict_Values(__pyx_v_flat_namespaces_map); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 802; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_3 = __Pyx_PyDict_Values(__pyx_v_flat_namespaces_map); 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_v_prefixes = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":803
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":804
  *         # need to create a new prefix
  *         prefixes = flat_namespaces_map.values()
  *         i = 0             # <<<<<<<<<<<<<<
@@ -109216,7 +109240,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
   __Pyx_INCREF(__pyx_int_0);
   __pyx_v_i = __pyx_int_0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":804
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":805
  *         prefixes = flat_namespaces_map.values()
  *         i = 0
  *         while True:             # <<<<<<<<<<<<<<
@@ -109226,33 +109250,33 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
   while (1) {
     if (!1) break;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":805
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":806
  *         i = 0
  *         while True:
  *             prefix = _utf8('ns%d' % i)             # <<<<<<<<<<<<<<
  *             if prefix not in prefixes:
  *                 new_namespaces.append((b'xmlns', prefix, href))
  */
-    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_62), __pyx_v_i); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 805; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_62), __pyx_v_i); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 806; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(((PyObject *)__pyx_t_3));
-    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(((PyObject *)__pyx_t_3))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 805; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(((PyObject *)__pyx_t_3))); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 806; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(((PyObject *)__pyx_t_3)); __pyx_t_3 = 0;
     __Pyx_XDECREF_SET(__pyx_v_prefix, ((PyObject*)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":806
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":807
  *         while True:
  *             prefix = _utf8('ns%d' % i)
  *             if prefix not in prefixes:             # <<<<<<<<<<<<<<
  *                 new_namespaces.append((b'xmlns', prefix, href))
  *                 flat_namespaces_map[href] = prefix
  */
-    __pyx_t_1 = (__Pyx_PySequence_Contains(((PyObject *)__pyx_v_prefix), __pyx_v_prefixes, Py_NE)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 806; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_1 = (__Pyx_PySequence_Contains(((PyObject *)__pyx_v_prefix), __pyx_v_prefixes, Py_NE)); if (unlikely(__pyx_t_1 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 807; __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/serializer.pxi":807
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":808
  *             prefix = _utf8('ns%d' % i)
  *             if prefix not in prefixes:
  *                 new_namespaces.append((b'xmlns', prefix, href))             # <<<<<<<<<<<<<<
@@ -109261,9 +109285,9 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
  */
       if (unlikely(((PyObject *)__pyx_v_new_namespaces) == Py_None)) {
         PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append");
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_INCREF(((PyObject *)__pyx_n_b__xmlns));
       PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_n_b__xmlns));
@@ -109274,10 +109298,10 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
       __Pyx_INCREF(((PyObject *)__pyx_v_href));
       PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_href));
       __Pyx_GIVEREF(((PyObject *)__pyx_v_href));
-      __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_new_namespaces, ((PyObject *)__pyx_t_4)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 807; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_new_namespaces, ((PyObject *)__pyx_t_4)); if (unlikely(__pyx_t_5 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(((PyObject *)__pyx_t_4)); __pyx_t_4 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":808
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":809
  *             if prefix not in prefixes:
  *                 new_namespaces.append((b'xmlns', prefix, href))
  *                 flat_namespaces_map[href] = prefix             # <<<<<<<<<<<<<<
@@ -109286,11 +109310,11 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
  */
       if (unlikely(((PyObject *)__pyx_v_flat_namespaces_map) == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 809; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       }
-      if (PyDict_SetItem(((PyObject *)__pyx_v_flat_namespaces_map), ((PyObject *)__pyx_v_href), ((PyObject *)__pyx_v_prefix)) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 808; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (PyDict_SetItem(((PyObject *)__pyx_v_flat_namespaces_map), ((PyObject *)__pyx_v_href), ((PyObject *)__pyx_v_prefix)) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 809; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":809
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":810
  *                 new_namespaces.append((b'xmlns', prefix, href))
  *                 flat_namespaces_map[href] = prefix
  *                 return prefix             # <<<<<<<<<<<<<<
@@ -109305,14 +109329,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
     }
     __pyx_L7:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":810
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":811
  *                 flat_namespaces_map[href] = prefix
  *                 return prefix
  *             i += 1             # <<<<<<<<<<<<<<
  * 
  *     cdef _collect_namespaces(self, dict nsmap):
  */
-    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_i, __pyx_int_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 810; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_i, __pyx_int_1); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 811; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_4);
     __pyx_t_4 = 0;
@@ -109334,7 +109358,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__find_prefix(CYTH
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":812
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":813
  *             i += 1
  * 
  *     cdef _collect_namespaces(self, dict nsmap):             # <<<<<<<<<<<<<<
@@ -109364,31 +109388,31 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_collect_namespaces", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":813
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":814
  * 
  *     cdef _collect_namespaces(self, dict nsmap):
  *         new_namespaces = []             # <<<<<<<<<<<<<<
  *         flat_namespaces_map = {}
  *         for ns, prefix in nsmap.iteritems():
  */
-  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 813; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 814; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_new_namespaces = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":814
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":815
  *     cdef _collect_namespaces(self, dict nsmap):
  *         new_namespaces = []
  *         flat_namespaces_map = {}             # <<<<<<<<<<<<<<
  *         for ns, prefix in nsmap.iteritems():
  *             flat_namespaces_map[ns] = prefix
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 814; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 815; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(((PyObject *)__pyx_t_1));
   __pyx_v_flat_namespaces_map = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":815
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":816
  *         new_namespaces = []
  *         flat_namespaces_map = {}
  *         for ns, prefix in nsmap.iteritems():             # <<<<<<<<<<<<<<
@@ -109398,9 +109422,9 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
   __pyx_t_2 = 0;
   if (unlikely(((PyObject *)__pyx_v_nsmap) == Py_None)) {
     PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iteritems");
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 815; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
-  __pyx_t_5 = __Pyx_dict_iterator(((PyObject *)__pyx_v_nsmap), 1, ((PyObject *)__pyx_n_s__iteritems), (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 815; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_5 = __Pyx_dict_iterator(((PyObject *)__pyx_v_nsmap), 1, ((PyObject *)__pyx_n_s__iteritems), (&__pyx_t_3), (&__pyx_t_4)); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_XDECREF(__pyx_t_1);
   __pyx_t_1 = __pyx_t_5;
@@ -109408,7 +109432,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
   while (1) {
     __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_3, &__pyx_t_2, &__pyx_t_5, &__pyx_t_6, NULL, __pyx_t_4);
     if (unlikely(__pyx_t_7 == 0)) break;
-    if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 815; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_5);
@@ -109416,16 +109440,16 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
     __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":816
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":817
  *         flat_namespaces_map = {}
  *         for ns, prefix in nsmap.iteritems():
  *             flat_namespaces_map[ns] = prefix             # <<<<<<<<<<<<<<
  *             if prefix is None:
  *                 new_namespaces.append((None, b'xmlns', ns))
  */
-    if (PyDict_SetItem(((PyObject *)__pyx_v_flat_namespaces_map), __pyx_v_ns, __pyx_v_prefix) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 816; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    if (PyDict_SetItem(((PyObject *)__pyx_v_flat_namespaces_map), __pyx_v_ns, __pyx_v_prefix) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 817; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":817
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":818
  *         for ns, prefix in nsmap.iteritems():
  *             flat_namespaces_map[ns] = prefix
  *             if prefix is None:             # <<<<<<<<<<<<<<
@@ -109436,14 +109460,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
     __pyx_t_9 = (__pyx_t_8 != 0);
     if (__pyx_t_9) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":818
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":819
  *             flat_namespaces_map[ns] = prefix
  *             if prefix is None:
  *                 new_namespaces.append((None, b'xmlns', ns))             # <<<<<<<<<<<<<<
  *             else:
  *                 new_namespaces.append((b'xmlns', prefix, ns))
  */
-      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_INCREF(Py_None);
       PyTuple_SET_ITEM(__pyx_t_6, 0, Py_None);
@@ -109454,20 +109478,20 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
       __Pyx_INCREF(__pyx_v_ns);
       PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_ns);
       __Pyx_GIVEREF(__pyx_v_ns);
-      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_new_namespaces, ((PyObject *)__pyx_t_6)); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 818; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_new_namespaces, ((PyObject *)__pyx_t_6)); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 819; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
       goto __pyx_L5;
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":820
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":821
  *                 new_namespaces.append((None, b'xmlns', ns))
  *             else:
  *                 new_namespaces.append((b'xmlns', prefix, ns))             # <<<<<<<<<<<<<<
  *         # merge in flat namespace map of parent
  *         if self._element_stack:
  */
-      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_INCREF(((PyObject *)__pyx_n_b__xmlns));
       PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_n_b__xmlns));
@@ -109478,14 +109502,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
       __Pyx_INCREF(__pyx_v_ns);
       PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_ns);
       __Pyx_GIVEREF(__pyx_v_ns);
-      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_new_namespaces, ((PyObject *)__pyx_t_6)); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 820; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_10 = __Pyx_PyList_Append(__pyx_v_new_namespaces, ((PyObject *)__pyx_t_6)); if (unlikely(__pyx_t_10 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 821; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
     }
     __pyx_L5:;
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":822
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":823
  *                 new_namespaces.append((b'xmlns', prefix, ns))
  *         # merge in flat namespace map of parent
  *         if self._element_stack:             # <<<<<<<<<<<<<<
@@ -109495,7 +109519,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
   __pyx_t_9 = (((PyObject *)__pyx_v_self->_element_stack) != Py_None) && (PyList_GET_SIZE(((PyObject *)__pyx_v_self->_element_stack)) != 0);
   if (__pyx_t_9) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":823
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":824
  *         # merge in flat namespace map of parent
  *         if self._element_stack:
  *             for ns, prefix in (<dict>self._element_stack[-1][-1]).iteritems():             # <<<<<<<<<<<<<<
@@ -109505,18 +109529,18 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
     __pyx_t_3 = 0;
     if (unlikely(((PyObject *)__pyx_v_self->_element_stack) == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_6 = __Pyx_GetItemInt_List(((PyObject *)__pyx_v_self->_element_stack), -1, sizeof(long), PyInt_FromLong, 1, 1, 1); if (!__pyx_t_6) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_GetItemInt_List(((PyObject *)__pyx_v_self->_element_stack), -1, sizeof(long), PyInt_FromLong, 1, 1, 1); if (!__pyx_t_6) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_6, -1, sizeof(long), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_5) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_6, -1, sizeof(long), PyInt_FromLong, 0, 1, 1); if (!__pyx_t_5) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     if (unlikely(__pyx_t_5 == Py_None)) {
       PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "iteritems");
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
-    __pyx_t_6 = __Pyx_dict_iterator(((PyObject *)((PyObject*)__pyx_t_5)), 1, ((PyObject *)__pyx_n_s__iteritems), (&__pyx_t_2), (&__pyx_t_4)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_6 = __Pyx_dict_iterator(((PyObject *)((PyObject*)__pyx_t_5)), 1, ((PyObject *)__pyx_n_s__iteritems), (&__pyx_t_2), (&__pyx_t_4)); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __Pyx_XDECREF(__pyx_t_1);
@@ -109525,7 +109549,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
     while (1) {
       __pyx_t_7 = __Pyx_dict_iter_next(__pyx_t_1, __pyx_t_2, &__pyx_t_3, &__pyx_t_6, &__pyx_t_5, NULL, __pyx_t_4);
       if (unlikely(__pyx_t_7 == 0)) break;
-      if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 823; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      if (unlikely(__pyx_t_7 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_XDECREF_SET(__pyx_v_ns, __pyx_t_6);
@@ -109533,28 +109557,28 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
       __Pyx_XDECREF_SET(__pyx_v_prefix, __pyx_t_5);
       __pyx_t_5 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":824
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":825
  *         if self._element_stack:
  *             for ns, prefix in (<dict>self._element_stack[-1][-1]).iteritems():
  *                 if flat_namespaces_map.get(ns) is None:             # <<<<<<<<<<<<<<
  *                     # unknown or empty prefix => prefer a 'real' prefix
  *                     flat_namespaces_map[ns] = prefix
  */
-      __pyx_t_5 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_flat_namespaces_map), __pyx_v_ns, Py_None); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 824; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = __Pyx_PyDict_GetItemDefault(((PyObject *)__pyx_v_flat_namespaces_map), __pyx_v_ns, Py_None); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 825; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_t_9 = (__pyx_t_5 == Py_None);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __pyx_t_8 = (__pyx_t_9 != 0);
       if (__pyx_t_8) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":826
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":827
  *                 if flat_namespaces_map.get(ns) is None:
  *                     # unknown or empty prefix => prefer a 'real' prefix
  *                     flat_namespaces_map[ns] = prefix             # <<<<<<<<<<<<<<
  *         return flat_namespaces_map, new_namespaces
  * 
  */
-        if (PyDict_SetItem(((PyObject *)__pyx_v_flat_namespaces_map), __pyx_v_ns, __pyx_v_prefix) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 826; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        if (PyDict_SetItem(((PyObject *)__pyx_v_flat_namespaces_map), __pyx_v_ns, __pyx_v_prefix) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         goto __pyx_L9;
       }
       __pyx_L9:;
@@ -109564,7 +109588,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
   }
   __pyx_L6:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":827
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":828
  *                     # unknown or empty prefix => prefer a 'real' prefix
  *                     flat_namespaces_map[ns] = prefix
  *         return flat_namespaces_map, new_namespaces             # <<<<<<<<<<<<<<
@@ -109572,7 +109596,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__collect_namespac
  *     def write(self, *args, bint with_tail=True, bint pretty_print=False):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 827; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 828; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_flat_namespaces_map));
   PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_flat_namespaces_map));
@@ -109644,17 +109668,17 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_11write(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "write") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, 0, "write") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) < 0) {
       goto __pyx_L5_argtuple_error;
     } else {
     }
     if (values[0]) {
-      __pyx_v_with_tail = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_with_tail == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_with_tail = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_with_tail == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":829
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":830
  *         return flat_namespaces_map, new_namespaces
  * 
  *     def write(self, *args, bint with_tail=True, bint pretty_print=False):             # <<<<<<<<<<<<<<
@@ -109664,14 +109688,14 @@ static PyObject *__pyx_pw_4lxml_5etree_22_IncrementalFileWriter_11write(PyObject
       __pyx_v_with_tail = ((int)1);
     }
     if (values[1]) {
-      __pyx_v_pretty_print = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_pretty_print == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+      __pyx_v_pretty_print = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_pretty_print == (int)-1) && PyErr_Occurred())) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
     } else {
       __pyx_v_pretty_print = ((int)0);
     }
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("write", 0, 0, 0, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 829; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("write", 0, 0, 0, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 830; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_DECREF(__pyx_v_args); __pyx_v_args = 0;
   __Pyx_AddTraceback("lxml.etree._IncrementalFileWriter.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
@@ -109701,7 +109725,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("write", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":834
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":835
  *         Write subtrees or strings into the file.
  *         """
  *         assert self._c_out is not NULL             # <<<<<<<<<<<<<<
@@ -109711,11 +109735,11 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!((__pyx_v_self->_c_out != NULL) != 0))) {
     PyErr_SetNone(PyExc_AssertionError);
-    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 834; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   }
   #endif
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":835
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":836
  *         """
  *         assert self._c_out is not NULL
  *         for content in args:             # <<<<<<<<<<<<<<
@@ -109726,14 +109750,14 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
   for (;;) {
     if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
     #if CYTHON_COMPILING_IN_CPYTHON
-    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     #else
-    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 835; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 836; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     #endif
     __Pyx_XDECREF_SET(__pyx_v_content, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":836
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":837
  *         assert self._c_out is not NULL
  *         for content in args:
  *             if _isString(content):             # <<<<<<<<<<<<<<
@@ -109743,7 +109767,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
     __pyx_t_4 = (_isString(__pyx_v_content) != 0);
     if (__pyx_t_4) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":837
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":838
  *         for content in args:
  *             if _isString(content):
  *                 if self._status != WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -109753,7 +109777,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
       __pyx_t_4 = ((__pyx_v_self->_status != __pyx_e_4lxml_5etree_WRITER_IN_ELEMENT) != 0);
       if (__pyx_t_4) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":838
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":839
  *             if _isString(content):
  *                 if self._status != WRITER_IN_ELEMENT:
  *                     if self._status > WRITER_IN_ELEMENT or content.strip():             # <<<<<<<<<<<<<<
@@ -109762,12 +109786,12 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
  */
         __pyx_t_4 = (__pyx_v_self->_status > __pyx_e_4lxml_5etree_WRITER_IN_ELEMENT);
         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[6]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_content, __pyx_n_s__strip); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_3);
-          __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_5 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 839; __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[6]; __pyx_lineno = 838; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
           __pyx_t_7 = __pyx_t_6;
         } else {
@@ -109775,21 +109799,21 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
         }
         if (__pyx_t_7) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":839
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":840
  *                 if self._status != WRITER_IN_ELEMENT:
  *                     if self._status > WRITER_IN_ELEMENT or content.strip():
  *                         raise LxmlSyntaxError("not in an element")             # <<<<<<<<<<<<<<
  *                 content = _utf8(content)
  *                 tree.xmlOutputBufferWriteEscape(self._c_out, _xcstr(content), NULL)
  */
-          __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           __Pyx_GOTREF(__pyx_t_5);
-          __pyx_t_3 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_k_tuple_271), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          __pyx_t_3 = PyObject_Call(__pyx_t_5, ((PyObject *)__pyx_k_tuple_271), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 840; __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);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+          {__pyx_filename = __pyx_f[6]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
           goto __pyx_L7;
         }
         __pyx_L7:;
@@ -109797,19 +109821,19 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
       }
       __pyx_L6:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":840
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":841
  *                     if self._status > WRITER_IN_ELEMENT or content.strip():
  *                         raise LxmlSyntaxError("not in an element")
  *                 content = _utf8(content)             # <<<<<<<<<<<<<<
  *                 tree.xmlOutputBufferWriteEscape(self._c_out, _xcstr(content), NULL)
  *             elif iselement(content):
  */
-      __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_content)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = ((PyObject *)__pyx_f_4lxml_5etree__utf8(__pyx_v_content)); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 841; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_content, __pyx_t_3);
       __pyx_t_3 = 0;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":841
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":842
  *                         raise LxmlSyntaxError("not in an element")
  *                 content = _utf8(content)
  *                 tree.xmlOutputBufferWriteEscape(self._c_out, _xcstr(content), NULL)             # <<<<<<<<<<<<<<
@@ -109820,29 +109844,29 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
       goto __pyx_L5;
     }
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":842
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":843
  *                 content = _utf8(content)
  *                 tree.xmlOutputBufferWriteEscape(self._c_out, _xcstr(content), NULL)
  *             elif iselement(content):             # <<<<<<<<<<<<<<
  *                 if self._status > WRITER_IN_ELEMENT:
  *                     raise LxmlSyntaxError("cannot append trailing element to complete XML document")
  */
-    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__iselement); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__iselement); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __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, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_8 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_t_5), NULL); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __Pyx_DECREF(((PyObject *)__pyx_t_5)); __pyx_t_5 = 0;
-    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 842; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_7 < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 843; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
     if (__pyx_t_7) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":843
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":844
  *                 tree.xmlOutputBufferWriteEscape(self._c_out, _xcstr(content), NULL)
  *             elif iselement(content):
  *                 if self._status > WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -109852,26 +109876,26 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
       __pyx_t_7 = ((__pyx_v_self->_status > __pyx_e_4lxml_5etree_WRITER_IN_ELEMENT) != 0);
       if (__pyx_t_7) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":844
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":845
  *             elif iselement(content):
  *                 if self._status > WRITER_IN_ELEMENT:
  *                     raise LxmlSyntaxError("cannot append trailing element to complete XML document")             # <<<<<<<<<<<<<<
  *                 _writeNodeToBuffer(self._c_out, (<_Element>content)._c_node,
  *                                    self._c_encoding, NULL, OUTPUT_METHOD_XML,
  */
-        __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 845; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         __Pyx_GOTREF(__pyx_t_8);
-        __pyx_t_5 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_k_tuple_272), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        __pyx_t_5 = PyObject_Call(__pyx_t_8, ((PyObject *)__pyx_k_tuple_272), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 845; __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);
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+        {__pyx_filename = __pyx_f[6]; __pyx_lineno = 845; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
         goto __pyx_L8;
       }
       __pyx_L8:;
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":847
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":848
  *                 _writeNodeToBuffer(self._c_out, (<_Element>content)._c_node,
  *                                    self._c_encoding, NULL, OUTPUT_METHOD_XML,
  *                                    False, False, pretty_print, with_tail, False)             # <<<<<<<<<<<<<<
@@ -109880,7 +109904,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
  */
       __pyx_f_4lxml_5etree__writeNodeToBuffer(__pyx_v_self->_c_out, ((struct LxmlElement *)__pyx_v_content)->_c_node, __pyx_v_self->_c_encoding, NULL, __pyx_e_4lxml_5etree_OUTPUT_METHOD_XML, 0, 0, __pyx_v_pretty_print, __pyx_v_with_tail, 0);
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":848
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":849
  *                                    self._c_encoding, NULL, OUTPUT_METHOD_XML,
  *                                    False, False, pretty_print, with_tail, False)
  *                 if (<_Element>content)._c_node.type == tree.XML_ELEMENT_NODE:             # <<<<<<<<<<<<<<
@@ -109890,7 +109914,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
       __pyx_t_7 = ((((struct LxmlElement *)__pyx_v_content)->_c_node->type == XML_ELEMENT_NODE) != 0);
       if (__pyx_t_7) {
 
-        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":849
+        /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":850
  *                                    False, False, pretty_print, with_tail, False)
  *                 if (<_Element>content)._c_node.type == tree.XML_ELEMENT_NODE:
  *                     if not self._element_stack:             # <<<<<<<<<<<<<<
@@ -109901,7 +109925,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
         __pyx_t_4 = ((!__pyx_t_7) != 0);
         if (__pyx_t_4) {
 
-          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":850
+          /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":851
  *                 if (<_Element>content)._c_node.type == tree.XML_ELEMENT_NODE:
  *                     if not self._element_stack:
  *                         self._status = WRITER_FINISHED             # <<<<<<<<<<<<<<
@@ -109919,37 +109943,37 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
     }
     /*else*/ {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":852
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":853
  *                         self._status = WRITER_FINISHED
  *             else:
  *                 raise TypeError("got invalid input value of type %s, expected string or Element" % type(content))             # <<<<<<<<<<<<<<
  *             self._handle_error(self._c_out.error)
  * 
  */
-      __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_273), ((PyObject *)Py_TYPE(__pyx_v_content))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 852; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyNumber_Remainder(((PyObject *)__pyx_kp_s_273), ((PyObject *)Py_TYPE(__pyx_v_content))); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(((PyObject *)__pyx_t_5));
-      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 852; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_8);
       PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_t_5));
       __Pyx_GIVEREF(((PyObject *)__pyx_t_5));
       __pyx_t_5 = 0;
-      __pyx_t_5 = PyObject_Call(__pyx_builtin_TypeError, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 852; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_5 = PyObject_Call(__pyx_builtin_TypeError, ((PyObject *)__pyx_t_8), NULL); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_DECREF(((PyObject *)__pyx_t_8)); __pyx_t_8 = 0;
       __Pyx_Raise(__pyx_t_5, 0, 0, 0);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 852; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     }
     __pyx_L5:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":853
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":854
  *             else:
  *                 raise TypeError("got invalid input value of type %s, expected string or Element" % type(content))
  *             self._handle_error(self._c_out.error)             # <<<<<<<<<<<<<<
  * 
  *     cdef _close(self, bint raise_on_error):
  */
-    __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 853; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_5 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_self->_c_out->error); if (unlikely(!__pyx_t_5)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 854; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
@@ -109971,7 +109995,7 @@ static PyObject *__pyx_pf_4lxml_5etree_22_IncrementalFileWriter_10write(struct _
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":855
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":856
  *             self._handle_error(self._c_out.error)
  * 
  *     cdef _close(self, bint raise_on_error):             # <<<<<<<<<<<<<<
@@ -109992,7 +110016,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_close", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":856
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":857
  * 
  *     cdef _close(self, bint raise_on_error):
  *         if raise_on_error:             # <<<<<<<<<<<<<<
@@ -110002,7 +110026,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   __pyx_t_1 = (__pyx_v_raise_on_error != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":857
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":858
  *     cdef _close(self, bint raise_on_error):
  *         if raise_on_error:
  *             if self._status < WRITER_IN_ELEMENT:             # <<<<<<<<<<<<<<
@@ -110012,26 +110036,26 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
     __pyx_t_1 = ((__pyx_v_self->_status < __pyx_e_4lxml_5etree_WRITER_IN_ELEMENT) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":858
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":859
  *         if raise_on_error:
  *             if self._status < WRITER_IN_ELEMENT:
  *                 raise LxmlSyntaxError("no content written")             # <<<<<<<<<<<<<<
  *             if self._element_stack:
  *                 raise LxmlSyntaxError("pending open tags on close")
  */
-      __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 859; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_275), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_k_tuple_275), NULL); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 859; __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);
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 859; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L4;
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":859
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":860
  *             if self._status < WRITER_IN_ELEMENT:
  *                 raise LxmlSyntaxError("no content written")
  *             if self._element_stack:             # <<<<<<<<<<<<<<
@@ -110041,21 +110065,21 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
     __pyx_t_1 = (((PyObject *)__pyx_v_self->_element_stack) != Py_None) && (PyList_GET_SIZE(((PyObject *)__pyx_v_self->_element_stack)) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":860
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":861
  *                 raise LxmlSyntaxError("no content written")
  *             if self._element_stack:
  *                 raise LxmlSyntaxError("pending open tags on close")             # <<<<<<<<<<<<<<
  *         error_result = self._c_out.error
  *         if error_result == xmlerror.XML_ERR_OK:
  */
-      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s__LxmlSyntaxError); if (unlikely(!__pyx_t_3)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_k_tuple_277), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      __pyx_t_2 = PyObject_Call(__pyx_t_3, ((PyObject *)__pyx_k_tuple_277), NULL); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 861; __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);
       __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+      {__pyx_filename = __pyx_f[6]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L5;
     }
     __pyx_L5:;
@@ -110063,7 +110087,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   }
   __pyx_L3:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":861
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":862
  *             if self._element_stack:
  *                 raise LxmlSyntaxError("pending open tags on close")
  *         error_result = self._c_out.error             # <<<<<<<<<<<<<<
@@ -110073,7 +110097,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   __pyx_t_4 = __pyx_v_self->_c_out->error;
   __pyx_v_error_result = __pyx_t_4;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":862
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":863
  *                 raise LxmlSyntaxError("pending open tags on close")
  *         error_result = self._c_out.error
  *         if error_result == xmlerror.XML_ERR_OK:             # <<<<<<<<<<<<<<
@@ -110083,7 +110107,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   __pyx_t_1 = ((__pyx_v_error_result == XML_ERR_OK) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":863
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":864
  *         error_result = self._c_out.error
  *         if error_result == xmlerror.XML_ERR_OK:
  *             error_result = tree.xmlOutputBufferClose(self._c_out)             # <<<<<<<<<<<<<<
@@ -110092,7 +110116,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
  */
     __pyx_v_error_result = xmlOutputBufferClose(__pyx_v_self->_c_out);
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":864
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":865
  *         if error_result == xmlerror.XML_ERR_OK:
  *             error_result = tree.xmlOutputBufferClose(self._c_out)
  *             if error_result > 0:             # <<<<<<<<<<<<<<
@@ -110102,7 +110126,7 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
     __pyx_t_1 = ((__pyx_v_error_result > 0) != 0);
     if (__pyx_t_1) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":865
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":866
  *             error_result = tree.xmlOutputBufferClose(self._c_out)
  *             if error_result > 0:
  *                 error_result = xmlerror.XML_ERR_OK             # <<<<<<<<<<<<<<
@@ -110117,29 +110141,51 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   }
   /*else*/ {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":867
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":868
  *                 error_result = xmlerror.XML_ERR_OK
  *         else:
  *             tree.xmlOutputBufferClose(self._c_out)             # <<<<<<<<<<<<<<
+ *         self._status = WRITER_FINISHED
  *         self._c_out = NULL
- *         if raise_on_error:
  */
     xmlOutputBufferClose(__pyx_v_self->_c_out);
   }
   __pyx_L6:;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":868
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":869
  *         else:
  *             tree.xmlOutputBufferClose(self._c_out)
+ *         self._status = WRITER_FINISHED             # <<<<<<<<<<<<<<
+ *         self._c_out = NULL
+ *         del self._element_stack[:]
+ */
+  __pyx_v_self->_status = __pyx_e_4lxml_5etree_WRITER_FINISHED;
+
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":870
+ *             tree.xmlOutputBufferClose(self._c_out)
+ *         self._status = WRITER_FINISHED
  *         self._c_out = NULL             # <<<<<<<<<<<<<<
+ *         del self._element_stack[:]
  *         if raise_on_error:
- *             self._handle_error(error_result)
  */
   __pyx_v_self->_c_out = NULL;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":869
- *             tree.xmlOutputBufferClose(self._c_out)
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":871
+ *         self._status = WRITER_FINISHED
+ *         self._c_out = NULL
+ *         del self._element_stack[:]             # <<<<<<<<<<<<<<
+ *         if raise_on_error:
+ *             self._handle_error(error_result)
+ */
+  if (unlikely(((PyObject *)__pyx_v_self->_element_stack) == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+    {__pyx_filename = __pyx_f[6]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  }
+  if (__Pyx_PyObject_DelSlice(((PyObject *)__pyx_v_self->_element_stack), 0, 0, NULL, NULL, NULL, 0, 0, 1) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 871; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":872
  *         self._c_out = NULL
+ *         del self._element_stack[:]
  *         if raise_on_error:             # <<<<<<<<<<<<<<
  *             self._handle_error(error_result)
  * 
@@ -110147,14 +110193,14 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   __pyx_t_1 = (__pyx_v_raise_on_error != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":870
- *         self._c_out = NULL
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":873
+ *         del self._element_stack[:]
  *         if raise_on_error:
  *             self._handle_error(error_result)             # <<<<<<<<<<<<<<
  * 
  *     cdef _handle_error(self, int error_result):
  */
-    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_error_result); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 870; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(__pyx_v_self, __pyx_v_error_result); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 873; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     goto __pyx_L8;
@@ -110174,19 +110220,19 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__close(struct __p
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":872
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":875
  *             self._handle_error(error_result)
  * 
  *     cdef _handle_error(self, int error_result):             # <<<<<<<<<<<<<<
  *         if error_result != xmlerror.XML_ERR_OK:
- *             if self._writer is not None:
+ *             if self._target is not None:
  */
 
 static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(struct __pyx_obj_4lxml_5etree__IncrementalFileWriter *__pyx_v_self, int __pyx_v_error_result) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_2;
   int __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_lineno = 0;
@@ -110194,61 +110240,47 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(str
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("_handle_error", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":873
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":876
  * 
  *     cdef _handle_error(self, int error_result):
  *         if error_result != xmlerror.XML_ERR_OK:             # <<<<<<<<<<<<<<
- *             if self._writer is not None:
- *                 self._writer._exc_context._raise_if_stored()
+ *             if self._target is not None:
+ *                 self._target._exc_context._raise_if_stored()
  */
   __pyx_t_1 = ((__pyx_v_error_result != XML_ERR_OK) != 0);
   if (__pyx_t_1) {
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":874
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":877
  *     cdef _handle_error(self, int error_result):
  *         if error_result != xmlerror.XML_ERR_OK:
- *             if self._writer is not None:             # <<<<<<<<<<<<<<
- *                 self._writer._exc_context._raise_if_stored()
+ *             if self._target is not None:             # <<<<<<<<<<<<<<
+ *                 self._target._exc_context._raise_if_stored()
  *             _raiseSerialisationError(error_result)
  */
-    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s___writer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 874; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = (__pyx_t_2 != Py_None);
-    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-    __pyx_t_3 = (__pyx_t_1 != 0);
-    if (__pyx_t_3) {
+    __pyx_t_1 = (((PyObject *)__pyx_v_self->_target) != Py_None);
+    __pyx_t_2 = (__pyx_t_1 != 0);
+    if (__pyx_t_2) {
 
-      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":875
+      /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":878
  *         if error_result != xmlerror.XML_ERR_OK:
- *             if self._writer is not None:
- *                 self._writer._exc_context._raise_if_stored()             # <<<<<<<<<<<<<<
+ *             if self._target is not None:
+ *                 self._target._exc_context._raise_if_stored()             # <<<<<<<<<<<<<<
  *             _raiseSerialisationError(error_result)
  * 
  */
-      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s___writer); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s___exc_context); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s___raise_if_stored); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 875; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-      __pyx_t_4 = PyObject_Call(__pyx_t_2, ((PyObject *)__pyx_empty_tuple), NULL); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 875; __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_4); __pyx_t_4 = 0;
+      __pyx_t_3 = ((struct __pyx_vtabstruct_4lxml_5etree__ExceptionContext *)__pyx_v_self->_target->_exc_context->__pyx_vtab)->_raise_if_stored(__pyx_v_self->_target->_exc_context); if (unlikely(__pyx_t_3 == -1)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 878; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
       goto __pyx_L4;
     }
     __pyx_L4:;
 
-    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":876
- *             if self._writer is not None:
- *                 self._writer._exc_context._raise_if_stored()
+    /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":879
+ *             if self._target is not None:
+ *                 self._target._exc_context._raise_if_stored()
  *             _raiseSerialisationError(error_result)             # <<<<<<<<<<<<<<
  * 
  * @cython.final
  */
-    __pyx_t_4 = __pyx_f_4lxml_5etree__raiseSerialisationError(__pyx_v_error_result); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 876; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+    __pyx_t_4 = __pyx_f_4lxml_5etree__raiseSerialisationError(__pyx_v_error_result); if (unlikely(!__pyx_t_4)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 879; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L3;
@@ -110258,7 +110290,6 @@ static PyObject *__pyx_f_4lxml_5etree_22_IncrementalFileWriter__handle_error(str
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_4);
   __Pyx_AddTraceback("lxml.etree._IncrementalFileWriter._handle_error", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
@@ -110299,11 +110330,11 @@ static int __pyx_pw_4lxml_5etree_18_FileWriterElement_1__cinit__(PyObject *__pyx
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__element_config)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, 1); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       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 = 884; __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 = 887; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -110316,13 +110347,13 @@ static int __pyx_pw_4lxml_5etree_18_FileWriterElement_1__cinit__(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._FileWriterElement.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return -1;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_writer), __pyx_ptype_4lxml_5etree__IncrementalFileWriter, 0, "writer", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 884; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_writer), __pyx_ptype_4lxml_5etree__IncrementalFileWriter, 0, "writer", 0))) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 887; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_r = __pyx_pf_4lxml_5etree_18_FileWriterElement___cinit__(((struct __pyx_obj_4lxml_5etree__FileWriterElement *)__pyx_v_self), __pyx_v_writer, __pyx_v_element_config);
   goto __pyx_L0;
   __pyx_L1_error:;
@@ -110332,7 +110363,7 @@ static int __pyx_pw_4lxml_5etree_18_FileWriterElement_1__cinit__(PyObject *__pyx
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":884
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":887
  *     cdef _IncrementalFileWriter _writer
  * 
  *     def __cinit__(self, _IncrementalFileWriter writer not None, element_config):             # <<<<<<<<<<<<<<
@@ -110345,7 +110376,7 @@ static int __pyx_pf_4lxml_5etree_18_FileWriterElement___cinit__(struct __pyx_obj
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":885
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":888
  * 
  *     def __cinit__(self, _IncrementalFileWriter writer not None, element_config):
  *         self._writer = writer             # <<<<<<<<<<<<<<
@@ -110358,7 +110389,7 @@ static int __pyx_pf_4lxml_5etree_18_FileWriterElement___cinit__(struct __pyx_obj
   __Pyx_DECREF(((PyObject *)__pyx_v_self->_writer));
   __pyx_v_self->_writer = __pyx_v_writer;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":886
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":889
  *     def __cinit__(self, _IncrementalFileWriter writer not None, element_config):
  *         self._writer = writer
  *         self._element = element_config             # <<<<<<<<<<<<<<
@@ -110387,7 +110418,7 @@ static PyObject *__pyx_pw_4lxml_5etree_18_FileWriterElement_3__enter__(PyObject
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":888
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":891
  *         self._element = element_config
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -110405,7 +110436,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18_FileWriterElement_2__enter__(struct __
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__enter__", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":889
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":892
  * 
  *     def __enter__(self):
  *         self._writer._write_start_element(self._element)             # <<<<<<<<<<<<<<
@@ -110414,7 +110445,7 @@ static PyObject *__pyx_pf_4lxml_5etree_18_FileWriterElement_2__enter__(struct __
  */
   __pyx_t_1 = __pyx_v_self->_element;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_element(__pyx_v_self->_writer, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 889; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_start_element(__pyx_v_self->_writer, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 892; __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;
@@ -110465,16 +110496,16 @@ static PyObject *__pyx_pw_4lxml_5etree_18_FileWriterElement_5__exit__(PyObject *
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__exc_val)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 1); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s__exc_tb)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+          __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, 2); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__exit__") < 0)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -110489,7 +110520,7 @@ static PyObject *__pyx_pw_4lxml_5etree_18_FileWriterElement_5__exit__(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 891; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
+  __Pyx_RaiseArgtupleInvalid("__exit__", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); {__pyx_filename = __pyx_f[6]; __pyx_lineno = 894; __pyx_clineno = __LINE__; goto __pyx_L3_error;}
   __pyx_L3_error:;
   __Pyx_AddTraceback("lxml.etree._FileWriterElement.__exit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -110500,7 +110531,7 @@ static PyObject *__pyx_pw_4lxml_5etree_18_FileWriterElement_5__exit__(PyObject *
   return __pyx_r;
 }
 
-/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":891
+/* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":894
  *         self._writer._write_start_element(self._element)
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):             # <<<<<<<<<<<<<<
@@ -110517,14 +110548,14 @@ static PyObject *__pyx_pf_4lxml_5etree_18_FileWriterElement_4__exit__(struct __p
   int __pyx_clineno = 0;
   __Pyx_RefNannySetupContext("__exit__", 0);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":892
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":895
  * 
  *     def __exit__(self, exc_type, exc_val, exc_tb):
  *         self._writer._write_end_element(self._element)             # <<<<<<<<<<<<<<
  */
   __pyx_t_1 = __pyx_v_self->_element;
   __Pyx_INCREF(__pyx_t_1);
-  __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_element(__pyx_v_self->_writer, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 892; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_2 = __pyx_f_4lxml_5etree_22_IncrementalFileWriter__write_end_element(__pyx_v_self->_writer, __pyx_t_1); if (unlikely(!__pyx_t_2)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 895; __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;
@@ -163077,7 +163108,7 @@ static PyObject *__pyx_tp_new_4lxml_5etree__IncrementalFileWriter(PyTypeObject *
   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 = 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;
@@ -163110,7 +163141,7 @@ static int __pyx_tp_traverse_4lxml_5etree__IncrementalFileWriter(PyObject *o, vi
     e = (*v)(p->_encoding, a); if (e) return e;
   }
   if (p->_target) {
-    e = (*v)(p->_target, a); if (e) return e;
+    e = (*v)(((PyObject*)p->_target), a); if (e) return e;
   }
   if (p->_element_stack) {
     e = (*v)(p->_element_stack, a); if (e) return e;
@@ -163125,7 +163156,7 @@ static int __pyx_tp_clear_4lxml_5etree__IncrementalFileWriter(PyObject *o) {
   p->_encoding = ((PyObject*)Py_None); Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   tmp = ((PyObject*)p->_target);
-  p->_target = Py_None; Py_INCREF(Py_None);
+  p->_target = ((struct __pyx_obj_4lxml_5etree__FilelikeWriter *)Py_None); Py_INCREF(Py_None);
   Py_XDECREF(tmp);
   tmp = ((PyObject*)p->_element_stack);
   p->_element_stack = ((PyObject*)Py_None); Py_INCREF(Py_None);
@@ -173022,7 +173053,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s___elementpath, __pyx_k___elementpath, sizeof(__pyx_k___elementpath), 0, 0, 1, 1},
   {&__pyx_n_s___etree_or_element, __pyx_k___etree_or_element, sizeof(__pyx_k___etree_or_element), 0, 0, 1, 1},
   {&__pyx_n_s___eval_arg, __pyx_k___eval_arg, sizeof(__pyx_k___eval_arg), 0, 0, 1, 1},
-  {&__pyx_n_s___exc_context, __pyx_k___exc_context, sizeof(__pyx_k___exc_context), 0, 0, 1, 1},
   {&__pyx_n_s___extra, __pyx_k___extra, sizeof(__pyx_k___extra), 0, 0, 1, 1},
   {&__pyx_n_s___getName, __pyx_k___getName, sizeof(__pyx_k___getName), 0, 0, 1, 1},
   {&__pyx_n_s___init, __pyx_k___init, sizeof(__pyx_k___init), 0, 0, 1, 1},
@@ -173030,9 +173060,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s___names, __pyx_k___names, sizeof(__pyx_k___names), 0, 0, 1, 1},
   {&__pyx_n_s___parent, __pyx_k___parent, sizeof(__pyx_k___parent), 0, 0, 1, 1},
   {&__pyx_n_s___path, __pyx_k___path, sizeof(__pyx_k___path), 0, 0, 1, 1},
-  {&__pyx_n_s___raise_if_stored, __pyx_k___raise_if_stored, sizeof(__pyx_k___raise_if_stored), 0, 0, 1, 1},
   {&__pyx_n_s___tag, __pyx_k___tag, sizeof(__pyx_k___tag), 0, 0, 1, 1},
-  {&__pyx_n_s___writer, __pyx_k___writer, sizeof(__pyx_k___writer), 0, 0, 1, 1},
   {&__pyx_n_s___xslt, __pyx_k___xslt, sizeof(__pyx_k___xslt), 0, 0, 1, 1},
   {&__pyx_n_s__abspath, __pyx_k__abspath, sizeof(__pyx_k__abspath), 0, 0, 1, 1},
   {&__pyx_n_s__access_control, __pyx_k__access_control, sizeof(__pyx_k__access_control), 0, 0, 1, 1},
@@ -173424,15 +173452,15 @@ static int __Pyx_InitCachedBuiltins(void) {
   __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_range) {__pyx_filename = __pyx_f[3]; __pyx_lineno = 373; __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 = 15; __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 = 37; __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 = 260; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s__KeyError); if (!__pyx_builtin_KeyError) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 533; __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 = 261; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_KeyError = __Pyx_GetBuiltinName(__pyx_n_s__KeyError); if (!__pyx_builtin_KeyError) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 534; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   #if PY_MAJOR_VERSION >= 3
-  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_xrange) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 934; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s__range); if (!__pyx_builtin_xrange) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 935; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   #else
-  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s__xrange); if (!__pyx_builtin_xrange) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 934; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_xrange = __Pyx_GetBuiltinName(__pyx_n_s__xrange); if (!__pyx_builtin_xrange) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 935; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   #endif
-  __pyx_builtin_UnicodeEncodeError = __Pyx_GetBuiltinName(__pyx_n_s__UnicodeEncodeError); if (!__pyx_builtin_UnicodeEncodeError) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1387; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
-  __pyx_builtin_UnicodeDecodeError = __Pyx_GetBuiltinName(__pyx_n_s__UnicodeDecodeError); if (!__pyx_builtin_UnicodeDecodeError) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1405; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_UnicodeEncodeError = __Pyx_GetBuiltinName(__pyx_n_s__UnicodeEncodeError); if (!__pyx_builtin_UnicodeEncodeError) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1388; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_builtin_UnicodeDecodeError = __Pyx_GetBuiltinName(__pyx_n_s__UnicodeDecodeError); if (!__pyx_builtin_UnicodeDecodeError) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1406; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s__IndexError); if (!__pyx_builtin_IndexError) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 640; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_FutureWarning = __Pyx_GetBuiltinName(__pyx_n_s__FutureWarning); if (!__pyx_builtin_FutureWarning) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1084; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __pyx_builtin_NotImplemented = __Pyx_GetBuiltinName(__pyx_n_s__NotImplemented); if (!__pyx_builtin_NotImplemented) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 1728; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
@@ -173548,58 +173576,58 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_k_slice_14);
   __Pyx_GIVEREF(__pyx_k_slice_14);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1202
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1203
  *     while c_parent:
  *         if c_parent is c_node:
  *             raise ValueError("cannot append parent to itself")             # <<<<<<<<<<<<<<
  *         c_parent = c_parent.parent
  *     # store possible text node
  */
-  __pyx_k_tuple_30 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_29)); if (unlikely(!__pyx_k_tuple_30)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1202; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_30 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_29)); if (unlikely(!__pyx_k_tuple_30)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1203; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_30);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_30));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1223
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1224
  *     while c_parent:
  *         if c_parent is c_node:
  *             raise ValueError("cannot append parent to itself")             # <<<<<<<<<<<<<<
  *         c_parent = c_parent.parent
  *     # store possible text node
  */
-  __pyx_k_tuple_31 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_29)); if (unlikely(!__pyx_k_tuple_31)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1223; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_31 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_29)); if (unlikely(!__pyx_k_tuple_31)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1224; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_31);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_31));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1344
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1345
  *         raise TypeError("Argument must be bytes or unicode, got '%.200s'" % type(s).__name__)
  *     if invalid:
  *         raise ValueError(             # <<<<<<<<<<<<<<
  *             "All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters")
  *     return utf8_string
  */
-  __pyx_k_tuple_34 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_33)); if (unlikely(!__pyx_k_tuple_34)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1344; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_34 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_33)); if (unlikely(!__pyx_k_tuple_34)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1345; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_34);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_34));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1391
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1392
  *         return filename8
  *     else:
  *         raise TypeError("Argument must be string or unicode.")             # <<<<<<<<<<<<<<
  * 
  * cdef object _decodeFilename(const_xmlChar* c_path):
  */
-  __pyx_k_tuple_36 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_35)); if (unlikely(!__pyx_k_tuple_36)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1391; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_36 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_35)); if (unlikely(!__pyx_k_tuple_36)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1392; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_36);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_36));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1440
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":1441
  *         return (<unicode>filename).encode('utf8')
  *     else:
  *         raise TypeError("Argument must be string or unicode.")             # <<<<<<<<<<<<<<
  * 
  * cdef tuple _getNsTag(tag):
  */
-  __pyx_k_tuple_37 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_35)); if (unlikely(!__pyx_k_tuple_37)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1440; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_37 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_35)); if (unlikely(!__pyx_k_tuple_37)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 1441; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_37);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_37));
 
@@ -173823,127 +173851,127 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_k_tuple_252);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_252));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":678
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":679
  *         cdef int c_standalone
  *         if self._status >= WRITER_DECL_WRITTEN:
  *             raise LxmlSyntaxError("XML declaration already written")             # <<<<<<<<<<<<<<
  *         version = _utf8orNone(version)
  *         c_version = _xcstr(version) if version is not None else NULL
  */
-  __pyx_k_tuple_254 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_253)); if (unlikely(!__pyx_k_tuple_254)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 678; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_254 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_253)); if (unlikely(!__pyx_k_tuple_254)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 679; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_254);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_254));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":703
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":704
  *             return
  *         if self._status >= WRITER_DTD_WRITTEN:
  *             raise LxmlSyntaxError("DOCTYPE already written or cannot write it here")             # <<<<<<<<<<<<<<
  *         doctype = _utf8(doctype)
  *         _writeDoctype(self._c_out, _xcstr(doctype))
  */
-  __pyx_k_tuple_256 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_255)); if (unlikely(!__pyx_k_tuple_256)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 703; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_256 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_255)); if (unlikely(!__pyx_k_tuple_256)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 704; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_256);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_256));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":745
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":746
  *     cdef _write_start_element(self, element_config):
  *         if self._status > WRITER_IN_ELEMENT:
  *             raise LxmlSyntaxError("cannot append trailing element to complete XML document")             # <<<<<<<<<<<<<<
  *         ns, name, attributes, nsmap = element_config
  *         flat_namespace_map, new_namespaces = self._collect_namespaces(nsmap)
  */
-  __pyx_k_tuple_259 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_258)); if (unlikely(!__pyx_k_tuple_259)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 745; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_259 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_258)); if (unlikely(!__pyx_k_tuple_259)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 746; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_259);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_259));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":783
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":784
  *     cdef _write_end_element(self, element_config):
  *         if self._status != WRITER_IN_ELEMENT:
  *             raise LxmlSyntaxError("not in an element")             # <<<<<<<<<<<<<<
  *         if not self._element_stack or self._element_stack[-1][:2] != element_config[:2]:
  *             raise LxmlSyntaxError("inconsistent exit action in context manager")
  */
-  __pyx_k_tuple_264 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_263)); if (unlikely(!__pyx_k_tuple_264)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 783; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_264 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_263)); if (unlikely(!__pyx_k_tuple_264)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_264);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_264));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":784
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":785
  *         if self._status != WRITER_IN_ELEMENT:
  *             raise LxmlSyntaxError("not in an element")
  *         if not self._element_stack or self._element_stack[-1][:2] != element_config[:2]:             # <<<<<<<<<<<<<<
  *             raise LxmlSyntaxError("inconsistent exit action in context manager")
  * 
  */
-  __pyx_k_slice_265 = PySlice_New(Py_None, __pyx_int_2, Py_None); if (unlikely(!__pyx_k_slice_265)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_slice_265 = PySlice_New(Py_None, __pyx_int_2, Py_None); if (unlikely(!__pyx_k_slice_265)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_slice_265);
   __Pyx_GIVEREF(__pyx_k_slice_265);
-  __pyx_k_slice_266 = PySlice_New(Py_None, __pyx_int_2, Py_None); if (unlikely(!__pyx_k_slice_266)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 784; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_slice_266 = PySlice_New(Py_None, __pyx_int_2, Py_None); if (unlikely(!__pyx_k_slice_266)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_slice_266);
   __Pyx_GIVEREF(__pyx_k_slice_266);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":785
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":786
  *             raise LxmlSyntaxError("not in an element")
  *         if not self._element_stack or self._element_stack[-1][:2] != element_config[:2]:
  *             raise LxmlSyntaxError("inconsistent exit action in context manager")             # <<<<<<<<<<<<<<
  * 
  *         name, prefix = self._element_stack.pop()[1:3]
  */
-  __pyx_k_tuple_268 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_267)); if (unlikely(!__pyx_k_tuple_268)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 785; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_268 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_267)); if (unlikely(!__pyx_k_tuple_268)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 786; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_268);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_268));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":787
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":788
  *             raise LxmlSyntaxError("inconsistent exit action in context manager")
  * 
  *         name, prefix = self._element_stack.pop()[1:3]             # <<<<<<<<<<<<<<
  *         tree.xmlOutputBufferWrite(self._c_out, 2, '</')
  *         self._write_qname(name, prefix)
  */
-  __pyx_k_slice_269 = PySlice_New(__pyx_int_1, __pyx_int_3, Py_None); if (unlikely(!__pyx_k_slice_269)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 787; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_slice_269 = PySlice_New(__pyx_int_1, __pyx_int_3, Py_None); if (unlikely(!__pyx_k_slice_269)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 788; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_slice_269);
   __Pyx_GIVEREF(__pyx_k_slice_269);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":839
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":840
  *                 if self._status != WRITER_IN_ELEMENT:
  *                     if self._status > WRITER_IN_ELEMENT or content.strip():
  *                         raise LxmlSyntaxError("not in an element")             # <<<<<<<<<<<<<<
  *                 content = _utf8(content)
  *                 tree.xmlOutputBufferWriteEscape(self._c_out, _xcstr(content), NULL)
  */
-  __pyx_k_tuple_271 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_263)); if (unlikely(!__pyx_k_tuple_271)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 839; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_271 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_263)); if (unlikely(!__pyx_k_tuple_271)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 840; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_271);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_271));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":844
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":845
  *             elif iselement(content):
  *                 if self._status > WRITER_IN_ELEMENT:
  *                     raise LxmlSyntaxError("cannot append trailing element to complete XML document")             # <<<<<<<<<<<<<<
  *                 _writeNodeToBuffer(self._c_out, (<_Element>content)._c_node,
  *                                    self._c_encoding, NULL, OUTPUT_METHOD_XML,
  */
-  __pyx_k_tuple_272 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_258)); if (unlikely(!__pyx_k_tuple_272)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 844; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_272 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_258)); if (unlikely(!__pyx_k_tuple_272)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 845; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_272);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_272));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":858
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":859
  *         if raise_on_error:
  *             if self._status < WRITER_IN_ELEMENT:
  *                 raise LxmlSyntaxError("no content written")             # <<<<<<<<<<<<<<
  *             if self._element_stack:
  *                 raise LxmlSyntaxError("pending open tags on close")
  */
-  __pyx_k_tuple_275 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_274)); if (unlikely(!__pyx_k_tuple_275)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 858; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_275 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_274)); if (unlikely(!__pyx_k_tuple_275)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 859; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_275);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_275));
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":860
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/serializer.pxi":861
  *                 raise LxmlSyntaxError("no content written")
  *             if self._element_stack:
  *                 raise LxmlSyntaxError("pending open tags on close")             # <<<<<<<<<<<<<<
  *         error_result = self._c_out.error
  *         if error_result == xmlerror.XML_ERR_OK:
  */
-  __pyx_k_tuple_277 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_276)); if (unlikely(!__pyx_k_tuple_277)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 860; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_k_tuple_277 = PyTuple_Pack(1, ((PyObject *)__pyx_kp_s_276)); if (unlikely(!__pyx_k_tuple_277)) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 861; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_k_tuple_277);
   __Pyx_GIVEREF(((PyObject *)__pyx_k_tuple_277));
 
@@ -175958,7 +175986,7 @@ PyMODINIT_FUNC PyInit_etree(void)
   if (PyType_Ready(&__pyx_type_4lxml_5etree__ReadOnlyEntityProxy) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 256; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   if (__Pyx_SetVtable(__pyx_type_4lxml_5etree__ReadOnlyEntityProxy.tp_dict, __pyx_vtabptr_4lxml_5etree__ReadOnlyEntityProxy) < 0) {__pyx_filename = __pyx_f[8]; __pyx_lineno = 256; __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[6]; __pyx_lineno = 880; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  if (PyType_Ready(&__pyx_type_4lxml_5etree__FileWriterElement) < 0) {__pyx_filename = __pyx_f[6]; __pyx_lineno = 883; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __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_ptype_4lxml_5etree__MemDebug = &__pyx_type_4lxml_5etree__MemDebug;
@@ -177363,26 +177391,26 @@ PyMODINIT_FUNC PyInit_etree(void)
   if (PyDict_SetItem(__pyx_d, __pyx_n_s____version__, ((PyObject *)__pyx_t_6)) < 0) {__pyx_filename = __pyx_f[0]; __pyx_lineno = 247; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_DECREF(((PyObject *)__pyx_t_6)); __pyx_t_6 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":576
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":577
  *     return attributes
  * 
  * cdef object __RE_XML_ENCODING = re.compile(             # <<<<<<<<<<<<<<
  *     ur'^(<\?xml[^>]+)\s+encoding\s*=\s*["\'][^"\']*["\'](\s*\?>|)', re.U)
  * 
  */
-  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s__compile); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s__compile); if (unlikely(!__pyx_t_6)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_6);
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":577
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":578
  * 
  * cdef object __RE_XML_ENCODING = re.compile(
  *     ur'^(<\?xml[^>]+)\s+encoding\s*=\s*["\'][^"\']*["\'](\s*\?>|)', re.U)             # <<<<<<<<<<<<<<
  * 
  * cdef object __REPLACE_XML_ENCODING = __RE_XML_ENCODING.sub
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s__U); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree_re, __pyx_n_s__U); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 578; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(((PyObject *)__pyx_kp_u_512));
   PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_kp_u_512));
@@ -177390,7 +177418,7 @@ PyMODINIT_FUNC PyInit_etree(void)
   PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
-  __pyx_t_1 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 576; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = PyObject_Call(__pyx_t_6, ((PyObject *)__pyx_t_7), NULL); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 577; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
@@ -177399,28 +177427,28 @@ PyMODINIT_FUNC PyInit_etree(void)
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":579
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":580
  *     ur'^(<\?xml[^>]+)\s+encoding\s*=\s*["\'][^"\']*["\'](\s*\?>|)', re.U)
  * 
  * cdef object __REPLACE_XML_ENCODING = __RE_XML_ENCODING.sub             # <<<<<<<<<<<<<<
  * cdef object __HAS_XML_ENCODING = __RE_XML_ENCODING.match
  * 
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_n_s__sub); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 579; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_n_s__sub); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree___REPLACE_XML_ENCODING);
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___REPLACE_XML_ENCODING, __pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":580
+  /* "/home/stefan/source/Python/lxml/lxml-release/src/lxml/apihelpers.pxi":581
  * 
  * cdef object __REPLACE_XML_ENCODING = __RE_XML_ENCODING.sub
  * cdef object __HAS_XML_ENCODING = __RE_XML_ENCODING.match             # <<<<<<<<<<<<<<
  * 
  * cdef object _stripEncodingDeclaration(object xml_string):
  */
-  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_n_s__match); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 580; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_4lxml_5etree___RE_XML_ENCODING, __pyx_n_s__match); if (unlikely(!__pyx_t_1)) {__pyx_filename = __pyx_f[4]; __pyx_lineno = 581; __pyx_clineno = __LINE__; goto __pyx_L1_error;}
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_XGOTREF(__pyx_v_4lxml_5etree___HAS_XML_ENCODING);
   __Pyx_DECREF_SET(__pyx_v_4lxml_5etree___HAS_XML_ENCODING, __pyx_t_1);
index ec01f2b7cd19d0c23fe84deb2612f847b29c5cfa..2941662a6db739c9ecb574d7d3a92ab007f99d26 100644 (file)
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.19.2 on Thu Nov  7 17:43:30 2013 */
+/* Generated by Cython 0.19.2 on Thu Jan  2 15:49:40 2014 */
 
 #define PY_SSIZE_T_CLEAN
 #ifndef CYTHON_USE_PYLONG_INTERNALS
@@ -18709,7 +18709,7 @@ static PyObject *__pyx_f_4lxml_9objectify__annotate(struct LxmlElement *__pyx_v_
   struct __pyx_obj_4lxml_9objectify_PyType *__pyx_v_empty_pytype = 0;
   struct __pyx_obj_4lxml_9objectify_PyType *__pyx_v_StrType = 0;
   struct __pyx_obj_4lxml_9objectify_PyType *__pyx_v_NoneType = 0;
-  void *__pyx_v_dict_result;
+  PyObject *__pyx_v_dict_result;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -30525,14 +30525,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__ElementTree);
-  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic__ElementTagMatcher);
-  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic_ElementClassLookup);
   Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic__ElementIterator);
-  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic_FallbackElementClassLookup);
   Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic__Document);
+  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic__ElementTree);
+  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic_FallbackElementClassLookup);
   Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic_ElementBase);
+  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic__ElementTagMatcher);
   Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic__Element);
+  Py_CLEAR(__pyx_ptype_4lxml_8includes_11etreepublic_ElementClassLookup);
   /*--- Builtin cleanup code ---*/
   Py_CLEAR(__pyx_builtin_ValueError);
   Py_CLEAR(__pyx_builtin_TypeError);
index 0e5465e9300a82fc8aba528d26fa387d569de23f..e339f8a9dd4b02cab7d63d354457ef7ebc860ffe 100644 (file)
@@ -143,7 +143,7 @@ cdef void _handleSaxStart(void* ctxt, const_xmlChar* c_localname, const_xmlChar*
             attrib = EMPTY_READ_ONLY_DICT
         else:
             attrib = {}
-            for i in range(0, c_nb_attributes):
+            for i in range(c_nb_attributes):
                 name = _namespacedNameFromNsName(
                     c_attributes[2], c_attributes[0])
                 if c_attributes[3] is NULL:
@@ -158,7 +158,7 @@ cdef void _handleSaxStart(void* ctxt, const_xmlChar* c_localname, const_xmlChar*
             nsmap = EMPTY_READ_ONLY_DICT
         else:
             nsmap = {}
-            for i in range(0, c_nb_attributes):
+            for i in range(c_nb_namespaces):
                 prefix = funicodeOrNone(c_namespaces[0])
                 nsmap[prefix] = funicode(c_namespaces[1])
                 c_namespaces += 2
index 04f70a81f16ab86c9fd07f902296feffa58086fb..81f37418ff59d02c0cfd05f6db6f3d1207cbc4cc 100644 (file)
@@ -649,7 +649,7 @@ cdef class _IncrementalFileWriter:
     cdef tree.xmlOutputBuffer* _c_out
     cdef bytes _encoding
     cdef const_char* _c_encoding
-    cdef object _target
+    cdef _FilelikeWriter _target
     cdef list _element_stack
     cdef int _status
 
@@ -660,7 +660,8 @@ cdef class _IncrementalFileWriter:
             encoding = b'ASCII'
         self._encoding = encoding
         self._c_encoding = _cstr(encoding) if encoding is not None else NULL
-        self._target = _create_output_buffer(outfile, self._c_encoding, compresslevel, &self._c_out)
+        self._target = _create_output_buffer(
+            outfile, self._c_encoding, compresslevel, &self._c_out)
 
     def __dealloc__(self):
         if self._c_out is not NULL:
@@ -865,14 +866,16 @@ cdef class _IncrementalFileWriter:
                 error_result = xmlerror.XML_ERR_OK
         else:
             tree.xmlOutputBufferClose(self._c_out)
+        self._status = WRITER_FINISHED
         self._c_out = NULL
+        del self._element_stack[:]
         if raise_on_error:
             self._handle_error(error_result)
 
     cdef _handle_error(self, int error_result):
         if error_result != xmlerror.XML_ERR_OK:
-            if self._writer is not None:
-                self._writer._exc_context._raise_if_stored()
+            if self._target is not None:
+                self._target._exc_context._raise_if_stored()
             _raiseSerialisationError(error_result)
 
 @cython.final
index 240b0f057781ea1e4ef9a9fae3b7f28cec56a8cf..2cbfe09b1dd318d1014407586007796e94c93b0b 100644 (file)
@@ -175,6 +175,25 @@ class _XmlFileTestCaseBase(HelperTestCase):
             else:
                 self.assertTrue(False)
 
+    def test_closing_out_of_order_in_error_case(self):
+        cm_exit = None
+        try:
+            with etree.xmlfile(self._file) as xf:
+                x = xf.element('test')
+                cm_exit = x.__exit__
+                x.__enter__()
+                raise ValueError('123')
+        except ValueError:
+            self.assertTrue(cm_exit)
+            try:
+                cm_exit(ValueError, ValueError("huhu"), None)
+            except etree.LxmlSyntaxError:
+                self.assertTrue(True)
+            else:
+                self.assertTrue(False)
+        else:
+            self.assertTrue(False)
+
     def _read_file(self):
         self._file.seek(0)
         return self._file.read()
index 351227fca344ed98cce60e2d3a0eb681b589e000..5ae69bd5f0e841ccaf8765eaa00f9fba9d93d01c 100644 (file)
@@ -1 +1 @@
-3.2.4
+3.2.5