python 内置模块 xml 模块随笔

XML,可扩展标记语言,用来传输和存储数据。

XML代码格式如下 开头和结尾一样的为自闭和标签 就像开头的<data>和结尾也有一个<data> 内容有=号的为有属性
<country name="Liechtenstein">属性就是“Liechtenstein”,<gdppc>14100</gdppc>就是没有属性只有文本
下面是一段xml代码:

<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year updated="yes">2010</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year updated="yes">2013</year>
        <gdppc>59900</gdppc>
        <neighbor direction="N" name="Malaysia" />
    </country>
    <country name="Panama">
        <rank updated="yes">69</rank>
        <year updated="yes">2013</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
    </country>
</data>

xml中节点Element类的函数

tag                   当前节点标签名
attrib                当前节点属性
text                  当前节点内容
append                添加一个子节点
clear                 清空节点
extend                为当前节点添加 n 个子节点
find                  获取第一个寻找到的子节点
findall               获取所有的子节点
findtext              获取第一个寻找到的子节点的内容
get                   获取当前节点的属性
insert                在当前节点创建子节点,然后插入指定位置
items                 获取当前节点的所有属性,和字典中的items一样,内容都是健值对
iter                  在根据节点名称寻找所有指定的节点,并返回一个迭代器
iterfind              获取所有指定的节点,并放在一个迭代器中
itertext              在子孙中根据节点名称寻找所有指定的节点的内容,并返回一个迭代器
keys                  获取当前节点的所有属性的 key
makeelement           创建一个新节点
remove                删除某个节点
set                   设置当前节点属性

具体各步操作如下

 1 import xml.etree.ElementTree as ET
 2 #导入Python  xml模块
 3 
 4 
 5 tree = ET.parse("xml_lesson")
#打开xml模块
6 root = tree.getroot()#获取当前文件的根节点 7 print(root.tag)#打印根节点的名称 8 9 #历遍xml文档注释的为打印根节点的名称和属性 10 for i in root: 11 12 #print(i.tag) 13 #print(i.attrib) 14 for j in i: 15 #print(j.tag) 16 #print(j.attrib) 17 print(j.text) 18 19 20 21 22 # 遍历xml文档 23 for child in root: 24 print(child.tag, child.attrib) 25 for i in child: 26 print(i.tag, i.text) 27 28 #只遍历year 节点 29 for node in root.iter('year'):#只遍历某一个节点.iter方法 30 print(node.tag, node.text) 31 # --------------------------------------- 32 33 import xml.etree.ElementTree as ET 34 35 tree = ET.parse("xml_lesson") 36 root = tree.getroot() 37 38 #修改 39 for node in root.iter('year'):#修改某一个标签内容先用.itre取到该标签 40 new_year = int(node.text) + 1#int方法为标签后加一 41 node.text = str(new_year)#str直接赋值 42 node.set("updated", "yes")#传属性一样 43 44 tree.write("xml_lesson")#修改完保存 45 46 #删除node 47 for country in root.findall('country'): 48 rank = int(country.find('rank').text) 49 if rank > 50: 50 root.remove(country) 51 52 tree.write('output.xml')

创建xml文件

import xml.etree.ElementTree as ET

new_xml = ET.Element("namelist")

name = ET.SubElement(new_xml, "name", attrib={"enrolled": "yes"})
age = ET.SubElement(name, "age", attrib={"checked": "no"})
sex = ET.SubElement(name, "sex")
sex.text = '33'
name2 = ET.SubElement(new_xml, "name", attrib={"enrolled": "no"})
age = ET.SubElement(name2, "age")
age.text = '19'



et = ET.ElementTree(new_xml)  # 生成文档对象
et.write("test.xml", encoding="utf-8", xml_declaration=True)
 from xml.etree import ElementTree as ET
 2 #创建根节点
 3 root=ET.Element("home",{"name":"root"})
 4 
 5 #创建子节点,也可以用下面的方式创建,但只是创建,还没有加到任何节点下面
 6 #sub=root.makeelement("son",{"sonName":"haha"}),下面同样可以
 7 sub=ET.Element("son",{"sonName":"haha"})
 8 
 9 subsub=ET.Element("subson",{"subsonName":"xixi"})
10 
11 root.append(sub)
12 
13 sub.append(subsub)
14 tree=ET.ElementTree(root)
15 tree.write("createXml.xml")
16 
17 ###########结果(实际上是没有缩进的)############
18 <home name="root">
19     <son sonName="haha">
20         <subson subsonName="xixi" />
21     </son>
22 </home>

 

posted @ 2018-11-07 10:22  网瘾何必称梦想  阅读(93)  评论(0)    收藏  举报