Home  >  Article  >  Backend Development  >  Python parses xml[xml.dom]

Python parses xml[xml.dom]

黄舟
黄舟Original
2017-02-25 14:21:021738browse

Requirements

There is a table with a large amount of data, which is updated every day. Its fields can be configured through the xml configuration file, that is, the fields may be different every time the table is created. When running upstream, it will be extracted from the source file according to the configuration. In the step of warehousing, the table needs to be built according to the configuration.

Solution

Write a simple xml, configure the required fields and types to read the corresponding data upstream and put it into the database. First delete the original table and create a new table according to the configuration

XML file

name="top_query" db_name="evaluting_sys">
id
query
varchar(200)
false
query
pv
integer
false
pv
avg_money
integer
false

Processing script

#!/usr/bin/python
# 
-*- coding:utf-8 -*-
#author: 
wklken
#desc: 
use to read db xml config.
#-----------------------
#2012-02-18 
created
#----------------------
import sys,os
from xml.dom import minidom, Node
def read_dbconfig_xml(xml_file_path):
content = {}
root = minidom.parse(xml_file_path)
table = root.getElementsByTagName("table")[0]
#read dbname and table name.
table_name = table.getAttribute("name")
db_name = table.getAttribute("db_name")
if len(table_name) > 0 and len(db_name) > 0:
db_sql = "create database if not exists `" + db_name +"`; use " + db_name + ";"
table_drop_sql = "drop " + table_name + " if exists " + table_name + ";"
content.update({"db_sql" : db_sql})
content.update({"table_sql" : table_drop_sql })
else:
print "Error:attribute is not define well! db_name=" + db_name + " ;table_name=" + table_name
sys.exit(1)
#print table_name, db_name
table_create_sql = "create table " + table_name +"("
#read primary cell
primary_key = table.getElementsByTagName("primary_key")[0]
primary_key_name = primary_key.getElementsByTagName("name")[0].childNodes[0].nodeValue
table_create_sql += primary_key_name + " INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,"
#print primary_key.toxml()
#read ordernary field
fields = table.getElementsByTagName("field")
f_index = 0
for field in fields:
f_index += 1
name = field.getElementsByTagName("name")[0].childNodes[0].nodeValue
type = field.getElementsByTagName("type")[0].childNodes[0].nodeValue
table_create_sql += name + " " + type
if f_index != len(fields):
table_create_sql += ","
is_index = field.getElementsByTagName("is_index")[0].childNodes[0].nodeValue
table_create_sql += ");"
content.update({"table_create_sql" : table_create_sql})
#character set latin1 collate latin1_danish_ci;
print content
if __name__ == "__main__":
read_dbconfig_xml(sys.argv[1])

Involved methods

root = minidom.parse(xml_file_path) Get the dom object

root.getElementsByTagName( "table") Get the node list based on tag

table.getAttribute("name") Get the attribute

primary_key.getElementsByTagName("name")[0].childNodes[0].nodeValue Get the value of the child node (id gets id)

The above is the content of Python parsing xml[xml.dom]. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn