Python中xml.etree.ElementTree读写xml文件实例

Python中xml.etree.ElementTree读写xml文件实例,第1张

概述 xml文件的内容1<user>2<nametitle="xmlexample">Itisanxmlexample<ame>3<articlename="Myarticle">4<algorithmname="a1">5<intervalname="n1"&g

 

xml 文件的内容
 1 <user> 2     <name title="xml example">It is an xml example</name> 3     <article name="My article"> 4       <algorithm name="a1"> 5         <interval name="n1">1000</interval> 6      </algorithm> 7     </article> 8    <article name="Your article"> 9       <algorithm name="a2">10         <interval name="n2">1001</interval>11      </algorithm>12     </article>13     <profile>14     <profile-name>profile_hard_easy</profile-name>15     <level>16     <level-value>1</level-value>17     <level-type>hard</level-type>18     </level>19     <level>20     <level-value>2</level-value>21     <level-type>easy</level-type>22     </level>23     </profile>24 </user>

 

  1 import os  2 import xml.etree.ElementTree as ET  3   4 '''  5 Python 标准库中,提供了6种可以用于处理XML的包,本文举实例说明第6种  6 1.xml.dom  7 2.xml.dom.minIDom  8 3.xml.dom.pulldom  9 4.xml.sax 10 5.xml.parse.expat 11 6.xml.etree.ElementTree(简称ET) 12 13 #获取当前文件所在目录 14 print(os.path.dirname(__file__)) 15 #路径拼接,得到xml 文件的路径 16 dirpath = os.path.join(os.path.dirname(__file__),"test2.xml") 17  18 #用ET.ElementTree 读取xml文件,将xml文件解析为tree 19 '''
说明: 20 ET提供了两个对象ElementTree将整个XML文档转化为树, Element则代表着树上的单个节点。对整个XML文档的交互(读取,写入,查找需要的元素)
一般是在 ElementTree层面进行的。对单个XML元素及其子元素,则是在 Element层面进行的。 21 ''' 22 tree = ET.ElementTree(file=dirpath) 23 #获取xml 文件的根结点 24 root = tree.getroot() 25 #xml 的根结点是一个Element 对象. 26 ''' 27 Element 对象常用的属性有: 28 Element.tag --输出标签的名称 29 Element.text --输出标签包含的内容 30 Element.attrib --标签的属性 31 ''' 32 print(root) #输出: <Element 'user' at 0x000001C02A2DB818> 33 #查看xml根结点root的属性 34 print(root.tag,root.attrib) #输出: user {}, 根结点没有属性 35 36 #可以通过递归方式,遍历根结点的所有子元素,获取数中所有的元素 37 for child_root in root: 38 print(child_root.tag,child_root.text,child_root.attrib) 39 ''' 40 输出: 41 name 42 {} 43 article 44 {'name': 'My article'} 45 profile 46 {} 47 ''' 48 #根据索引访问特定的子元素 49 print(root[1].tag,root[1].text,root[1].attrib) 50 ''' 51 输出: 52 article 53 {'name': 'My article'} 54 ''' 55 56 #使用ElementTree iter() 方法遍历 tree的所有元素 57 for elem in root.iter(): 58 print(elem.tag,elem.attrib) 59 if elem.tag == "profile": 60 print("=========Find it, I can do what I want") 61 62 #使用ElementTree iter() 方法,遍历指定tag的元素,找到自己感兴趣的属性 63 64 for sub_elem in root.iter(tag="article"): 65 print(sub_elem.tag,sub_elem.attrib) 66 67 #通过XPath 查找元素 68 69 ''' 70 ElementTree 对象常用到的方法如下,它们的相同点是接收Xpath路径作为参数,不同点是 71 1. find 返回第一个匹配的子元素 72 2. findall 以列表的形式返回所有匹配的子元素 73 3. iterfind 则返回一个所有匹配元素的迭代器(iterator) 74 75 Xpath 使用例子: 76 1. 返回所有tag为article的元素: 77 findall("article") 78 2. 返回 tag为article下之下所有tag为algorithm的元素,注意格式必须为 父节点/一代子节点,而不能为父节点/二代子节点,比如article/interval 就会找不到 79 findall(article/algorithm) 80 81 ''' 82 ''' 83 1. find 输出: 84 algorithm 85 {} 86 ''' 87 for elem in root.find("article"): 88 print(elem.tag,elem.text,elem.attrib) 89 90 ''' 91 2. findall 和 iterfind 输出: 92 article 93 {'name': 'My article'} 94 article 95 {'name': 'Your article'} 96 ''' 97 for elem in root.findall("article"): 98 print(elem.tag,elem.text,elem.attrib) 99 100 for elem in root.findall("article"):101 print(elem.tag,elem.text,elem.attrib)102 103 104 #生成和更改xml 文件105 106 '''107 ElementTree对象的write方法可以往xml写入内容108 '''109 #为根节点的第一个子元素增加属性 color=red110 print(root[0].tag,root[0].attrib) #name {'Title': 'xml example'}111 root[0].set("color","red")112 print(root[0].tag,root[0].attrib) #name {'Title': 'xml example', 'color': 'red'}113 114 #删掉根节点的其中一个子元素115 i=0116 for item in root:117 print(i,item.tag)118 i=i+1119 del root[4] #删掉最后一个子元素 foot120 i=0121 for item in root:122 print(i,item.tag)123 i=i+1124 125 #将修改后的文件写入到一个新的文件 test3.xml,新文档的元素属性顺序与原文档不同。这是因为ET是以字典的形式保存属性的,而字典是一个无序的数据结构。同时 XML也不关注属性的顺序,故乱序的影响不大126 tree.write(os.path.join(os.path.dirname(__file__),"test3.xml"))127 128 #构建一个新的xml文件129 #生成根元素130 root=ET.Element("root")131 #生成子元素 A132 a=ET.Element("A")133 #增加元素A的子元素 child1134 a_child=ET.SubElement(a,"child1")135 a_child.text="I'm child of A"136 #增加元素A的子元素 child2137 a_child1=ET.SubElement(a,"child2")138 #生成子元素B139 b=ET.Element("B")140 #增加元素B的子元素child1141 b_child=ET.SubElement(b,"child1")142 b_child.text="I'm child of B"143 b_child.set("name","book") #set() 接收的是 key,value 形式144 145 #将a和b 组成一个元组传入extend()方法中,元素 A和B作为根元素的子元素146 root.extend((a,b))147 trees=ET.ElementTree(root)148 #将trees 写入到文件 test4.xml, 内容为 <root><A><child1>I'm child of A</child1><child2 /></A><B><child1 name="book">I'm child of B</child1></B></root>149 trees.write(os.path.join(os.path.dirname(__file__),"test4.xml"))

 

总结

以上是内存溢出为你收集整理的Python中xml.etree.ElementTree读写xml文件实例全部内容,希望文章能够帮你解决Python中xml.etree.ElementTree读写xml文件实例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1184846.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存