Python3使用minidom讀寫xml檔案

2021-10-24 07:59:33 字數 3847 閱讀 3855

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 ...