python xml解析和生成

2022-07-02 20:39:09 字數 3594 閱讀 4421

解析使用xml.etree.elementtree 模組,生成使用xml.dom.minidom模組,  elementtree比dom快,dom生成簡單且會自動格式化。

<?

xml version='1.0' encoding='utf-8'

?>

<

baspools

>

<

bas>

<

basprovider

>0

basprovider

>

<

portal_version

>1

portal_version

>

<

timeout

>111

timeout

>

<

retry

>111

retry

>

<

auth_type

>111

auth_type

>

bas>

<

bas>

<

basprovider

>0

basprovider

>

<

portal_version

>1

portal_version

>

<

timeout

>5000

timeout

>

<

retry

>3

retry

>

<

auth_type

>0

auth_type

>

bas>

baspools

>

解析為dict:

, 1: }

將上述字典再還原xml

執行**:

#

coding = 'utf-8'

import

time

import

xml.etree.elementtree as et

import

xml.dom.minidom as minidom

start = time.clock() #

記錄處理開始時間;與最後一行一起使用,來判斷輸出執行時間。

defread_xml(in_path):

"""讀取並解析xml檔案

in_path: xml路徑

return: tree

"""tree =et.parse(in_path)

return

tree

defcreat_dict(root):

"""xml生成為dict:,

將tree中個節點新增到list中,將list轉換為字典dict_init

疊加生成多層字典dict_new

"""dict_new ={}

for key, valu in

enumerate(root):

dict_init ={}

list_init =

for item in

valu:

for lists in

list_init:

dict_init[lists[0]] = lists[1]

dict_new[key] =dict_init

return

dict_new

defdict_to_xml(input_dict, root_tag, node_tag):

"""定義根節點root_tag,定義第二層節點node_tag

第三層中將字典中鍵值對對應引數名和值

return: xml的tree結構

"""root_name =et.element(root_tag)

for (k, v) in

input_dict.items():

node_name =et.subelement(root_name, node_tag)

for key, val in

v.items():

key =et.subelement(node_name, key)

key.text =val

return

root_name

defout_xml(root):

"""格式化root轉換為xml檔案

"""rough_string = et.tostring(root, '

utf-8')

reared_content =minidom.parsestring(rough_string)

with open(out_file, 'w+

') as fs:

reared_content.writexml(fs, addindent="

", newl="

\n", encoding="

utf-8")

return

true

if__name__ == '

__main__':

in_files = r"

d:\baspool_read.xml

"out_file = r"

d:\baspool_out.xml

"tree =read_xml(in_files)

node_new = creat_dict(tree.getroot()) #

將xml轉換為dict

root = dict_to_xml(node_new, "

baspools

", "

bas") #

將dict轉換為xml

out_xml(root) #

輸出xml到out_files

end =time.clock()

print("

read: %f s

" % (end - start))

解決 字典無順序導致生成的xml檔案引數位置不固定,對dict_to_xml()函式進行修正:

def

dict_to_xml(input_dict,root_tag,node_tag):

"""定義根節點root_tag,定義第二層節點node_tag

第三層中將字典中鍵值對對應引數名和值

return: xml的tree結構

"""root_name =et.element(root_tag)

for (k, v) in

input_dict.items():

node_name =et.subelement(root_name, node_tag)

for (key, val) in sorted(v.items(), key=lambda e:e[0], reverse=true):

key =et.subelement(node_name, key)

key.text =val

return root_name

python xml解析例子

coding utf 8 created on thu apr 16 23 18 27 2015 author shifeng 功能 解析cdr sample.xml檔案,輸出格式為dnorm接收的格式,並將訓練集的 label 寫入到文件中 xml檔案 見csdn資源共享 import codec...

PythonXML檔案解析

sax是一種基於事件驅動的api。利用sax解析xml文件牽涉到兩個部分 解析器和事件處理器。解析器負責讀取xml文件,並向事件處理器傳送事件,如元素開始跟元素結束事件 而事件處理器則負責對事件作出相應,對傳遞的xml資料進行處理。適於處理下面的問題 在python中使用sax方式處理xml要先引入...

python xml生成 python 生成xml

用到這個模組的時候,感覺網上大部分資料比較繁瑣,所以自己寫了個簡單的def 其實最主要掌握以下幾個函式 1.doc xml.dom.minidom.document 生成xml的dom樹物件 2.root doc.createelement root 建立樹節點,可以使根節點或者是子節點 3.chi...