Lxml

lxml

2017-01-08

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?

17

Motto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

Aims . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

3 Installing lxml

19

Where to get it . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

MS Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

MacOS-X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

Building lxml from dev sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Using lxml with python-libxml2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Source builds on MS Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

Source builds on MacOS-X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

4 Benchmarks and Speed

22

General notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22

How to read the timings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

Parsing and Serialising . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

The ElementTree API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

Child access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

Element creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

Merging different sources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

deepcopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

Tree traversal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

A longer example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

lxml.objectify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

ObjectPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32

2

CONTENTS

CONTENTS

Caching Elements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Further optimisations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

5 ElementTree compatibility of lxml.etree

35

6 lxml FAQ - Frequently Asked Questions

38

General Questions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Is there a tutorial? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Where can I find more documentation about lxml? . . . . . . . . . . . . . . . . . . . . . . . . . . 38

What standards does lxml implement? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38

Who uses lxml? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

What is the difference between lxml.etree and lxml.objectify? . . . . . . . . . . . . . . . . . . . 40

How can I make my application run faster? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

What about that trailing text on serialised Elements? . . . . . . . . . . . . . . . . . . . . . . . . 41

How can I find out if an Element is a comment or PI? . . . . . . . . . . . . . . . . . . . . . . . . 41

How can I map an XML tree into a dict of dicts? . . . . . . . . . . . . . . . . . . . . . . . . . . . 41

Why does lxml sometimes return 'str' values for text in Python 2? . . . . . . . . . . . . . . . . . 42

Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Which version of libxml2 and libxslt should I use or require? . . . . . . . . . . . . . . . . . . . . 42

Where are the binary builds? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

Why do I get errors about missing UCS4 symbols when installing lxml? . . . . . . . . . . . . . . 43

My C compiler crashes on installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Contributing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Why is lxml not written in Python? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

How can I contribute? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

Bugs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

My application crashes! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

My application crashes on MacOS-X! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

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? . . . . . . . . . . . . . . . . . . . . . 45

Threading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Can I use threads to concurrently access the lxml API? . . . . . . . . . . . . . . . . . . . . . . . 46

Does my program run faster if I use threads? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

Would my single-threaded program run faster if I turned off threading? . . . . . . . . . . . . . . . 46

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

Why doesn't the pretty_print option reformat my XML output? . . . . . . . . . . . . . . . 48

Why can't lxml parse my XML from unicode strings? . . . . . . . . . . . . . . . . . . . . . . . . 49

Can lxml parse from file objects opened in unicode/text mode? . . . . . . . . . . . . . . . . . . . 49

What is the difference between str(xslt(doc)) and xslt(doc).write() ? . . . . . . . . . . . . . . . . 49

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? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

How do I use lxml safely as a web-service endpoint? . . . . . . . . . . . . . . . . . . . . . . . . 50

XPath and Document Traversal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

What are the findall() and xpath() methods on Element(Tree)? . . . . . . . . . . . . . . . 51

Why doesn't findall() support full XPath expressions? . . . . . . . . . . . . . . . . . . . . . 51

How can I find out which namespace prefixes are used in a document? . . . . . . . . . . . . . . . 51

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

3

CONTENTS

CONTENTS

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 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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

4

CONTENTS

CONTENTS

(Pre-ISO-Schematron) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106

11 XPath and XSLT with lxml

108

XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

The xpath() method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

Namespaces and prefixes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

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

138

Parsing HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

Parsing HTML fragments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

Really broken pages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138

HTML Element Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

Running HTML doctests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

Creating HTML with the E-factory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140

Viewing your HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

Working with links . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141

Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

Forms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142

Form Filling Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

Form Submission . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

Cleaning up HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144

autolink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

wordwrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146

5

CONTENTS

CONTENTS

HTML Diff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

Microformat Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

14 lxml.cssselect

149

The CSSSelector class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149

The cssselect method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

Supported Selectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150

15 BeautifulSoup Parser

151

Parsing with the soupparser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151

Entity handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152

Using soupparser as a fallback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

Using only the encoding detection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

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

6

CONTENTS

CONTENTS

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

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 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

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.7.2 (2017-01-08) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

3.7.1 (2016-12-23) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

3.7.0 (2016-12-10) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196

3.6.4 (2016-08-20) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

3.6.3 (2016-08-18) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

3.6.2 (2016-08-18) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

3.6.1 (2016-07-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

3.6.0 (2016-03-17) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

3.5.0 (2015-11-13) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

3.5.0b1 (2015-09-18) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

3.4.4 (2015-04-25) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

3.4.3 (2015-04-15) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

3.4.2 (2015-02-07) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

3.4.1 (2014-11-20) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

3.4.0 (2014-09-10) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200

3.3.6 (2014-08-28) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

3.3.5 (2014-04-18) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

3.3.4 (2014-04-03) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201

3.3.3 (2014-03-04) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

3.3.2 (2014-02-26) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

3.3.1 (2014-02-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202

3.3.0 (2014-01-26) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

3.3.0beta5 (2014-01-18) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203

7

CONTENTS

CONTENTS

3.3.0beta4 (2014-01-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 3.3.0beta3 (2014-01-02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 3.3.0beta2 (2013-12-20) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 3.3.0beta1 (2013-12-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 3.2.5 (2014-01-02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 3.2.4 (2013-11-07) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 3.2.3 (2013-07-28) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 3.2.2 (2013-07-28) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 3.2.1 (2013-05-11) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 3.2.0 (2013-04-28) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 3.1.2 (2013-04-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 3.1.1 (2013-03-29) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 3.1.0 (2013-02-10) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 3.1beta1 (2012-12-21) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 3.0.2 (2012-12-14) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209 3.0.1 (2012-10-14) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 3.0 (2012-10-08) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 3.0beta1 (2012-09-26) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 3.0alpha2 (2012-08-23) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 3.0alpha1 (2012-07-31) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 2.3.6 (2012-09-28) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 2.3.5 (2012-07-31) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 2.3.4 (2012-03-26) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 2.3.3 (2012-01-04) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 2.3.2 (2011-11-11) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 2.3.1 (2011-09-25) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 2.3 (2011-02-06) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 2.3beta1 (2010-09-06) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 2.3alpha2 (2010-07-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 2.3alpha1 (2010-06-19) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 2.2.8 (2010-09-02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 2.2.7 (2010-07-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 2.2.6 (2010-03-02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 2.2.5 (2010-02-28) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 2.2.4 (2009-11-11) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 2.2.3 (2009-10-30) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 2.2.2 (2009-06-21) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 2.2.1 (2009-06-02) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 2.2 (2009-03-21) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 2.2beta4 (2009-02-27) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 2.2beta3 (2009-02-17) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 2.2beta2 (2009-01-25) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 2.1.5 (2009-01-06) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 2.2beta1 (2008-12-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 2.1.4 (2008-12-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 2.0.11 (2008-12-12) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 2.2alpha1 (2008-11-23) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 2.1.3 (2008-11-17) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 2.0.10 (2008-11-17) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 2.1.2 (2008-09-05) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 2.0.9 (2008-09-05) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 2.1.1 (2008-07-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 2.0.8 (2008-07-24) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 2.1 (2008-07-09) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 2.0.7 (2008-06-20) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 2.1beta3 (2008-06-19) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227

8

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download