《python基础教程》项目3
2016-07-29 16:52
387 查看
项目3 :万能的XML
情况是:自动构建网站,根据一份XML文件,生成对应目录结构的网站
首先是:website.xml
下面是代码:
执行完生成四个html文件
情况是:自动构建网站,根据一份XML文件,生成对应目录结构的网站
首先是:website.xml
<website> <page name="index" title="Home page"> <h1>Welcome to my Home page</h1> <p>Hi, there. My name is Mr.gumby,and this is my home page,here are some of my int:</p> <ul> <li><a href="interests/shouting.html">Shouting</a></li> <li><a href="interests/sleeping.html">Sleeping</a></li> <li><a href="interests/eating.html">Eating</a></li> </ul> </page> <directory name="interests"> <page name="shouting" title="Shouting"> <h1>shouting page</h1> <p>....</p> </page> <page name="sleeping" title="Sleeping"> <h1>sleeping page</h1> <p>...</p> </page> <page name="eating" title="Eating"> <h1>Eating page</h1> <p>....</p> </page> </directory> </website>
下面是代码:
#-*- coding:utf8 -*- """ 最终版本(编写多一个混入类,和contenthandlers一起继承) """ import os from xml.sax import ContentHandler from xml.sax import parse class Dispatcher: '混入类' #dispatch的处理思路:首先根据传递的参数(就是操作名称以及节点名称)判断是否存在对应的函数如startPage, # 如果不存在则执行default+操作名称:如defaultStart。 def dispatch(self, pre, name, attrs=None): aname = pre + name.capitalize() bname = 'default' + pre.capitalize() method = getattr(self, aname, None) if callable(method): args = () else: method = getattr(self, bname, None) args = name, print method if pre == 'start': args += attrs, #如果是起始处理程序,就将属性添加到args if callable(method): method(*args) def startElement(self, name, attrs): self.dispatch('start', name, attrs) def endElement(self, name): self.dispatch('end', name) class Test(Dispatcher, ContentHandler): '事件处理程序:2个处理目录,2个处理页面' passconfirm = False def __init__(self, directory): self.directory = [directory] #列表 self.judgeDirectory() def judgeDirectory(self): path = os.path.join(*self.directory) if not os.path.isdir(path): os.makedirs(path) def startDirectory(self,attrs): self.directory.append(attrs['name']) self.judgeDirectory() def endDirectory(self): self.directory.pop() def Header(self,title): self.out.write('<html>\n<head>\n<title>') self.out.write(title) self.out.write('</title>\n</head>\n<body>\n') def Footer(self): self.out.write('\n</body></html>\n') def startPage(self, attrs): filename = os.path.join(*self.directory+[attrs['name']+'.html']) self.out = open(filename, 'w') self.Header(attrs['title']) self.passconfirm = True def endPage(self): self.passconfirm = False self.Footer() self.out.close() def defaultStart(self, name, attrs): if self.passconfirm: self.out.write('<' + name) for key, val in attrs.items(): self.out.write(' %s="%s"' % (key, val)) self.out.write('>') def defaultEnd(self, name): if self.passconfirm: self.out.write('</%s>' % name) def characters(self, content): if self.passconfirm: self.out.write(content) parse('website.xml', Test('A')) #parse函数:解析xml文件:负责读取文件并生成事件
执行完生成四个html文件
相关文章推荐
- 《python基础教程》项目3
- 《python基础教程》项目3
- 《python基础教程》项目3
- 《python基础教程》项目3
- 《python基础教程》项目3
- 《python基础教程》项目3
- 《python基础教程》项目3
- python 登陆接口
- Caffe在Python中使用内存数据(MemoryData)进行训练
- python3安装jupyterhub
- windows安装python的mysql驱动mysql-connector-python
- Python关键字参数
- 以写代学: python 集合
- Python语言获取脚本文件所在路径
- 十二、Python高级功能之Mysql数据库模块
- python 返回函数
- Python and-or例子说明
- env中调用python或perl
- 十一、Python异常处理
- python 自定义排序函数