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')