博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【python】lxml
阅读量:4539 次
发布时间:2019-06-08

本文共 3185 字,大约阅读时间需要 10 分钟。

来源:

 

lxml是python中处理xml的一个非常强大的库,可以非常方便的解析和生成xml文件。下面的内容翻译了链接中的一部分

 

1.生成空xml节点

from lxml import etreeroot = etree.Element("root")print(etree.tostring(root, pretty_print=True))

2.生成xml子节点

from lxml import etreeroot = etree.Element("root")root.append(etree.Element("child1"))     #方法一child2 = etree.SubElement(root, "child2")  #方法二child2 = etree.SubElement(root, "child3")print(etree.tostring(root))

3.生成带内容的xml节点

from lxml import etreeroot = etree.Element("root")root.text = "Hello World"print(etree.tostring(root, pretty_print=True))
Hello World

4.属性

lxml中将属性以字典的形式存储

生成属性

from lxml import etreeroot = etree.Element("root", intersting = "totally")  #方法一root.set("hello","huhu")  #方法二root.text = "Hello World"print(etree.tostring(root))
Hello World

获取属性

方法一:

root.get("interesting")root.get("hello")
totallyhuhu

方法二:

attributes = root.attribprint(attributes["interesting"])

遍历属性

for name, value in sorted(root.items()):     print('%s = %r' % (name, value))

5.生成特殊内容

如下xml,中间的文字被<br/>分割,需要用到.tail

Hello
World
html = etree.Element("html")body = etree.SubElement(html, "body")body.text = "TEXT"br = etree.SubElement(body, "br")br.tail = "TAIL"etree.tostring(html)

6.遍历

遍历节点

for element in root.iter():     print("%s - %s" % (element.tag, element.text))

遍历指定子节点,将子节点名写入iter()

for element in root.iter("child"):     print("%s - %s" % (element.tag, element.text))

7.用XPath查找节点内容

build_text_list = etree.XPath("//text()") # lxml.etree only!print(build_text_list(html))

8.查找节点

iterfind():遍历所有节点匹配表达式

findall():返回满足匹配的节点列表

find():返回满足匹配的第一个

findtext():返回第一个满足匹配条件的.text内容

设有以下xml内容

root = etree.XML("
aText
")

查找子节点

>>> print(root.find("b"))None>>> print(root.find("a").tag)a

查找树中任意节点

>>> print(root.find(".//b").tag)b>>> [ b.tag for b in root.iterfind(".//b") ]['b', 'b']

查找具有指定属性的节点

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

9.字符串解析为XML

>>> some_xml_data = "
data
">>> root = etree.fromstring(some_xml_data)>>> print(root.tag)root>>> etree.tostring(root)b'
data
'

10.使用E-factory快速生成XML和HTML

>>> from lxml.builder import E>>> def CLASS(*args): # class is a reserved word in Python        return {
"class":' '.join(args)}>>> html = page = ( E.html( # create an Element called "html" E.head( E.title("This is a sample document") ), E.body( E.h1("Hello!", CLASS("title")), E.p("This is a paragraph with ", E.b("bold"), " text in it!"), E.p("This is another paragraph, with a", "\n ", E.a("link", href="http://www.python.org"), "."), E.p("Here are some reservered characters:
."), etree.XML("

And finally an embedded XHTML fragment.

"), ) ) )>>> print(etree.tostring(page, pretty_print=True))
This is a sample document

Hello!

This is a paragraph with bold text in it!

This is another paragraph, with a link.

Here are some reservered characters: <spam&egg>.

And finally an embedded XHTML fragment.

 

转载于:https://www.cnblogs.com/dplearning/p/5762070.html

你可能感兴趣的文章
ng 动态的生成option。
查看>>
ORACLE-12C-RAC INSTALL
查看>>
自定义引用类型的Enumerable.Union调用(原创)
查看>>
抽象类实例
查看>>
react context prop-types
查看>>
Java之路——Java初接触
查看>>
2018.12.27学习JavaScript
查看>>
Cocoa编程开发者手册
查看>>
C++框架_之Qt的开始部分_概述_安装_创建项目_快捷键等一系列注意细节
查看>>
理工之 A+B Problem III
查看>>
SalesForce自定义按钮(javascript执行),点击按钮更新Filed
查看>>
软件工程第一次作业
查看>>
【Android 界面效果24】Intent和PendingIntent的区别
查看>>
node学习之搭建服务器并加装静态资源
查看>>
android 按menu键解锁功能的开关
查看>>
wpf 自定义窗口,最大化时覆盖任务栏解决方案
查看>>
Linux 下的dd命令使用详解
查看>>
POJ-1273 Drainage Ditches 最大流Dinic
查看>>
ASP.NET学习记录点滴
查看>>
uva 12097(二分)
查看>>