ホームページ >バックエンド開発 >XML/RSS チュートリアル >Python は xml[xml.dom] を解析します

Python は xml[xml.dom] を解析します

黄舟
黄舟オリジナル
2017-02-25 14:21:021777ブラウズ

要件

毎日更新される比較的大量のデータを含むテーブルがあります。そのフィールドは XML 構成ファイルを通じて構成できます。つまり、テーブルが作成されるたびにフィールドが異なる場合があります。上流で実行する場合は、構成に従ってソース ファイルから抽出され、ウェアハウジングのステップで構成に従ってテーブルを構築する必要があります。

解決策

必要なフィールドとタイプを設定するための簡単な XML を作成しました。アップストリームは、まず元のテーブルを削除し、設定に従って新しいテーブルを作成します

XML ファイル

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

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])

関係するメソッド

root = minidom.parse(xml_file_path) domオブジェクトを取得

root.getElementsByTagName("table") タグに従ってノードリストを取得

table.getAttribute("name") 属性を取得

primary_key.getElementsByTagName(" name")[0].childNodes[0].nodeValue 子ノードの値を取得します(idはidを取得します)

上記はPythonのxml解析[xml.dom]の内容です。その他の関連内容については、PHP中国語Webサイト(www.php.cn)をご覧ください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。