整理Python lxml读写xml文件详细教程

Python lxml读写xml文件详细教程

xml文档解析

下面展示详细解析过程。

<?xml version='1.0' encoding='UTF-8'?>
<root>
  <全局变量>
      <参数 name="g_server_ip" value="192.168.0.6" type="str" Remark="服务器IP地址"/>
      <参数 name="g_server_port" value="9008" type="int" Remark="服务器端口号"/>
  </全局变量>
</root>  
from lxml import etree
def parsexmlfile(path):
	"""
	path xml文件路径
	"""
	tree = etree.parse(path)
	        row = 0
	        for global_var_root in tree.xpath('//全局变量'):
	            for variabl in global_var_root .getchildren():
	            print(va.get('name', ''))
	            print(va.get('value', ''))
	            print(va.get('type', ''))
	            print(va.get('Remark', ''))

创建xml文档节点

下面展示创建xml文档节点,例如 我们想上面的节点插入一个变量,并保持格式化美化。

from lxml import etree
def CreateXmlNode(path):
	"""
	path xml文件路径
	"""
	parser = etree.XMLParser(remove_blank_text=True)
    tree = etree.parse(path,parser=parser)
    variable_root_lst = tree.xpath('//全局变量')
    newSub = etree.Element("参数")
    newSub.set('name', 'Abc')
    newSub.set('value', '1520')
    newSub.set('type', 'int')
    newSub.set('Remark', 'Helllo')
	newSub1 = etree.Element("参数")
    newSub1.set('name', 'test')
    newSub1.set('value', '6655')
    newSub1.set('type', 'str')
    newSub1.set('Remark', 'world')
    variable_root_lst[0].append(newSub)
    variable_root_lst[0].append(newSub1)
    tree.write(path, pretty_print=True, xml_declaration=True, encoding='utf-8')

各个参数含义如下:
1)第1个参数是xml的完整路径(包括文件名);
2)pretty_print参数是否美化代码;
3)xml_declaration参数是否写入xml声明,就是我们看到xml文档第1行文字;
4)encoding参数很明显是保存的编码。
(注意:parser = etree.XMLParser(remove_blank_text=True) 一定要加,不然pretty_print是没有作用,会出现排版的问题)

更新xml文档节点

下面展示创建xml文档节点,例如 我们想上面的节点更新一个变量。

from lxml import etree
def updateXmlNode(path):
	"""
	path xml文件路径
	"""
	tree = etree.parse(path)
	for global_var_root in tree.xpath('//全局变量'):
		for va in global_var_root .getchildren():
			if va.get('name', '') == "IP":
				va.set('value', '192.168.1.5')
				break
	tree.write(path, pretty_print=True, xml_declaration=True, encoding='utf-8')

版权声明:本文为ZuoYueXian原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。