适合Python新手练习的实战项目之万能的XML

时间:2018-12-17 10:43:19   来源:上海尚学堂   阅读:
亲爱的Python学习伙伴们,在Python理论学习之余,做一做适合Python新手联系的项目是非常不错的,能巩固和提高Python的实际技能。从这篇开始,上海尚学堂Python培训将带给大家Python小项目,供初学者练习。有需要详细全部的尚学堂Python教程的可以联系客服小姐姐索取。

这个项目的名称与其叫做万能的XML,不如叫做自动构建网站,根据一份XML文件,生成对应目录结构的网站,不过只有html还是太过于简单了,如果要是可以连带生成css那就比较强大了。这个有待后续研发,先来研究下怎么html网站结构。既然是通过XML结构生成网站,那所有的事情都应该由这个XML文件来。先来看下这个XML文件, website.xml:


 
有了这个文件,下面应该来看怎么通过这个文件生成网站。

首先我们要解析这个xml件, python解析xml和在java中一样,有两种方式,SAX和DOM,两种处理方式不同点在于速度和范围,前者讲究的是效率,每次只处理文档的一小部分,快速而能有效的利用内存,后者是相反的处理方式,先把所有的文档载入到内存,然后再进行处理,速度比较慢,也比较肖耗内存,唯一的好处就是可以操作整个文档。

在 python中使用sax方式处理xml要先引入 xml.sax中的 parse函数,还有 xml. sax .handler中的Contenthandler,后面的这个类是要和pase函数来配合使用的。
 
使用方式如下: parse(xxxm" xxxHandler)
这里面的 xxxHandler要继承上面的 ContentHandler,不过只要继承就行,不需要有所作为。然后这个pase函数在处理xml文件的时候,会调用 xxxHandle中的 startElement函数和 endElement函数来一个xml中的标签的开始和结束,中间的过程使用一个名为 characters的函数来处理标签内部的所有字符串。

有了上面的这些认识,我们已经知道如何处理xml文件了,然后再来看那个罪恶的源头 website.xml文件,分析其结构,只有两个节点:page和 directory,很明显page表示一个页面, directory表示一个目录所以处理这个xml文件的思路就变的消晰了。读取xml文件的每一个节点,然后判断是page还是 directory如果是page则创建html页面,然后把节点中的内容写到文件里。如果遇到 director就创建一个文件夹,然后再处理其内部的page节点(如果存在的话)。

下面来看这部分代码,书中的实现比较复杂,比较灵活。先来看,然后在分析。
 

 
看起来这个程序上面分析的复杂了一些,不过伟人毛爷爷说过,任何复杂的程序都是纸老虎。那我们再来分析下这个程序。

首先看到这个程序是有两个类,其实完全可以当作一个类,因为有了继承然后再来看它多了些什么,除了我们分析出来的 IstartElement和 endElement以及 characters,多出来了startPage、 
endPage 、startDirectory、 endDirectory、defaultStart、defaultEnd、 ensure Directory、 writeHeader
write Footer.和 dispatch,这些个函数。除了 dispatch,前面的函数都很好理解,每一对函数都是单纯的处理对应的html标签以及xml节点。而 dispatch比较复杂,复杂之处在于他是用来动态拼合函数并目进行执行的。

dispatch的处理思路是,首先根据传递的参数(就是操作名称以及节点名称)判断是否存在对应的函数如startPage,如果不存在则执行 default+操作名称:如 defaultStart。

一个函数一个函数搞清楚之后,就知道整个处理流程是什么样了。首先创建一个 public_html的文件,存放整个网站,然后读xml的节点,通过 startElement和 endElement调用 dispatch进行处理,然后就是 dispatch怎么调用具体的处理函数了。到此为止,这个项目算是分析完了。

主要掌握的内容一个是 python中使用SAX处理XML,另一个就是 python中的函数的使用,比如 getattr,传参数时的星号...
 

 上海尚学堂python培训继续报名,免费试学机会联系客服小姐姐申请,还可以获得超值的Python学习大礼包,课程视频等。

分享:0

电话咨询

客服热线服务时间

周一至周五 9:00-21:00

周六至周日 9:00-18:00

咨询电话

021-67690939
15201841284

微信扫一扫