前言:
xml也是常用的配置文件格式之一,Python中的xml.etree.ElementTree模块支持解析和创建xml数据。xml格式不再赘述,本文采用参考文献1中的示例xml数据作为测试数据,
内容如下:
<?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank>1</rank> <year>2008</year> <gdppc>141100</gdppc> <neighbor name="Austria" direction="E"/> <neighbor name="Switzerland" direction="W"/> </country> <country name="Singapore"> <rank>4</rank> <year>2011</year> <gdppc>59900</gdppc> <neighbor name="Malaysia" direction="N"/> </country> <country name="Panama"> <rank>68</rank> <year>2011</year> <gdppc>13600</gdppc> <neighbor name="Costa Rica" direction="W"/> <neighbor name="Colombia" direction="E"/> </country> </data>
读取xml文件时需要用到的对象及函数、属性如下,完整的代码及程序运行结果如下所示:
import xml.etree.ElementTree as ET def ShowSubElement(curElement,level): print(level,' tag:',curElement.tag,'attribute:', curElement.attrib,'text:',curElement.text) for child in curElement: ShowSubElement(child,level+1) tree = ET.parse('test.xml') level=1 root = tree.getroot() ShowSubElement(root,level)
构建xml文件时需要用到的对象及函数、属性如下,完整的代码及程序运行结果如下所示:
import xml.etree.ElementTree as ET root = ET.Element('root') root.set('ver','2.0') classA=ET.Element('classA') root.append(classA) classA.set("master","张三") classA.set("grade","一年级") studentA=ET.Element('studentA') classA.append(studentA) studentA.text='小米' classB=ET.SubElement(root,'classB') classB.set("master","李四") classB.set("grade","三年级") studentB=ET.SubElement(classB,'studentB') studentB.text='小明' tree = ET.ElementTree(root) tree.write("writetest.xml")
除了上述基本的读写函数之外,xml.etree.ElementTree模块还提供有很多十分方便的查找函数,用于在 ElementTree 实例中快速查找指定的元素,详细介绍请见参考,
除了xml.etree.ElementTree模块,Python还支持采用xml.dom.minidom读写xml文件,后者是文档对象模型接口的最小化实现,其目标是比完整 DOM 更简单并且更为小巧,但如果对于DOM 还不十分熟悉,则应考虑改用 xml.etree.ElementTree 模块来进行 XML 处理。
读取xml文件时需要用到的对象及函数、属性如下,完整的代码及程序运行结果如下所示。从运行结果可以看出,xml.dom.minidom把元素的内容也作为一个节点,即#text,这点来说,没有xml.etree.ElementTree方便,后者不需要考虑这个。
from xml.dom.minidom import parse def ShowSubNode(curNode): print('节点:',curNode.nodeName,":",curNode.nodeValue) if curNode.nodeName=='#text': return if curNode.hasAttributes: for attr in curNode.attributes.values(): print('属性:',attr.name,':',attr.value) if curNode.hasChildNodes: for child in curNode.childNodes: ShowSubNode(child) doc = parse('test.xml') root = doc.documentElement ShowSubNode(root)
构建xml文件时需要用到的对象及函数、属性如下,完整的代码及程序运行结果如下所示:
import xml.dom.minidom doc = xml.dom.minidom.Document() root=doc.createElement("root") root.setAttribute('ver','2.0') doc.appendChild(root) classA=doc.createElement('classA') root.appendChild(classA) classA.setAttribute("master","张三") classA.setAttribute("grade","一年级") studentA=doc.createElement('studentA') classA.appendChild(studentA) studentA.appendChild(doc.createTextNode('小米')) classB=doc.createElement('classB') root.appendChild(classB) classB.setAttribute("master","李四") classB.setAttribute("grade","三年级") studentB=doc.createElement('studentB') classB.appendChild(studentB) studentB.appendChild(doc.createTextNode('小明')) with open("writetest1.xml", "w", encoding='utf-8') as f: doc.writexml(f, indent='\t', addindent='\t', newl='\n', encoding="utf-8")
上述内容即为采用xml.dom.minidom读写xml文件的基本用法。测试代码主要参考自参考[1],[2],其中唯一需要说明的是枚举节点的属性集合,百度了很多文章都没有看到怎么枚举的,后面直接到xml.dom.minidom的源码中翻到的用法参考
到此这篇关于一文详解测试Python读写xml配置文件的文章就介绍到这了,更多相关Python读写xml配置文件内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!