使用PYTHON創(chuàng)建XML文檔
import xml.dom.minidom
from xml.dom.DOMImplementation import implementation
import xml.sax.writer
import xml.utils
# Create a new document with no namespace uri, qualified name,
# or document type
document = implementation.createDocument(None,None,None)
personnel = document.createElement("personnel")
personnel.setAttribute('number', '5')
document.appendChild(personnel)
sexnode = document.createElement("sex")
sexnode.appendChild(document.createTextNode("male"))
namenode = document.createElement("name")
namenode.appendChild(document.createTextNode("tianbin"))
personnel.appendChild(sexnode)
personnel.appendChild(namenode)
out = open("tianbin.xml", "w")
xml.dom.ext.PrettyPrint(document,out)
今天想使用python來(lái)創(chuàng)建一個(gè)xml文件。找了下資料,發(fā)現(xiàn)資料不是很多,基本上都是使用python來(lái)解析xml文件的。
比如我要將內(nèi)容為
<?xml version="1.0" encoding="utf-8"?>
<root>
<book isbn="34909023">
<author>
dikatour
</author>
</book>
</root>
寫入到xmlstuff.xml文件中去。
其實(shí)也很簡(jiǎn)單,基本原理如下:
我使用xml的DOM方式,先在內(nèi)存中創(chuàng)建一個(gè)空的DOM樹(shù),然后不斷增加我要的節(jié)點(diǎn),最后形成我想要的DOM,最后輸出到文件中去。
1.我使用xml.dom.minidom這個(gè)module來(lái)創(chuàng)建xml文件
from xml.dom import minidom
2. 每個(gè)xml文件都是一個(gè)Document對(duì)象,代表著內(nèi)存中的DOM樹(shù)
doc = minidom.Document()
3.有了空的DOM樹(shù)后,我們?cè)谏厦嫣砑痈?jié)點(diǎn)
rootNode = doc.createElement("root")
doc.appendChild(rootNode) #注意python的library reference里說(shuō),createElement后并沒(méi)有將節(jié)點(diǎn)對(duì)象加到DOM樹(shù)上,需要自己手工加上
4.創(chuàng)建其它的節(jié)點(diǎn)
5.輸出到xml文件中去
doc.writexml(f, "/t", "/t", "/n", "utf-8") #第一個(gè)參數(shù)f就是你的目標(biāo)文件對(duì)象,第二個(gè)參數(shù)好像是<?xml>和下面一個(gè)根節(jié)點(diǎn)的縮進(jìn)排列格式,
第三個(gè)參數(shù)好像是其他節(jié)點(diǎn)與子節(jié)點(diǎn)的縮進(jìn)排列格式,第四個(gè)參數(shù)制定了換行的格式(如果你填入" ",那就不換行了,所有的xml都縮在了一行上面 :) )
,第五個(gè)參數(shù)制定了xml內(nèi)容的編碼。除了第一個(gè)參數(shù)是必須的,其他參數(shù)都是可選擇的。
最終代碼如下(這個(gè)程序沒(méi)什么價(jià)值,只是用來(lái)測(cè)試驗(yàn)證自己的想法,你更可能定義一個(gè)簡(jiǎn)單類或函數(shù),將你的數(shù)據(jù)結(jié)構(gòu)序列化到xml文件中):
from xml.dom import minidom
import traceback
try:
f = open("xmlstuff.xml", "w")
try:
doc = minidom.Document()
rootNode = doc.createElement("root")
doc.appendChild(rootNode)
bookNode = doc.createElement("book")
bookNode.setAttribute("isbn", "34909023")
rootNode.appendChild(bookNode)
authorNode = doc.createElement("author")
bookNode.appendChild(authorNode)
authorTextNode = doc.createTextNode("dikatour")
authorNode.appendChild(authorTextNode)
doc.writexml(f, "/t", "/t", "/n", "utf-8")
except:
trackback.print_exc()
finally:
f.close()
except IOException:
print "open file failed"
總結(jié):
1. 目標(biāo)(將一串xml字符串寫到文件中)=>得到一串xml字符串=>dom樹(shù)(minidom中有toxml方法將DOM樹(shù)的xml信息輸出成字符串)
2. 使用python 2.5 documentation(也就是安裝python時(shí)一起安裝的python手冊(cè))中的library reference中的第8章(structrued Markup Processing Tools),查閱手冊(cè)很重要,另外查閱一些簡(jiǎn)明的python書(shū)籍
3.多思考,邏輯清晰了,即時(shí)象我一樣對(duì)如何使用python操縱xml一無(wú)所知,稍微查下資料也就可以完成功能了
4. 恰好證明了python這門語(yǔ)言的強(qiáng)大的功能性 :) gets job done..
相關(guān)文章
python操作Excel神器openpyxl看這一篇就夠了
Python使用openpyxl讀寫excel文件這是一個(gè)第三方庫(kù),可以處理xlsx格式的Excel文件,下面這篇文章主要給大家介紹了關(guān)于python操作Excel神器openpyxl的相關(guān)資料,需要的朋友可以參考下2023-04-04分享7個(gè) Python 實(shí)戰(zhàn)項(xiàng)目練習(xí)
這篇文章主要介紹了分享7個(gè) Python 實(shí)戰(zhàn)項(xiàng)目代碼,經(jīng)過(guò)Python3.6.4調(diào)試通過(guò)的代碼,就具一點(diǎn)的參考價(jià)值,需要的小伙伴可以參考一下2022-03-03Python Pygame實(shí)戰(zhàn)之塔防游戲的實(shí)現(xiàn)
這篇文章主要介紹了如何利用Python中的Pygame模塊制作簡(jiǎn)單的塔防小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動(dòng)手試一試2022-03-03機(jī)器學(xué)習(xí)Erdos?Renyi隨機(jī)圖生成方法及特性
這篇文章主要為大家介紹了機(jī)器學(xué)習(xí)Erdos?Renyi隨機(jī)圖生成方法及特性詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05python實(shí)現(xiàn)Excel多行多列的轉(zhuǎn)換的示例
本文主要介紹了python實(shí)現(xiàn)Excel多行多列的轉(zhuǎn)換的示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03python3 requests庫(kù)實(shí)現(xiàn)多圖片爬取教程
今天小編就為大家分享一篇python3 requests庫(kù)實(shí)現(xiàn)多圖片爬取教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12python matplotlib坐標(biāo)軸設(shè)置的方法
本篇文章主要介紹了python matplotlib坐標(biāo)軸設(shè)置的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12python實(shí)現(xiàn)切割url得到域名、協(xié)議、主機(jī)名等各個(gè)字段的例子
今天小編就為大家分享一篇python實(shí)現(xiàn)切割url得到域名、協(xié)議、主機(jī)名等各個(gè)字段的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07