1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<
diva_list
>
<
diva
name
=
"hamasaki ayumi"
>
<
state
flop
=
"yes"
>1</
state
>
<
year
>1978</
year
>
<
album_sales_volume
>27804358</
album_sales_volume
>
<
album
name
=
"A song for xx"
sn
=
"1st"
/>
<
album
name
=
"LOVEppears"
sn
=
"2nd"
/>
</
diva
>
<
diva
name
=
"koda kumi"
>
<
state
flop
=
"yes"
>2</
state
>
<
year
>1982</
year
>
<
album_sales_volume
>8273371</
album_sales_volume
>
<
album
name
=
"affection"
sn
=
"1st"
/>
<
album
name
=
"grow into one"
sn
=
"2nd"
/>
</
diva
>
</
diva_list
>
|
上面是一段xml文本的示例,如果要对xml文本进行处理,需要导入一个模块。
import xml.etree.ElementTree as ET
#由于xml模块的名字太长,使用as给它取了个别名,叫ET。
ET.parse() 从文件中直接读取xml文本,将xml文本解析成为xml树对象。
tree = ET.parse("diva.xml")
获取该xml树的根节点。
root = tree.getroot()
获取根节点的标签(名称)。
root.tag
#遍历xml文档
for child in root:
print(child.tag, child.attrib)
for i in child:
print(i.tag,i.text)
注意!如果想取xml文本下的子节点,必须通过根节点去取,任何节点后面加上.tag都可以取到节点中的标签名,任何节点加上.text都可以取到每个节点包含的内容,attrib 可以取到节点中标签中存在的属性。
#获取每个子节点的album_sales_volume标签中的文本内容。
for i in root.iter("album_sales_volume"):
print i.text
#如果是要获取标签内的属性,直接把text改成attrib即可。
修改:
for node in root.iter('year'):
new_year = int(node.text) + 1
node.text = str(new_year) #修改内容
node.set("flop","no") #修改标签属性。
tree.write("xmltest.xml")
删除:
for country in root.findall('country'):
rank = int(country.find('rank').text)
if rank > 50:
root.remove(country)
tree.write('output.xml')
root.findall() 用于从根节点开始查找,查找到指定名字的子节点。
root.remove()用于删除一个节点。
生成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)
ET.dump(new_xml) #打印生成的格式