Heim >Backend-Entwicklung >XML/RSS-Tutorial >Python analysiert xml[xml.dom]

Python analysiert xml[xml.dom]

黄舟
黄舟Original
2017-02-25 14:21:021774Durchsuche

Anforderungen

Es gibt eine Tabelle mit einer relativ großen Datenmenge, die jeden Tag aktualisiert wird. Ihre Felder können über die XML-Konfigurationsdatei konfiguriert werden, das heißt, die Felder können jedes Mal anders sein Tabelle wird erstellt. Bei der Upstream-Ausführung wird die Tabelle entsprechend der Konfiguration aus der Quelldatei extrahiert.

Lösung

Schreiben Sie eine einfache XML, um die Felder und Typen zu konfigurieren, die zum Lesen der entsprechenden Daten im Upstream erforderlich sind, und speichern Sie sie in der Datenbank. Löschen Sie zunächst die Originaltabelle und erstellen Sie eine neue Tabelle entsprechend Konfiguration

XML-Datei

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

Verarbeitungsskript

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

Beteiligte Methode

root = minidom.parse(xml_file_path) Get dom object

root.getElementsByTagName("table") Holen Sie sich die Knotenliste entsprechend dem Tag

table.getAttribute("name") Holen Sie sich das Attribut

primary_key.getElementsByTagName("name") [0].childNodes[0 ].nodeValue Holen Sie sich den Wert des untergeordneten Knotens (ID erhält ID)

Das Obige ist der Inhalt der Python-Analyse von xml[xml.dom]. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php). .cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn