python的lxml库简介_Python之lxml库学习笔记一

lxml takes all the pain out of XML.

Stephan Richter

lxml是Python语言里和XML以及HTML工作的功能最丰富和最容易使用的库。lxml是为libxml2和libxslt库的一个Python化的绑定。它与众不同的地方是它兼顾了这些库的速度和功能完整性,以及纯Python API的简洁性,大部分与熟知的ElementTree API兼容但比之更优越。

安装lxml:

要求:需要Python2.3或更后的版本

使用easy_install工具,以超级用户或管理员的角色run下面的命令:

easy_install lxml

在windows下,最好指定版本号:easy_install lxml==2.2.6

使用lxml进行开发

lxml.etree指南

通常使用lxml.etree的方式

>>> from lxml import etree

Element类,一个Element是ElementTree API的主要容器类,大部分的XML tree功能都是通过这个类来访问的。Elements可以非常容易地通过Element工厂方法来创建。

>>> root = etree.Element("root")

元素的XML tag名字是通过tag属性来访问的

>>> print root.tag # root

Elements是在XML树状结构中组织的,为创建子元素并将它们加到父元素上,可以使用append()方法。

>>> root.append( etree.Element("child1") )

我们还有更高效的方法:SubElement工厂方法,它使用和Element工厂方法相同的参数,不过额外需要父节点作第一个参数:

>>> child2 = etree.SubElement(root, "child2")

>>> child3 = etree.SubElement(root, "child3")

可以使用tostring()方法来看得到的XML

>>> print etree.tostring(root, pretty_print=True)

元素是列表

>>> child = root[0]

>>> print child.tag

child1

>>> print len(root)

3

>>> root.index(root[1]) # lxml.etree only!

1

打印所有子节点:

>>> children = list(root)

>>> for child in root:

... print(child.tag)

child1

child2

child3

可以使用insert()方法插入新的子节点:

>>> root.insert(0, etree.Element("child0"))

删除子节点:

>>> root[0] = root[-1] # this moves the element!

>>> for child in root:

... print(child.tag)

child3

child1

child2

如果想把一个元素拷贝到不同的地方,需要创建一个独立的deep copy。

>>> from copy import deepcopy

>>> element = etree.Element("neu")

>>> element.append( deepcopy(root[1]) )

>>> print(element[0].tag)

child1

>>> print([ c.tag for c in root ])

[’child3’, ’child1’, ’child2’]

getparent()返回父节点:

>>> root is root[0].getparent() # lxml.etree only!

True

元素的兄弟或邻居节点是通过next和previous属性来访问的

The siblings (or neighbours) of an element are accessed as next and previous elements:

>>> root[0] is root[1].getprevious() # lxml.etree only!

True

>>> root[1] is root[0].getnext() # lxml.etree only!

True

带属性的元素

XML元素支持属性,可以用Element工厂方法直接创建。

>>> root = etree.Element("root", interesting="totally")

>>> etree.tostring(root)

b’’

可以使用set和get方法访问这些属性:

>>> print root.get("interesting")

totally

>>> root.set("interesting", "somewhat")

>>> print root.get("interesting")

somewhat

也可以使用attrib性质的字典接口

>>> attributes = root.attrib

>>> print(attributes["interesting"])

somewhat

>>> print(attributes.get("hello"))

None

>>> attributes["hello"] = "Guten Tag"

>>> print(attributes.get("hello"))

Guten Tag

>>> print(root.get("hello"))

Guten Tag

元素可以包含文字:

>>> root = etree.Element("root")

>>> root.text = "TEXT"

>>> print(root.text)

TEXT

>>> etree.tostring(root)

’TEXT’

如果XML用在(X)HTML中,文本也可以在不同的元素中显示:


World

元素有tail属性,它包含XML 树中元素直接跟的,直到下个元素的文本。

>>> html = etree.Element("html")

>>> body = etree.SubElement(html, "body")

>>> body.text = "TEXT"

>>> etree.tostring(html)

b’

TEXT’

>>> br = etree.SubElement(body, "br")

>>> etree.tostring(html)

b’

TEXT

>>> br.tail = "TAIL"

>>> etree.tostring(html)

b’

TEXT
TAIL’
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值