python的lxml库简介_Python lxml教程

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

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

>>> body.text = 'Text'

>>> print(etree.tostring(html))

b'

Text'

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

>>> print(etree.tostring(html))

b'

Text
'

# tail仅在该标签后面追加文本

>>> br.tail = 'Tail'

>>> print(etree.tostring(br))

b'
Tail'

>>> print(etree.tostring(html))

b'

Text
Tail'

# tostring方法增加method参数,过滤单一标签,输出全部文本

>>> print(etree.tostring(html, method='text'))

b'TextTail'

2、XPath方式 # 方式一:过滤单一标签,返回文本

>>> print(html.xpath('string()'))

TextTail

# 方式二:返回列表,以单一标签为分隔

>>> print(html.xpath('//text()'))

['Text', 'Tail']

方法二获得的列表,每个元素都会带上它所属节点及文本类型信息,如下: >>> texts = html.xpath('//text()'))

>>> print(texts[0])

Text

# 所属节点

>>> parent = texts[0].getparent()

>>> print(parent.tag)

body

>>> print(texts[1], texts[1].getparent().tag)

Tail br

# 文本类型:是普通文本还是tail文本

>>> print(texts[0].is_text)

True

>>> print(texts[1].is_text)

False

>>> print(texts[1].is_tail)

True

文件解析与输出

这一节回答问题1。

这部分讲述如何将XML文件解析为 Element 对象,以及如何将 Element 对象输出为XML文件。1、文件解析

文件解析常用的有 fromstring 、 XML 和 HTML 三个方法。接受的参数都是字符串。>>> xml_data = 'data'

# fromstring方法

>>> root1 = etree.fromstring(xml_data)

>>> print(root1.tag)

root

>>> print(etree.tostring(root1))

b'data'

# XML方法,与fromstring方法基本一样

>>> root2 = etree.XML(xml_data)

>>> print(root2.tag)

root

>>> print(etree.tostring(root2))

b'data'

# HTML方法,如果没有和

标签,会自动补上

>>> root3 = etree.HTML(xml_data)

>>> print(root3.tag)

html

>>> print(etree.tostring(root3))

b'

data'

2、输出

输出其实就是前面一直在用的 tostring 方法了,这里补充 xml_declaration和 encoding 两个参数,前者是XML声明,后者是指定编码。>>> root = etree.XML('')

>>> print(etree.tostring(root))

b''

# XML声明

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

b"<?xml version='1.0' encoding='ASCII'?>\n"

# 指定编码

>>> print(etree.tostring(root, encoding='iso-8859-1'))

b"<?xml version='1.0' encoding='iso-8859-1'?>\n"

ElementPath

这一节回答问题2。

讲 ElementPath 前,需要引入 ElementTree 类,一个 ElementTree 对象可理解为一个完整的XML树,每个节点都是一个 Element 对象。而 ElementPath 则相当于XML中的XPath。用于搜索和定位 Element 元素。这里介绍两个常用方法,可以满足大部分搜索、查询需求,它们的参数都是XPath语句:

findall():返回所有匹配的元素,返回列表

find():返回匹配到的第一个元素 >>> root = etree.XML("aText")

# 查找第一个b标签

>>> print(root.find('b'))

None

>>> print(root.find('a').tag)

a

# 查找所有b标签,返回Element对象组成的列表

>>> [ b.tag for b in root.findall('.//b') ]

['b', 'b']

# 根据属性查询

>>> print(root.findall('.//a[@x]')[0].tag)

a

>>> print(root.findall('.//a[@y]'))

[]

参考:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值