Maison >développement back-end >Tutoriel XML/RSS >Python analyse XML[xml.dom]

Python analyse XML[xml.dom]

黄舟
黄舟original
2017-02-25 14:21:021777parcourir

Exigences

Il existe une table avec une quantité de données relativement importante, qui est mise à jour quotidiennement. Ses champs peuvent être configurés via le fichier de configuration XML, c'est-à-dire que les champs peuvent être différents à chaque fois. le tableau est créé. Lors de l'exécution en amont, il sera extrait du fichier source selon la configuration. Lors de l'étape d'entreposage, la table doit être construite en fonction de la configuration.

Solution

Écrivez un XML simple pour configurer les champs et les types requis pour lire les données correspondantes en amont et les stocker dans la base de données. Supprimez d'abord la table d'origine et créez une nouvelle table selon la. configuration

Fichier XML

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

Script de traitement

#!/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])

Méthode impliquée

root = minidom.parse(xml_file_path) Obtenir l'objet dom

root.getElementsByTagName("table") Récupère la liste des nœuds en fonction de la balise

table.getAttribute("name") Récupère l'attribut

primary_key.getElementsByTagName("name") [0].childNodes[0 ].nodeValue Obtenez la valeur du nœud enfant (l'identifiant obtient l'identifiant)

Ce qui précède est le contenu de l'analyse Python xml[xml.dom]. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php). .cn) !


Déclaration:
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