【python】lxml
来源:http://lxml.de/tutorial.html
lxml是python中处理xml的一个非常强大的库,可以非常方便的解析和生成xml文件。下面的内容翻译了链接中的一部分
1.生成空xml节点
from lxml import etree
root = etree.Element("root")
print(etree.tostring(root, pretty_print=True))
<root/>
2.生成xml子节点
from lxml import etree
root = etree.Element("root")
root.append(etree.Element("child1")) #方法一
child2 = etree.SubElement(root, "child2") #方法二
child2 = etree.SubElement(root, "child3")
print(etree.tostring(root))
<root>
<child1/>
<child2/>
<child3/>
</root>
3.生成带内容的xml节点
from lxml import etree
root = etree.Element("root")
root.text = "Hello World"
print(etree.tostring(root, pretty_print=True))
<root>Hello World</root>
4.属性
lxml中将属性以字典的形式存储
生成属性
from lxml import etree
root = etree.Element("root", intersting = "totally") #方法一
root.set("hello","huhu") #方法二
root.text = "Hello World"
print(etree.tostring(root))
<root intersting="totally" hello="huhu">Hello World</root>
获取属性
方法一:
root.get("interesting")
root.get("hello")
totally
huhu
方法二:
attributes = root.attrib
print(attributes["interesting"])
遍历属性
for name, value in sorted(root.items()):
print('%s = %r' % (name, value))
5.生成特殊内容
如下xml,中间的文字被<br/>分割,需要用到.tail
<html><body>Hello<br/>World</body></html>
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("<root><a x='123'>aText<b/><c/><b/></a></root>")
查找子节点
>>> 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 = "<root>data</root>" >>> root = etree.fromstring(some_xml_data)
>>> print(root.tag)
root
>>> etree.tostring(root)
b'<root>data</root>'
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: <spam&egg>."),
etree.XML("<p>And finally an embedded XHTML fragment.</p>"),
)
)
) >>> print(etree.tostring(page, pretty_print=True))
<html>
<head>
<title>This is a sample document</title>
</head>
<body>
<h1 class="title">Hello!</h1>
<p>This is a paragraph with <b>bold</b> text in it!</p>
<p>This is another paragraph, with a
<a href="http://www.python.org">link</a>.</p>
<p>Here are some reservered characters: <spam&egg>.</p>
<p>And finally an embedded XHTML fragment.</p>
</body>
</html>
【python】lxml的更多相关文章
- 【python】lxml中多个xml采用相同节点时出现的问题
今天突然发现了一个lxml的坑. 假设我们有一个节点 <id>123</id> 有两个父节点都要用上述节点,则必须把上面的节点写两遍!用同一个会出错! 出错例子: #!/usr ...
- 【python】lxml查找属性为指定值的节点
假设有如下xml在/home/abc.xml位置 <A> <B id=" name="apple"/> <B id=" name= ...
- 【python】lxml处理命名空间
有如下xml <A xmlns="http://This/is/a/namespace"> <B>dataB1</B> <B>dat ...
- 【python】自动更新pu口袋校园活动
[python]自动更新pu口袋校园活动 脚本目标: 1. 自动爬取pu口袋校园活动,筛选出需要的活动,此处我的筛选条件是线上活动,因为可以不用去就可以白嫖学时 2. 自动发送邮件到QQ邮箱,每次只发 ...
- 【Python②】python之首秀
第一个python程序 再次说明:后面所有代码均为Python 3.3.2版本(运行环境:Windows7)编写. 安装配置好python后,我们先来写第一个python程序.打开IDLE (P ...
- 【python】多进程锁multiprocess.Lock
[python]多进程锁multiprocess.Lock 2013-09-13 13:48 11613人阅读 评论(2) 收藏 举报 分类: Python(38) 同步的方法基本与多线程相同. ...
- 【python】SQLAlchemy
来源:廖雪峰 对比:[python]在python中调用mysql 注意连接数据库方式和数据操作方式! 今天发现了个处理数据库的好东西:SQLAlchemy 一般python处理mysql之类的数据库 ...
- 【python】getopt使用
来源:http://blog.chinaunix.net/uid-21566578-id-438233.html 注意对比:[python]argparse模块 作者:limodou版权所有limod ...
- 【Python】如何安装easy_install?
[Python]如何安装easy_install? http://jingyan.baidu.com/article/b907e627e78fe146e7891c25.html easy_instal ...
随机推荐
- Tomcat6.0 管理器配置
最近忙着毕业答辩,填写材料,好多事情都给耽搁了!一个月都没有继续翻译tomcat,这回有点时间赶紧补上. 这部分,其实对开发者或者tomcat管理者来说,只要会登录页面管理器或者使用写简单的http就 ...
- Hadoop之Storm安装
nimbus:主节点,负责分发代码,分配任务(只能有一个)supervisor:从节点,负责执行任务(可以有多个) jdkzookeeper(192.168.1.170/171/172)建议在zook ...
- Android 4.4以上的存储读写权限
最近遇到一个奇怪现象,直接往Android的SD卡根目录写入文件,报异常:open failed EACCES:permission denied. 已经在manifest.xml中加入android ...
- Java Io 之 编码
Java字符串编码一些知识总结: package com.dcz.io; import java.io.UnsupportedEncodingException; public class Encod ...
- homework160809207刘兆轩
# include <stdio.h> int main() { float a,b,c,m,n,l,k,j,i; printf("请输入三个数:\n"); scanf ...
- hiho #1361 Playfair密码表
题目1 : Playfair密码表 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho经常用Playfair密码表加密自己的代码. 密码表是按以下步骤生成的. ...
- Internet与www的关系
Internet是把分布于世界各地不同结构的计算机网络用各种传输介质相互连接起来的网络. 因此,被称为网络的网络.Internet提供的主要服务有万维网(WWW.)文件传输(FTP.)电子邮件(E-m ...
- nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器[转]
转 :http://redstarofsleep.iteye.com/blog/2123752 Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个n ...
- 2016年11月10日--CSS动画
jquery动画:http://www.w3school.com.cn/jquery/jquery_animate.aspCSS3动画教程1:http://www.w3school.com.cn/cs ...
- django的分页--不全也未实现
一.Django内置分页 Paginator 二.自定义分页 分页功能在每个网站都是必要的,对于分页来说,其实就是根据用户的输入计算出应该在数据库表中的起始位置. 1.设定每页显示数据条数 2.用户输 ...