搜尋
首頁後端開發Python教學Python中使用dom模块生成XML文件示例

在Python中解析XML文件也有Dom和Sax两种方式,这里先介绍如何是使用Dom解析XML,这一篇文章是Dom生成XML文件,下一篇文章再继续介绍Dom解析XML文件。

在生成XML文件中,我们主要使用下面的方法来完成。

主要方法

1、生成XML节点(node)

代码如下:


createElement("node_name")


2、给节点添加属性值(Attribute)

代码如下:


node.setAttribute("att_name", "arr_value")


3、节点的标签值(data)

代码如下:


createTextNode("node_value")


其中第1、3点在创建完节点(节点值)之后,还需使用下面的方法添加到指点的节点的位置下面:

代码如下:


prev_node.appendChild(cur_node)


这里的prev_node要添加节点的上一层节点,而cur_node即为当前要添加的节点了。

代码演示

下面用代码来演示下如何使用Dom来生成XML,这个是简单版本,如下:

代码如下:


'''
Created on 2012-8-28 
 
@author:  walfred
@module: domxml.genXML 
@description:
''' 
import xml.dom.minidom as Dom 
 
if __name__ == "__main__": 
    doc = Dom.Document() 
    root_node = doc.createElement("book_store") 
    root_node.setAttribute("name", "newhua") 
    root_node.setAttribute("website", "http://www.bitsCN.com") 
    doc.appendChild(root_node) 
 
    book_node = doc.createElement("book1") 
 
    book_name_node = doc.createElement("name") 
    book_name_value = doc.createTextNode("hamlet") 
    book_name_node.appendChild(book_name_value) 
    book_node.appendChild(book_name_node) 
 
    book_author_node = doc.createElement("author") 
    book_author_value = doc.createTextNode("William Shakespeare") 
    book_author_node.appendChild(book_author_value) 
    book_node.appendChild(book_author_node) 
 
    root_node.appendChild(book_node) 
 
    f = open("book_store.xml", "w") 
    f.write(doc.toprettyxml(indent = "\t", newl = "\n", encoding = "utf-8")) 
    f.close()

这个代码将在当前目录下生成一个book_store.xml文件,我把它也贴在下面:

代码如下:


 
 
     
        hamlet 
        William Shakespeare 
   
 

当然一旦你掌握了这些基本方法之后,我们可以用一个类来更好的完成,这个类我们称之为XMLGenerator,代码如下:

代码如下:


'''
Created on 2012-8-28 
 
@author:  walfred
@module: domxml.wXMLbyDom 
@description:
''' 
import xml.dom.minidom as Dom 
 
class XMLGenerator: 
    def __init__(self, xml_name): 
        self.doc = Dom.Document() 
        self.xml_name = xml_name 
 
    def createNode(self, node_name): 
        return self.doc.createElement(node_name) 
 
    def addNode(self, node, prev_node = None): 
        cur_node = node 
        if prev_node is not None: 
            prev_node.appendChild(cur_node) 
        else: 
            self.doc.appendChild(cur_node) 
        return cur_node 
 
    def setNodeAttr(self, node, att_name, value): 
        cur_node = node 
        cur_node.setAttribute(att_name, value) 
 
    def setNodeValue(self, cur_node, value): 
        node_data = self.doc.createTextNode(value) 
        cur_node.appendChild(node_data) 
 
    def genXml(self): 
        f = open(self.xml_name, "w") 
        f.write(self.doc.toprettyxml(indent = "\t", newl = "\n", encoding = "utf-8")) 
        f.close() 
 
if __name__ == "__main__": 
    myXMLGenerator = XMLGenerator("book_store.xml") 
 
    #xml root node 
    node_book_store = myXMLGenerator.createNode("book_store") 
    myXMLGenerator.setNodeAttr(node_book_store, "name", "new hua") 
    myXMLGenerator.setNodeAttr(node_book_store, "website", "http://www.bitsCN.com") 
    myXMLGenerator.addNode(node = node_book_store) 
 
    #book01 
    node_book_01 = myXMLGenerator.createNode("book") 
 
    node_book_01_name = myXMLGenerator.createNode("name") 
    myXMLGenerator.setNodeValue(node_book_01_name, "Hamlet") 
    myXMLGenerator.addNode(node_book_01_name, node_book_01) 
 
    node_book_01_author = myXMLGenerator.createNode("author") 
    myXMLGenerator.setNodeValue(node_book_01_author, "William Shakespeare") 
    myXMLGenerator.addNode(node_book_01_author, node_book_01) 
 
    node_book_01_price = myXMLGenerator.createNode("price") 
    myXMLGenerator.setNodeValue(node_book_01_price, "$20") 
    myXMLGenerator.addNode(node_book_01_price, node_book_01) 
 
    node_book_01_grade = myXMLGenerator.createNode("grade") 
    myXMLGenerator.setNodeValue(node_book_01_grade, "good") 
    myXMLGenerator.addNode(node_book_01_grade, node_book_01) 
 
    myXMLGenerator.addNode(node_book_01, node_book_store) 
 
    #book 02 
    node_book_02 = myXMLGenerator.createNode("book") 
 
    node_book_02_name = myXMLGenerator.createNode("name") 
    myXMLGenerator.setNodeValue(node_book_02_name, "shuihu") 
    myXMLGenerator.addNode(node_book_02_name, node_book_02) 
 
    node_book_02_author = myXMLGenerator.createNode("author") 
    myXMLGenerator.setNodeValue(node_book_02_author, "naian shi") 
    myXMLGenerator.addNode(node_book_02_author, node_book_02) 
 
    node_book_02_price = myXMLGenerator.createNode("price") 
    myXMLGenerator.setNodeValue(node_book_02_price, "$200") 
    myXMLGenerator.addNode(node_book_02_price, node_book_02) 
 
    node_book_02_grade = myXMLGenerator.createNode("grade") 
    myXMLGenerator.setNodeValue(node_book_02_grade, "good") 
    myXMLGenerator.addNode(node_book_02_grade, node_book_02) 
 
    myXMLGenerator.addNode(node_book_02, node_book_store) 
 
    #gen 
    myXMLGenerator.genXml()

同样这个方法会在本目录下生成一个book_store.xml文件,如下:

代码如下:


 
 
     
        Hamlet 
        William Shakespeare 
        $20 
        good 
   
 
     
        shuihu 
        naian shi 
        $200 
        good 
   
 


这个版本算一个稍微高级的版本,但由于时间有限还很显得粗糙,读者可以发挥出更好的。
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
Python:深入研究彙編和解釋Python:深入研究彙編和解釋May 12, 2025 am 12:14 AM

pythonisehybridmodeLofCompilation和interpretation:1)thepythoninterpretercompilesourcecececodeintoplatform- interpententbybytecode.2)thepythonvirtualmachine(pvm)thenexecutecutestestestestestesthisbytecode,ballancingEaseofuseEfuseWithPerformance。

Python是一種解釋或編譯語言,為什麼重要?Python是一種解釋或編譯語言,為什麼重要?May 12, 2025 am 12:09 AM

pythonisbothinterpretedAndCompiled.1)它的compiledTobyTecodeForportabilityAcrosplatforms.2)bytecodeisthenInterpreted,允許fordingfordforderynamictynamictymictymictymictyandrapiddefupment,儘管Ititmaybeslowerthananeflowerthanancompiledcompiledlanguages。

對於python中的循環時循環與循環:解釋了關鍵差異對於python中的循環時循環與循環:解釋了關鍵差異May 12, 2025 am 12:08 AM

在您的知識之際,而foroopsareideal insinAdvance中,而WhileLoopSareBetterForsituations則youneedtoloopuntilaconditionismet

循環時:實用指南循環時:實用指南May 12, 2025 am 12:07 AM

ForboopSareSusedwhenthentheneMberofiterationsiskNownInAdvance,而WhileLoopSareSareDestrationsDepportonAcondition.1)ForloopSareIdealForiteratingOverSequencesLikelistSorarrays.2)whileLeleLooleSuitableApeableableableableableableforscenarioscenarioswhereTheLeTheLeTheLeTeLoopContinusunuesuntilaspecificiccificcificCondond

Python:它是真正的解釋嗎?揭穿神話Python:它是真正的解釋嗎?揭穿神話May 12, 2025 am 12:05 AM

pythonisnotpuroly interpred; itosisehybridablectofbytecodecompilationandruntimeinterpretation.1)PythonCompiLessourceceCeceDintobyTecode,whitsthenexecececected bytybytybythepythepythepythonvirtirtualmachine(pvm).2)

與同一元素的Python串聯列表與同一元素的Python串聯列表May 11, 2025 am 12:08 AM

concatenateListSinpythonWithTheSamelements,使用:1)operatoTotakeEpduplicates,2)asettoremavelemavphicates,or3)listcompreanspherensionforcontroloverduplicates,每個methodhasdhasdifferentperferentperferentperforentperforentperforentperfornceandordorimplications。

解釋與編譯語言:Python的位置解釋與編譯語言:Python的位置May 11, 2025 am 12:07 AM

pythonisanterpretedlanguage,offeringosofuseandflexibilitybutfacingperformancelanceLimitationsInCricapplications.1)drightingedlanguageslikeLikeLikeLikeLikeLikeLikeLikeThonexecuteline-by-line,允許ImmediaMediaMediaMediaMediaMediateFeedBackAndBackAndRapidPrototypiD.2)compiledLanguagesLanguagesLagagesLikagesLikec/c thresst

循環時:您什麼時候在Python中使用?循環時:您什麼時候在Python中使用?May 11, 2025 am 12:05 AM

Useforloopswhenthenumberofiterationsisknowninadvance,andwhileloopswheniterationsdependonacondition.1)Forloopsareidealforsequenceslikelistsorranges.2)Whileloopssuitscenarioswheretheloopcontinuesuntilaspecificconditionismet,usefulforuserinputsoralgorit

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具