Examples of using DOM modules to generate XML files in Python

Source: Internet
Author: User
parsing XML files in Python also has DOM and sax two ways, which first describes how to parse XML using the DOM, which is the DOM-generated XML file, and the next article continues to introduce the DOM parsing XML file.

In the build XML file, we use the following method mainly to complete.

Main methods

1. Generating XML nodes (node)

The code is as follows:


CreateElement ("Node_name")


2. Add attribute values to the node (Attribute)

The code is as follows:


Node.setattribute ("Att_name", "Arr_value")


3. Tag Value of the node (data)

The code is as follows:


createTextNode ("Node_value")


1th, 3 points after the node (node value) is created, you also need to use the following method to add to the location of the pointing node:

The code is as follows:


Prev_node.appendchild (Cur_node)


The prev_node here is to add the upper node of the node, and Cur_node is the node that is currently being added.

Code Demo

The following code shows how to use the DOM to generate XML, which is a simple version, as follows:

The code is as follows:


'''
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 ()

This code will generate a book_store.xml file in the current directory, and I'll paste it in the following:

The code is as follows:


<?xml version= "1.0" encoding= "Utf-8"?>


Hamlet
William Shakespeare


Of course, once you have mastered these basic methods, we can use a class to do better, this class we call Xmlgenerator, the code is as follows:

The code is as follows:


'''
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, "$ $")
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, "$")
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 ()

The same method will generate a Book_store.xml file in this directory, as follows:

The code is as follows:


<?xml version= "1.0" encoding= "Utf-8"?>


Hamlet
William Shakespeare
$
Good


Shuihu
Naian Shi
$
Good



This version is a slightly more advanced version, but because of the time constraints are very rough, readers can play a better.
  • Contact Us

    The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

    If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.