您的位置:首页 > 编程语言 > Python开发

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python lxml