lxml解析xml文件
2016-07-08 23:14
393 查看
最近在工作中需要从多个xml文件中选出一些节点合成一个新的xml文件,首先想到的使用python自带的xml.etree.ElementTree模块,但是发现合并后的文件中原来的CDATA部分不对,括号和引号都被转义了,没有和原来保持一致,ElementTree模块解决不了这个问题,我就想会不会有第三方包能解决这个问题。然后就找到了一个强大的xml解析包lxml。
lxml和ElementTree的用法几乎一致。下面就简单的介绍几个常用的用法。
1.安装lxml模块后需要导入lxml模块的etree类
from lxml import etree
2.解析xml文件
xml_file = etree.parse(r'd:\test.xml')
3.获取文件的根节点
root_node = xml_file.getroot()
4.使用for遍历节点的子节点
for sub_node in root_node:
5.获取节点的某个属性的值,下面是获取some_node节点的name属性的值
name_value = some_node.attrib['name']
6.设置节点的某个属性的值,下面是将some_node节点的name属性的值设为new_name
some_node.set('name', new_name)
7.使用自定义的解析器解析xml,可以定义一些特性,如strip_cdata可以设置在解析xml文件时是否解析cdata部分
parser = etree.XMLParser(encoding='utf-8',strip_cdata=False)
xml_file = etree.parse(some_file, parser)
8.在release节点的module节点下面插入一个new_module节点
release.insert(release.index(module)+1,new_module)
9.判断是否是注释
if not isinstance(some_node, etree._Comment):
如果把含有中文注释的节点拷贝到另外一个文件中,中文会显示不对,需要编码一下
str_comment = comment_node.text.encode('utf-8')
10.把生成的xml文件写入到file_path文件中
root = etree.Element('root_node') #生成一个节点
tree = etree.ElementTree(root) #把root节点作为根节点,生成xml文件
tree.write(file_path,encoding='utf-8') #把写入到文件中
11.节点的tail和text属性可以用来添加换行符
tail是在节点的末尾添加
some_element.tail='\n'
要想了解更多的lxml的用法,可以查看lxml的帮助文档:http://lxml.de/api/index.html
lxml和ElementTree的用法几乎一致。下面就简单的介绍几个常用的用法。
1.安装lxml模块后需要导入lxml模块的etree类
from lxml import etree
2.解析xml文件
xml_file = etree.parse(r'd:\test.xml')
3.获取文件的根节点
root_node = xml_file.getroot()
4.使用for遍历节点的子节点
for sub_node in root_node:
5.获取节点的某个属性的值,下面是获取some_node节点的name属性的值
name_value = some_node.attrib['name']
6.设置节点的某个属性的值,下面是将some_node节点的name属性的值设为new_name
some_node.set('name', new_name)
7.使用自定义的解析器解析xml,可以定义一些特性,如strip_cdata可以设置在解析xml文件时是否解析cdata部分
parser = etree.XMLParser(encoding='utf-8',strip_cdata=False)
xml_file = etree.parse(some_file, parser)
8.在release节点的module节点下面插入一个new_module节点
release.insert(release.index(module)+1,new_module)
9.判断是否是注释
if not isinstance(some_node, etree._Comment):
如果把含有中文注释的节点拷贝到另外一个文件中,中文会显示不对,需要编码一下
str_comment = comment_node.text.encode('utf-8')
10.把生成的xml文件写入到file_path文件中
root = etree.Element('root_node') #生成一个节点
tree = etree.ElementTree(root) #把root节点作为根节点,生成xml文件
tree.write(file_path,encoding='utf-8') #把写入到文件中
11.节点的tail和text属性可以用来添加换行符
tail是在节点的末尾添加
some_element.tail='\n'
要想了解更多的lxml的用法,可以查看lxml的帮助文档:http://lxml.de/api/index.html
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法