博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python解析XML笔记(etree)
阅读量:7008 次
发布时间:2019-06-28

本文共 5442 字,大约阅读时间需要 18 分钟。

近期梳理Weblogic数据源,数据源较多,但是每一个数据源在weblogic中是xml方式存在,所以想到批量解析xml,把数据放到数据库后来解决。

需要的数据源信息:

WEBLOGIC_HOST

JDBC_NAME
JNDI_NAME
DB_ALIAS
DB_NAME
DB_HOST
INST_PORT
DB_USER
TARGET
URL
DRIVER_TYPE
CAPACITY

数据源xml格式:

jdjd
jdbc:db2://10.10.112.166:50000/MYDB
com.ibm.db2.jcc.DB2Driver
user
myuser
driverType
4
databaseName
MYDB
{AES}sdfhjhsafhj=
SQL SELECT COUNT(*) FROM SYSIBM.SYSTABLES
jdjd
OnePhaseCommit

解析xml,取所需信息放入mysql数据库:

#!/usr/local/bin/python2.7# encoding: utf-8import xml.etree.ElementTree as ETimport mysql.connector as cnnimport oscnx = cnn.connect(host='192.168.2.180',user='root',password='123456',database='jdbc')file_list = os.listdir('C:\Users\Administrator\Desktop\jdbc')for jdbc_file in file_list:    file_abs = os.path.join('C:\Users\Administrator\Desktop\jdbc',jdbc_file)    print "开始处理:",file_abs    tree = ET.parse(file_abs)    #根节点jdbc-data-source    root = tree.getroot()    #name 查找元素    jdbc_name_tag = root.find('name')    jdbc_name = jdbc_name_tag.text    #print jdbc_name_tag.tag,jdbc_name    #jdbc-data-source-params    jdbc_data_source = root.find('jdbc-data-source-params')    jndi_name_tag = jdbc_data_source.find('jndi-name')    jndi_name = jndi_name_tag.text    #print jndi_name_tag.tag,jndi_name    #jdbc-driver-params    jdbc_driver_tag = root.find('jdbc-driver-params')        #db,user    property_tag = jdbc_driver_tag.find('properties').findall('property')    i = 1    for property in property_tag:        if property.find('name').text == 'user':            dbuser = property.find('value').text        elif property.find('name').text == 'databaseName':            dbname = property.find('value').text        elif property.find('name').text == 'driverType':            dbtype = int(property.find('value').text)    #print property.find('name').text,property.find('value').text    #url    url_tag = jdbc_driver_tag.find('url')    url = url_tag.text    #print url_tag.tag,url        #max-capacity    max_capacity_tag = root.find('jdbc-connection-pool-params').find('max-capacity')    try:        max_capacity = max_capacity_tag.text        #print max_capacity_tag.tag,max_capacity    except AttributeError:        print "NO tag max_capacity"        max_capacity = ''        #cnx = cnn.connect(host='10.10.112.168',user='root',password='123456',database='jdbc')    cursor = cnx.cursor()    state = ("insert into weblogic_jdbc_999 (WEBLOGIC_HOST,JDBC_NAME,JNDI_NAME,DB_ALIAS,DB_USER,URL,CAPACITY) values (%s,%s,%s,%s,%s,%s,%s)")    jdbc_data = ('10.10.112.168',jdbc_name,jndi_name,dbname,dbuser,url,max_capacity)    cursor.execute(state,jdbc_data)    cursor.close()cnx.commit()cnx.close()

数据源所属weblogic服务器实例在另外一个xml(config.xml)中,也需要解析,然后更新数据。

import xml.etree.ElementTree as ETimport mysql.connector as cnntree = ET.parse('/root/Python_shell/config68.xml')root = tree.getroot()list_node = root.findall('jdbc-system-resource')cnx = cnn.connect(host='127.0.0.1',user='root',password='123456',database='jdbc')cursor = cnx.cursor()state = ("update weblogic_jdbc_999 set TARGET=%s where JNDI_NAME=%s")for i in list_node:    jdbc_name = i.find('name').text    server_target = i.find('target').text    updata = (server_target,jdbc_name)    cursor.execute(state,updata)cursor.close()cnx.commit()cnx.close()

但是出现一个问题:db2连接,一种是直接url连接,一种java利用db2客户端编目后连接:

需要把db2 node和db编目导入数据库:

node取4个值,然后转一行,手动导入数据库:

db2 list node directory | awk NF | egrep -i "Node|Protocol|Hostname|Service" | awk '!/entry|Directory/ {print $NF}' | awk '{printf $0","} NR%4==0 {print "10.10.112.168"}'

WEBLOGIC_HOST

NODE_NAME
COMMENT
DIRECTORY
PROTOCOL
DB_HOST
INST_PORT

db取3个值,然后转一行,手动导入数据库:

db2 list db directory | awk NF | egrep -i 'alias|Database name|Node' | awk '{print $NF}' | awk '{printf $0","} NR%3==0 {print "10.10.112.168"}'

WEBLOGIC_HOST

DB_ALIAS
DB_NAME
NODE_NAME
这样一共三张表:可以按需筛选所需信息。

SELECT	a.WEBLOGIC_HOST,	a.JDBC_NAME,	a.JNDI_NAME,	a.DB_ALIAS,	db.DB_NAME,	nd.DB_HOST,	nd.INST_PORT,	a.DB_USER,	a.TARGET,	a.URL  FROM	weblogic_jdbc aLEFT JOIN db2_catalog_db db ON (	a.WEBLOGIC_HOST = db.WEBLOGIC_HOST	AND a.DB_ALIAS = db.DB_ALIAS)LEFT JOIN db2_catalog_node nd ON (	db.WEBLOGIC_HOST = nd.WEBLOGIC_HOST	AND db.NODE_NAME = nd.NODE_NAME)

 更新表信息:

UPDATE weblogic_jdbc, db2_catalog_dbSET weblogic_jdbc.DB_NAME = db2_catalog_db.DB_NAMEWHERE	weblogic_jdbc.WEBLOGIC_HOST = db2_catalog_db.WEBLOGIC_HOSTAND weblogic_jdbc.DB_ALIAS = db2_catalog_db.DB_ALIAS AND weblogic_jdbc.DB_NAME IS NULL;UPDATE weblogic_jdbc, db2_catalog_db, db2_catalog_nodeSET weblogic_jdbc.DB_HOST = db2_catalog_node.DB_HOST, weblogic_jdbc.INST_PORT = db2_catalog_node.INST_PORTWHERE	weblogic_jdbc.WEBLOGIC_HOST = db2_catalog_db.WEBLOGIC_HOSTAND weblogic_jdbc.DB_ALIAS = db2_catalog_db.DB_ALIASAND db2_catalog_db.NODE_NAME = db2_catalog_node.NODE_NAMEAND db2_catalog_db.WEBLOGIC_HOST = db2_catalog_node.WEBLOGIC_HOSTAND weblogic_jdbc.DB_HOST IS NULLAND weblogic_jdbc.INST_PORT IS NULL;

 

自己写完代码后感觉太烂,一行一行命令堆积起来的,哈哈,先解决问题再说。

转载地址:http://uvjtl.baihongyu.com/

你可能感兴趣的文章
前后端分离后的前端时代
查看>>
一名大学女生的来信
查看>>
任正非:对成功视而不见 成功才能始终伴随华为
查看>>
hibernate 分页
查看>>
springboot配置文件的所有属性
查看>>
华为checkstyle文件
查看>>
iphone开发教程
查看>>
Java编程思想学习录(连载之:内部类)
查看>>
mysql 密码忘记了
查看>>
一个不错的代码共享站
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
11.1绘制基本图形-面试例题2:绘制多个像素点和多条直线
查看>>
这个假期没有谁
查看>>
程序员百宝箱
查看>>
数据库服务器 之 PostgreSQL安装和简单使用
查看>>
Undefined symbols for architecture x86_64:
查看>>
ExtJS2.0实用简明教程 - Ext类库简介
查看>>
伪静态URLRewrite
查看>>
rhel7 设置计划任务cron
查看>>