Maison développement back-end Tutoriel Python Python中使用dom模块生成XML文件示例

Python中使用dom模块生成XML文件示例

Jun 06, 2016 am 11:23 AM
python 生成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 
   
 


这个版本算一个稍微高级的版本,但由于时间有限还很显得粗糙,读者可以发挥出更好的。
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment télécharger Deepseek Xiaomi Comment télécharger Deepseek Xiaomi Feb 19, 2025 pm 05:27 PM

Comment télécharger Deepseek Xiaomi

Quels sont les avantages et les inconvénients des modèles ? Quels sont les avantages et les inconvénients des modèles ? May 08, 2024 pm 03:51 PM

Quels sont les avantages et les inconvénients des modèles ?

Google AI annonce Gemini 1.5 Pro et Gemma 2 pour les développeurs Google AI annonce Gemini 1.5 Pro et Gemma 2 pour les développeurs Jul 01, 2024 am 07:22 AM

Google AI annonce Gemini 1.5 Pro et Gemma 2 pour les développeurs

Pour seulement 250$, le directeur technique de Hugging Face vous apprend étape par étape comment peaufiner Llama 3 Pour seulement 250$, le directeur technique de Hugging Face vous apprend étape par étape comment peaufiner Llama 3 May 06, 2024 pm 03:52 PM

Pour seulement 250$, le directeur technique de Hugging Face vous apprend étape par étape comment peaufiner Llama 3

Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM May 06, 2024 pm 04:43 PM

Partagez plusieurs frameworks de projets open source .NET liés à l'IA et au LLM

Un guide complet sur le débogage et l'analyse des fonctions Golang Un guide complet sur le débogage et l'analyse des fonctions Golang May 06, 2024 pm 02:00 PM

Un guide complet sur le débogage et l'analyse des fonctions Golang

Comment lui demandez-vous Deepseek Comment lui demandez-vous Deepseek Feb 19, 2025 pm 04:42 PM

Comment lui demandez-vous Deepseek

Comment enregistrer la fonction d'évaluation Comment enregistrer la fonction d'évaluation May 07, 2024 am 01:09 AM

Comment enregistrer la fonction d'évaluation

See all articles