Lxml
lxml
2014-04-18
Contents
Contents
2
I lxml
13
1 lxml
14
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Download . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Mailing list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Bug tracker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
License . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
Old Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2 Why lxml?
18
Motto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
Aims . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3 Installing lxml
20
Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Building lxml from sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Using lxml with python-libxml2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
MS Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
MacOS-X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4 Benchmarks and Speed
23
General notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
How to read the timings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
Parsing and Serialising . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
The ElementTree API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
Child access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Element creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Merging different sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
deepcopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Tree traversal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
A longer example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
lxml.objectify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
ObjectPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
Caching Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Further optimisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5 ElementTree compatibility of lxml.etree
36
2
CONTENTS
CONTENTS
6 lxml FAQ - Frequently Asked Questions
39
General Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Is there a tutorial? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Where can I find more documentation about lxml? . . . . . . . . . . . . . . . . . . . . . . . . . . 39
What standards does lxml implement? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
Who uses lxml? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
What is the difference between lxml.etree and lxml.objectify? . . . . . . . . . . . . . . . . . . . 41
How can I make my application run faster? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
What about that trailing text on serialised Elements? . . . . . . . . . . . . . . . . . . . . . . . . 42
How can I find out if an Element is a comment or PI? . . . . . . . . . . . . . . . . . . . . . . . . 42
How can I map an XML tree into a dict of dicts? . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Why does lxml sometimes return 'str' values for text in Python 2? . . . . . . . . . . . . . . . . . 43
Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Which version of libxml2 and libxslt should I use or require? . . . . . . . . . . . . . . . . . . . . 43
Where are the binary builds? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
Why do I get errors about missing UCS4 symbols when installing lxml? . . . . . . . . . . . . . . 43
Contributing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Why is lxml not written in Python? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
How can I contribute? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
My application crashes! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
My application crashes on MacOS-X! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
I think I have found a bug in lxml. What should I do? . . . . . . . . . . . . . . . . . . . . . . . . 45
How do I know a bug is really in lxml and not in libxml2? . . . . . . . . . . . . . . . . . . . . . 46
Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
Can I use threads to concurrently access the lxml API? . . . . . . . . . . . . . . . . . . . . . . . 46
Does my program run faster if I use threads? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Would my single-threaded program run faster if I turned off threading? . . . . . . . . . . . . . . . 47
Why can't I reuse XSLT stylesheets in other threads? . . . . . . . . . . . . . . . . . . . . . . . . 47
My program crashes when run with mod_python/Pyro/Zope/Plone/... . . . . . . . . . . . . . . . . 47
Parsing and Serialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Why doesn't the pretty_print option reformat my XML output? . . . . . . . . . . . . . . . 49
Why can't lxml parse my XML from unicode strings? . . . . . . . . . . . . . . . . . . . . . . . . 49
Can lxml parse from file objects opened in unicode/text mode? . . . . . . . . . . . . . . . . . . . 50
What is the difference between str(xslt(doc)) and xslt(doc).write() ? . . . . . . . . . . . . . . . . 50
Why can't I just delete parents or clear the root node in iterparse()? . . . . . . . . . . . . . . . . . 50
How do I output null characters in XML text? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Is lxml vulnerable to XML bombs? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
How do I use lxml safely as a web-service endpoint? . . . . . . . . . . . . . . . . . . . . . . . . 51
XPath and Document Traversal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
What are the findall() and xpath() methods on Element(Tree)? . . . . . . . . . . . . . . . 52
Why doesn't findall() support full XPath expressions? . . . . . . . . . . . . . . . . . . . . . 52
How can I find out which namespace prefixes are used in a document? . . . . . . . . . . . . . . . 52
How can I specify a default namespace for XPath expressions? . . . . . . . . . . . . . . . . . . . 52
II Developing with lxml
53
7 The lxml.etree Tutorial
54
The Element class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Elements are lists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Elements carry attributes as a dict . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
Elements contain text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
Using XPath to find text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
Tree iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
Serialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
3
CONTENTS
CONTENTS
The ElementTree class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 Parsing from strings and files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
The fromstring() function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 The XML() function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 The parse() function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 Parser objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Incremental parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Event-driven parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 The E-factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 ElementPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
8 APIs specific to lxml.etree
74
lxml.etree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Other Element APIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Trees and Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
Error handling on exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Error logging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Serialisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Incremental XML generation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
CDATA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
XInclude and ElementInclude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
write_c14n on ElementTree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
9 Parsing XML and HTML with lxml
83
Parsers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Parser options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Error log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Parsing HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
Doctype information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
The target parser interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
The feed parser interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Incremental event parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Event types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
Modifying the tree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
Selective tag events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Comments and PIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
Events with custom targets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
iterparse and iterwalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
iterwalk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
Python unicode strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
Serialising to Unicode strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
10 Validation with lxml
98
Validation at parse time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
DTD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
RelaxNG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
XMLSchema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
Schematron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
(Pre-ISO-Schematron) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
11 XPath and XSLT with lxml
108
XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
The xpath() method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
Namespaces and prefixes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
4
CONTENTS
CONTENTS
XPath return values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Generating XPath expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 The XPath class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Regular expressions in XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 The XPathEvaluator classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 ETXPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Error handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 XSLT result objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Stylesheet parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Errors and messages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 The xslt() tree method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Dealing with stylesheet complexity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Profiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
12 lxml.objectify
118
The lxml.objectify API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Element access through object attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Creating objectify trees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Tree generation with the E-factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
Namespace handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
Asserting a Schema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
ObjectPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
Python data types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Recursive tree dump . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Recursive string representation of elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
How data types are matched . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
Type annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
XML Schema datatype annotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
The DataElement factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
Defining additional data classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
Advanced element class lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
What is different from lxml.etree? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
13 lxml.html
139
Parsing HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Parsing HTML fragments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Really broken pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
HTML Element Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Running HTML doctests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Creating HTML with the E-factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
Viewing your HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Working with links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
Form Filling Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Form Submission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Cleaning up HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
autolink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
wordwrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
HTML Diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Microformat Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
14 lxml.cssselect
150
The CSSSelector class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
5
CONTENTS
CONTENTS
The cssselect method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Supported Selectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
15 BeautifulSoup Parser
152
Parsing with the soupparser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Entity handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Using soupparser as a fallback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
Using only the encoding detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
16 html5lib Parser
155
Differences to regular HTML parsing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Function Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
III Extending lxml
157
17 Document loading and URL resolving
158
XML Catalogs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
URI Resolvers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Document loading in context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
I/O access control in XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
18 Python extensions for XPath and XSLT
163
XPath Extension functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
The FunctionNamespace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
Global prefix assignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
The XPath context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
Evaluators and XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
Evaluator-local extensions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
What to return from a function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
XSLT extension elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Declaring extension elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Applying XSL templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
Working with read-only elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
19 Using custom Element classes in lxml
172
Background on Element proxies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Element initialization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
Setting up a class lookup scheme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Default class lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
Namespace class lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Attribute based lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Custom element class lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Tree based element class lookup in Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Generating XML with custom classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Implementing namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
20 Sax support
180
Building a tree from SAX events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Producing SAX events from an ElementTree or Element . . . . . . . . . . . . . . . . . . . . . . . . . 180
Interfacing with pulldom/minidom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
21 The public C-API of lxml.etree
182
Writing external modules in Cython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Writing external modules in C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
6
CONTENTS
CONTENTS
IV Developing lxml
184
22 How to build lxml from source
185
Cython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Github, git and hg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
Building the sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Running the tests and reporting errors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Building an egg or wheel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Building lxml on MacOS-X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
Static linking on Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Building Debian packages from SVN sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
23 How to read the source of lxml
190
What is Cython? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Where to start? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Concepts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
The documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
lxml.etree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Python modules . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
lxml.objectify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
lxml.html . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
24 Credits
194
Main contributors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Special thanks goes to: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
A Changes
196
3.3.5 (2014-04-18) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
3.3.4 (2014-04-03) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
3.3.3 (2014-03-04) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
3.3.2 (2014-02-26) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
3.3.1 (2014-02-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
3.3.0 (2014-01-26) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
3.3.0beta5 (2014-01-18) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
3.3.0beta4 (2014-01-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
3.3.0beta3 (2014-01-02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
3.3.0beta2 (2013-12-20) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
3.3.0beta1 (2013-12-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
3.2.5 (2014-01-02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
3.2.4 (2013-11-07) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
3.2.3 (2013-07-28) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
3.2.2 (2013-07-28) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
3.2.1 (2013-05-11) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
3.2.0 (2013-04-28) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
3.1.2 (2013-04-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
3.1.1 (2013-03-29) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
3.1.0 (2013-02-10) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
3.1beta1 (2012-12-21) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
3.0.2 (2012-12-14) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
3.0.1 (2012-10-14) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
3.0 (2012-10-08) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
3.0beta1 (2012-09-26) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
3.0alpha2 (2012-08-23) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
3.0alpha1 (2012-07-31) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
2.3.6 (2012-09-28) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
2.3.5 (2012-07-31) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
7
CONTENTS
CONTENTS
2.3.4 (2012-03-26) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 2.3.3 (2012-01-04) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 2.3.2 (2011-11-11) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 2.3.1 (2011-09-25) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 2.3 (2011-02-06) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 2.3beta1 (2010-09-06) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 2.3alpha2 (2010-07-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 2.3alpha1 (2010-06-19) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 2.2.8 (2010-09-02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 2.2.7 (2010-07-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 2.2.6 (2010-03-02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 2.2.5 (2010-02-28) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 2.2.4 (2009-11-11) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 2.2.3 (2009-10-30) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 2.2.2 (2009-06-21) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 2.2.1 (2009-06-02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 2.2 (2009-03-21) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 2.2beta4 (2009-02-27) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 2.2beta3 (2009-02-17) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 2.2beta2 (2009-01-25) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 2.1.5 (2009-01-06) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 2.2beta1 (2008-12-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 2.1.4 (2008-12-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 2.0.11 (2008-12-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 2.2alpha1 (2008-11-23) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 2.1.3 (2008-11-17) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 2.0.10 (2008-11-17) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 2.1.2 (2008-09-05) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 2.0.9 (2008-09-05) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 2.1.1 (2008-07-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 2.0.8 (2008-07-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 2.1 (2008-07-09) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 2.0.7 (2008-06-20) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 2.1beta3 (2008-06-19) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 2.0.6 (2008-05-31) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 2.1beta2 (2008-05-02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 2.0.5 (2008-05-01) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 2.1beta1 (2008-04-15) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 2.0.4 (2008-04-13) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 2.1alpha1 (2008-03-27) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 2.0.3 (2008-03-26) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 2.0.2 (2008-02-22) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 2.0.1 (2008-02-13) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 2.0 (2008-02-01) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 1.3.6 (2007-10-29) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 1.3.5 (2007-10-22) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 1.3.4 (2007-08-30) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 1.3.3 (2007-07-26) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 1.3.2 (2007-07-03) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 1.3.1 (2007-07-02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 1.3 (2007-06-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 1.2.1 (2007-02-27) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 1.2 (2007-02-20) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 1.1.2 (2006-10-30) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 1.1.1 (2006-09-21) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 1.1 (2006-09-13) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
8
................
................
In order to avoid copyright disputes, this page is only a partial summary.
To fulfill the demand for quickly locating and searching documents.
It is intelligent file search solution for home and business.