python从mysql取数生成xml格式文件与解析xml文件

1.从mysql取数写入到xml文件

# coding=utf-8
import pymysql
import xml.dom.minidom
import sys,os
reload(sys)
sys.setdefaultencoding('utf8')
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.AL32UTF8'


def write_xml():
   #连接数据库获取数据
   sql_connet = pymysql.connect(
      host=host_mysql,
      user=user_mysql,
      password=password_mysql,
      port=port_mysql,
      database=database_mysql,
      charset='utf8',
   )
   # 获取操作游标
   cur = sql_connet.cursor()
   # 从v_hcmedata表中查询字段
   try:
      # 执行sql语句
      cur.execute(sql_mysql)
      # 获取查询的所有记录 二维tuple
      results = cur.fetchall()
      list = list(results)
      #   字段处理
      names = 'node_id node_name node_ipaddress res_id res_name  dd_name  mitem_id  mitem_name tablename'.split()
      # 二维tuple转换成列表嵌套字典
      managerList = [dict(zip(names, t)) for t in list]
   except Exception as e:
      raise e
   finally:
      sql_connet.close()  # 关闭连接
   # 数据转化成xml格式
   # 在内存中创建一个空的文档
   doc = xml.dom.minidom.Document()
   # 创建一个根节点Managers对象
   root = doc.createElement('Managers')
   # 设置根节点的属性
   root.setAttribute('company', '00')
   root.setAttribute('address', '00')
   # 将根节点添加到文档对象中
   doc.appendChild(root)
   for i in managerList:
      nodeManager = doc.createElement('Manager')

      node_id = doc.createElement('node_id')
      node_id.appendChild(doc.createTextNode(str(i['node_id'])))

      node_name = doc.createElement("node_name")
      node_name.appendChild(doc.createTextNode(str(i["node_name"])))

      node_ipaddress = doc.createElement("node_ipaddress")
      node_ipaddress.appendChild(doc.createTextNode(str(i["node_ipaddress"])))

      res_id = doc.createElement('res_id')
      res_id.appendChild(doc.createTextNode(str(i['res_id'])))

      res_name = doc.createElement("res_name")
      res_name.appendChild(doc.createTextNode(str(i["res_name"])))

      dd_name = doc.createElement("dd_name")
      dd_name.appendChild(doc.createTextNode(str(i["dd_name"])))

      mitem_id = doc.createElement('mitem_id')
      mitem_id.appendChild(doc.createTextNode(str(i['mitem_id'])))

      mitem_name = doc.createElement("mitem_name")
      mitem_name.appendChild(doc.createTextNode(str(i["mitem_name"])))

      tablename = doc.createElement("tablename")
      tablename.appendChild(doc.createTextNode(str(i["tablename"])))

      # 将各叶子节点添加到父节点Manager中,
      # 最后将Manager添加到根节点Managers中
      nodeManager.appendChild(node_id)
      nodeManager.appendChild(node_name)
      nodeManager.appendChild(node_ipaddress)
      nodeManager.appendChild(res_id)
      nodeManager.appendChild(res_name)
      nodeManager.appendChild(dd_name)
      nodeManager.appendChild(mitem_id)
      nodeManager.appendChild(mitem_name)
      nodeManager.appendChild(tablename)
      root.appendChild(nodeManager)
   # 开始写xml文档
   fp1 = open('./mysql.xml', 'w')
   doc.writexml(fp1, indent='\t', addindent='\t', newl='\n', encoding="utf-8")
   fp1.close()

生成文件的格式:

python从mysql取数生成xml格式文件与解析xml文件_第1张图片

2.读取、解析xml文件

# coding=utf-8
import xml.dom.minidom

# 使用minidom解析器打开 XML 文档
def get_data():
   DOMTree = xml.dom.minidom.parse("./mysql.xml")
   collection = DOMTree.documentElement
   # 在集合中获取所有Manager
   Managers = collection.getElementsByTagName("Manager")
   # 打印每个Manager的详细信息
   for manager in Managers:
       sourceID = manager.getElementsByTagName('res_id')[0]
       sourceID_get = "%s " % sourceID.childNodes[0].data
       sourceName = manager.getElementsByTagName('res_name')[0]
       sourceName_get = "%s" % sourceName.childNodes[0].data
       sourceIP = manager.getElementsByTagName('node_ipaddress')[0]
       sourceIP_get = "%s" % sourceIP.childNodes[0].data
       content = manager.getElementsByTagName('dd_name')[0]
       content_get = "%s" % content.childNodes[0].data
   data_xml = sourceID_get + sourceName_get + sourceIP_get+ content_get
   print(data_xml)

 

你可能感兴趣的:(Python,SQL,xml,mysql)