python使用minidom處理xml還是比較麻煩的,網上很多資料都是斷斷續續的一部分,不成體統。這裡寫乙個demo,把常用xml解析操作:讀寫檔案、解析節點、新增節點、解析屬性、新增屬性、解析節點值和修改節點值等,都包含進來的。供各位讀者參考
demo實現的功能是從input.xml檔案中讀取xml並協議,將解析內容輸出,然後再將內容組裝成xml寫進output.xml檔案中。
input.txt檔案內容如下:
>
>
>
class1name
>
age=
'8'>
zhangsanstudent
>
age=
'8'>
lisistudent
>
class
>
>
>
class2name
>
age=
'8'>
wangwustudent
>
age=
'8'>
zhaoliustudent
>
class
>
school
>
**如下:
# coding=utf-8
# !/usr/bin/python3
import os
import xml.dom.minidom as minidom
import codecs
class
student
:def
__init__
(self)
: self.age =
0 self.name =
''def
__str__
(self)
:return
"[name:"
+ self.name +
",age:"
+str
(self.age)
+']'
class
class
:def
__init__
(self)
: self.students =
self.name =
''def
__str__
(self)
: result =
'[name:'
+ self.name +
',student:['
for student in self.students:
result +=
str(student)
+','
result +=
']]'
return result
defreadxml()
: xml_path =
"input.xml"
ifnot os.path.isfile(xml_path)
:return
dom = minidom.parse(xml_path)
school_node = dom.documentelement # 獲取到的根節點
class_nodes = school_node.getelementsbytagname(
'class'
) result =
for class_node in class_nodes:
temp_class = class(
) temp_class.name = class_node.getelementsbytagname(
"name")[
0].childnodes[0]
.data # 獲取name節點的值
student_nodes = class_node.getelementsbytagname(
'student'
)for student_node in student_nodes:
tmp_student = student(
) tmp_student.name = student_node.childnodes[0]
.data
tmp_student.age =
int(student_node.getattribute(
'age'))
# 獲取屬性值
return result
# 寫xml
defwritexml
(class_list)
: dom = minidom.document(
) school_node = dom.createelement(
"school"
)for tmp_class in class_list:
class_node = dom.createelement(
"class"
)# 建立class節點
class_name_node = dom.createelement(
"name"
)# 建立name節點
text_node = dom.createtextnode(
str(tmp_class.name)
)# 建立字元節點
# 將字元節點加到name節點
# 將name節點加到class節點
for student in tmp_class.students:
student_node = dom.createelement(
"student"
) student_node.setattribute(
'age'
,str
(student.age)
)# 設定age屬性
text_node = dom.createtextnode(
str(student.name)
)with codecs.
open
('output.xml'
,'wb'
,'utf-8'
)as f:
dom.writexml(f, newl=
'\n'
, encoding=
'utf-8'
)if __name__ ==
'__main__'
: class_list = readxml(
)for tmp_class in class_list:
print tmp_class
writexml(class_list)
生成的output.xml如下:
<?xml version="1.0" encoding="utf-8"?>
>
>
>
class1name
>
age=
"8">
zhangsanstudent
>
age=
"8">
lisistudent
>
class
>
>
>
class2name
>
age=
"8">
wangwustudent
>
age=
"8">
zhaoliustudent
>
class
>
school
>
python3使用 python3使用模組
python內建了很多非常有用的模組,只要安裝完畢,這些模組就可以立刻使用。我們以內建的sys模組為例,編寫乙個hello的模組 usr bin env python3 coding utf 8 a test module author michael liao import sys def tes...
python 元組使用 Python3
python3 元組 python 的元組與列表類似,不同之處在於元組的元素不能修改。元組使用小括號 列表使用方括號 元組建立很簡單,只需要在括號中新增元素,並使用逗號隔開即可。例項 python 3.0 tup1 google runoob 1997,2000 tup2 1,2,3,4,5 tup...
Python3 使用模組
python本身就內建了很多非常有用的模組,只要安裝完畢,這些模組就可以立刻使用。我們以內建的sys模組為例,編寫乙個hello的模組 usr bin env python3 coding utf 8 a test module author michael liao import sys def ...