DDR爱好者之家 Design By 杰米
前言
xml课的第三第四个作业都是用java编程来实现xml dom的一些转换, 因为自己没怎么学过java,因此和老师说了下想用python来实现第三第四个作业,下面就直接贴代码了
xml文档
<"1.0" encoding="UTF-8"?> <"text/xsl" href="1.xslt" rel="external nofollow" ?> <!DOCTYPE sys_info [ <!ELEMENT sys_info (info+)> <!ELEMENT info (sysDescr,sysUpTime,sysContact,sysName)> <!ELEMENT sysDescr (#PCDATA)> <!ELEMENT sysUpTime (#PCDATA)> <!ELEMENT sysContact (#PCDATA)> <!ELEMENT sysName (#PCDATA)> <!ATTLIST info ip CDATA #REQUIRED> ]> <sys_info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="1.xsd"> <info ip="192.168.1.1"> <sysDescr>X86-Windows2000</sysDescr> <sysUpTime>9 hours 42 minutes</sysUpTime> <sysContact>zhangsan</sysContact> <sysName>computerZhang</sysName> </info> <info ip="192.168.1.3"> <sysDescr>router</sysDescr> <sysUpTime>24 hours</sysUpTime> <sysContact>ruijie</sysContact> <sysName>Router2</sysName> </info> <info ip="192.168.2.1"> <sysDescr>router</sysDescr> <sysUpTime>89 hours</sysUpTime> <sysContact>Cisco</sysContact> <sysName>Router3</sysName> </info> </sys_info>
解析xml文档用的是python自带的xml库ElementTree, 读取mysql可以安装MySQLdb模块
apt-get install python-MySQLdb
程序运行如下
root@lj /h/s/x/3# python 21.py -h usage: 21.py [-h] status positional arguments: status 0clar,1read,2insert
读取xml保存到数据库
root@lj /h/s/x/3# python 21.py 2 插入语句: insert into info values ('192.168.1.1','X86-Windows2000','9 hours 42 minutes','zhangsan','computerZhang') 插入语句: insert into info values ('192.168.1.3','router','24 hours','ruijie','Router2') 插入语句: insert into info values ('192.168.2.1','router','89 hours','Cisco','Router3') insert success!!!
读取数据库保存到xml文档
root@lj /h/s/x/3# python 21.py 1 +-------------+-----------------+--------------------+------------+---------------+ | IP地址 | sysDescr.0 | sysUpTime.0 | sysContact | sysName.0 | +-------------+-----------------+--------------------+------------+---------------+ | 192.168.1.1 | X86-Windows2000 | 9 hours 42 minutes | zhangsan | computerZhang | | 192.168.1.3 | router | 24 hours | ruijie | Router2 | | 192.168.2.1 | router | 89 hours | Cisco | Router3 | +-------------+-----------------+--------------------+------------+---------------+ write into sys.xml...
建立数据库的sql文件:
-- MySQL dump 10.16 Distrib 10.1.21-MariaDB, for debian-linux-gnu (x86_64) -- -- Host: localhost Database: localhost -- ------------------------------------------------------ -- Server version 10.1.21-MariaDB-5 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `info` -- DROP TABLE IF EXISTS `info`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `info` ( `ip` char(15) NOT NULL, `sysDescr` varchar(20) DEFAULT NULL, `sysUpTime` varchar(40) DEFAULT NULL, `sysContract` varchar(20) DEFAULT NULL, `sysName` varchar(20) DEFAULT NULL, PRIMARY KEY (`ip`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `info` -- LOCK TABLES `info` WRITE; /*!40000 ALTER TABLE `info` DISABLE KEYS */; INSERT INTO `info` VALUES ('192.168.1.1','X86-Windows2000','9 hours 42 minutes','zhangsan','computerZhang'),('192.168.1.3','router','24 hours','ruijie','Router2'),('192.168.2.1','router','89 hours','Cisco','Router3'); /*!40000 ALTER TABLE `info` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2017-03-23 15:36:31
下面是主要代码
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Date : 2017-03-23 14:47:39 # @Author : 江sir (2461805286@qq.com) # @Link : http://www.blogsir.com.cn # @Version : $1.1 import sys import xml.etree.ElementTree as ET import MySQLdb import argparse from prettytable import PrettyTable ''' 一个xml作业,自己用python实现了从xml读取到数据库,和从数据库读取到xml的功能 ''' def buildNewsXmlFile(data): root = ET.Element('sys_info')#创建sys_info根元素 # print help(ET) info = ET.SubElement(root, "info",attrib={'ip':'%s'%data[0][0]})#创建四个二级元素 sysDescr = ET.SubElement(info,"sysDescr") sysUpTime = ET.SubElement(info,"sysUpTime") sysContact = ET.SubElement(info,"sysContact") sysName = ET.SubElement(info,"sysName") sysDescr.text = data[0][1] sysUpTime.text = data[0][2] sysContact.text = data[0][3] sysName.text = data[0][4] info = ET.SubElement(root, "info",attrib={'ip':'%s'%data[1][0]}) sysDescr = ET.SubElement(info,"sysDescr") sysUpTime = ET.SubElement(info,"sysUpTime") sysContact = ET.SubElement(info,"sysContact") sysName = ET.SubElement(info,"sysName") sysDescr.text = data[1][1] sysUpTime.text = data[1][2] sysContact.text = data[1][3] sysName.text = data[1][4] info = ET.SubElement(root, "info",attrib={'ip':'%s'%data[2][0]}) sysDescr = ET.SubElement(info,"sysDescr") sysUpTime = ET.SubElement(info,"sysUpTime") sysContact = ET.SubElement(info,"sysContact") sysName = ET.SubElement(info,"sysName") sysDescr.text = data[2][1] sysUpTime.text = data[2][2] sysContact.text = data[2][3] sysName.text = data[2][4] print 'write into sys.xml...' tree = ET.ElementTree(root) tree.write("sys.xml") def xml_parser(): data = {} data_list = [] tree = ET.parse('21.xml') root = tree.getroot()# 获取根元素 for info in root.findall('info'): #查找所有info元素 for child in info: #对每个info元素遍历属性和子节点 data ['ip']= info.attrib['ip'] data[child.tag] = child.text # print data.values() data_list.append(data.values()) # print data_list return data_list def get_Mysql(): conn = MySQLdb.connect('localhost','root','root','sys_info2',charset='utf8') cursor = conn.cursor() cursor.execute('select * from info'); result = cursor.fetchall() if not result: print 'please insert the database first' sys.exit() x = PrettyTable(['IP地址','sysDescr.0','sysUpTime.0','sysContact','sysName.0']) for i in result: x.add_row(i) print x # print result return result def set_Mysql(data): conn = MySQLdb.connect('localhost','root','root','sys_info2',charset='utf8') cursor = conn.cursor() for i in data: # print tuple(i) sysName,ip,sysUpTime,sysDescr,sysContact = tuple(i) sql = "insert into info values ('%s','%s','%s','%s','%s')"%(ip,sysDescr,sysUpTime,sysContact,sysName) print '插入语句:',sql try: cursor.execute(sql) except: print 'please clear the database' sys.exit() print 'insert success!!!' conn.commit() conn.close() def clear_Mysql(): conn = MySQLdb.connect('localhost','root','root','sys_info2',charset='utf8') cursor = conn.cursor() cursor.execute('delete from info') conn.commit() conn.close() def main(): parser = argparse.ArgumentParser() parser.add_argument('status',type=int,help="0clar,1read,2insert") arg = parser.parse_args() # print arg status = arg.status if status == 1: data = get_Mysql() buildNewsXmlFile(data) elif status == 2: data = xml_parser() set_Mysql(data) elif status == 0: clear_Mysql() else: print 'usage %s [0|1|2]'%sys.argv[0] if __name__ == '__main__': main()
第四个作业是web编程,用python的flask框架即可快速实现一个xml文档的显示,文件过多,就不贴了
总结
以上就是这文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对的支持。
DDR爱好者之家 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
DDR爱好者之家 Design By 杰米
暂无评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年11月26日
2024年11月26日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]