python解析xml文档实例
来源:互联网 发布:mac浏览器开发者模式 编辑:程序博客网 时间:2024/06/05 02:29
今天恰好用到,记录一下
使用python
用到的包:xml.dom.minidom
需求:
有一个表,里面数据量比较大,每天一更新,其字段可以通过配置文件进行配置,即,可能每次建表的字段不一样。
上游跑时会根据配置从源文件中提取,到入库这一步需要根据配置进行建表。
解决:
写了一个简单的xml,配置需要字段及类型
上游读取到对应的数据
入库这一步,先把原表删除,根据配置建新表
XML文件
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- 表名 ,数据库名 可灵活配置插入哪个库哪个表 -->
- <table name="top_query" db_name="evaluting_sys">
- <!-- 非业务主键,自增长,可配名,其他 INTEGER UNSIGNED AUTO_INCREMENT -->
- <primary_key>
- <name>id</name>
- </primary_key>
- <!-- 字段开始 -->
- <field>
- <name>query</name>
- <type>varchar(200)</type>
- <is_index>false</is_index>
- <description>query</description>
- </field>
- <field>
- <name>pv</name>
- <type>integer</type>
- <is_index>false</is_index>
- <description>pv</description>
- </field>
- <field>
- <name>avg_money</name>
- <type>integer</type>
- <is_index>false</is_index>
- <description></description>
- </field>
- <!-- 字段配置结束 -->
- </table>
脚本:
- #!/usr/bin/python
- # -*- coding:utf-8 -*-
- #author: ken
- #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(<span style="background-color: rgb(255, 255, 255); ">xml_file_path)</span>
- 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") 根据tag获取节点列表
table.getAttribute("name") 获取属性
primary_key.getElementsByTagName("name")[0].childNodes[0].nodeValue 获取子节点的值(<name>id</name> 得到id)
--------------------------------------------------------------------------
简单的读取就是这样,这里只是简单使用了下
后续需去了解下python读取xml的几个库
xml.dom.minidom
xml.etree.ElementTree
libxml2
lxml.etree
xpath 0 0
- python解析xml文档实例
- python解析xml文档实例
- python解析XML文档
- python解析XML文档
- python解析xml文档
- Python解析xml文档
- Python解析XML文档
- Python 解析 xml文档
- Python实例讲解 -- 解析xml
- 利用DOM解析XML文档实例
- 利用DOM解析XML文档实例
- Java---DOM解析XML文档详解实例
- Java对XML文档进行解析---实例
- python中如何解析xml文档
- XML(一) DOM解析XML文档实例一
- python解析xml文件实例分析
- DOM解析XML文档实例之学生管理系统
- 用"XML解析开发包Jaxp"XML文档进行SAX方式解析实例--封装XML为bean实例
- Python读取ini配置文件
- iOS ---UITabBarItem 选中图
- ZOJ-#3501 Roman Order(字符串模拟)
- Linux设备驱动中的阻塞与非阻塞I/O 及 等待队列的使用说明
- 用SeekBar做的Android颜色调色器
- python解析xml文档实例
- ANT使用说明
- hdu 2167 状态压缩dp
- 纯手工整理Redis详细教程,学不会都难!
- CSDN的第一篇博客,有点小激动。呵呵,准备在这里记录自己的JAVA历程。
- APIC Timer
- Quartz2D基础知识
- jaxb xml序列化与Java类的转化
- C++ 虚函数