利用python将xml文件解析成html文件的实现方法


Posted in Python onDecember 22, 2017

功能就是题目所述,我的python2.7,装在windows环境,我使用的开发工具是wingide 6.0

1、首先是我设计的简单的一个xml文件,也就是用来解析的源文件

下面是这个文件website.xml内容:

<website>
<page name="index" title="fuckyou">
	<h1>welcome to</h1>
	<p>this is a moment</p>
<ul>
<li><a href="shouting.html" rel="external nofollow" >Shouting</a></li>
</ul>
</page>
<page name="shouting" title="mother">
<h1>My name is likeyou</h1>
</page>
</website>

解释:page就是对应一个html文件,这里有两个page也就是要解析成两个html文件,然后分别是index.html和shouting.html,其中在index.html中通过<a>链接转到shouting.html文件中显示shouting.html文件的内容

2、python代码实现解析(xmltest.py)

#!D:\Python27\python.exe
#-*- coding:utf-8 -*-
from xml.sax import parse
from xml.sax.handler import ContentHandler
class PageCreate(ContentHandler):
 pagethrough = False
 def startElement(self, name, attrs):
  if name == 'page':
   self.pagethrough = True
   self.out = open(attrs['name'] + '.html', 'w')
   self.out.write('<html>\n<head>\n')
   self.out.write('<title>%s</title>\n' %(attrs['title']))
   self.out.write('</head>\n<body>\n')
  elif self.pagethrough:
   self.out.write('<')
   self.out.write(name)
   for str,val in attrs.items():
    self.out.write(' %s="%s"' %(str, val))
   self.out.write('>') 
   
 def endElement(self, name):
  if name == 'page':
   self.out.write('</body>\n</html>')
   self.pagethrough = False
   self.out.close()
  if self.pagethrough:
   self.out.write('<')
   self.out.write('/' + name)
   self.out.write('>')
   
 def characters(self, content):
  if self.pagethrough:
   self.out.write(content)
 
parse('D:\\pyproject\\file\\website.xml', PageCreate())

代码解释:

使用xml.sax解析方法调用parse方法来解析,自己创建了一个解析类,继承了ContentHandler,在里面分别重写了startelement和endelement方法还有charactors方法,startelement方法是当找到xml文件中的开头标签时调用,如<a>、<h1>,passthrough变量是为了判断当前是否在page标签里面,true表示在page标签里面,就是属于当前page页面的元素,因为xml.sax是关注标签的,他不会管你是否在当前哪个page里面,然后后面的代码都容易理解,就是添加html的开头标签<html><head><body>等,注意,attrs储存的是标签的属性,例如<page>里面name="shouting",name="index",那么就attrs就储存这name="shouting"这个东西,从而在attrs里面获取name属性里面的shouting和index作为html文件的文件名,同理<a>里面的href=……也是通过这个数据获取,分别存在str和val变量中,并且通过write写进文件。

然后endelement就是当解析到</h1>这类的结尾标签的时候调用,添加结尾的标签,如果是文件结尾,那么就是</page>,这时候就把</html>、</body>这些html的结尾标签添加进去,否则,就是page页面里面的元素结尾标签

characters就是将开头标签于结尾标签之间找到的字符串添加进去

最后我们把python代码运行起来之后就可以看到在同一目录下生成了两个html文件,分别是shouting.html和index.html,打开index.html就可以看到一个叫做“shouting”的链接,点过去就打开了shouting.html

以上这篇利用python将xml文件解析成html文件的实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现获取某天是某个月中的第几周
Feb 11 Python
Python实现测试磁盘性能的方法
Mar 12 Python
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
Apr 16 Python
Python实现的栈(Stack)
Jan 26 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
python hashlib加密实现代码
Oct 17 Python
python 爬虫百度地图的信息界面的实现方法
Oct 27 Python
Windows下Anaconda安装、换源与更新的方法
Apr 17 Python
Python模拟登录requests.Session应用详解
Nov 17 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 Python
python实现数据预处理之填充缺失值的示例
Dec 22 #Python
NetworkX之Prim算法(实例讲解)
Dec 22 #Python
Python实现控制台中的进度条功能代码
Dec 22 #Python
Python中的探索性数据分析(功能式)
Dec 22 #Python
Python反射用法实例简析
Dec 22 #Python
Python文本特征抽取与向量化算法学习
Dec 22 #Python
用Python实现KNN分类算法
Dec 22 #Python
You might like
php session_start()关于Cannot send session cache limiter - headers already sent错误解决方法
2009/11/27 PHP
PHP统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
XmlUtils JS操作XML工具类
2009/10/01 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
Angularjs中的页面访问权限怎么设置
2016/11/11 Javascript
简单三步实现报表页面集成天气
2016/12/15 Javascript
详解MVC如何使用开源分页插件(shenniu.pager.js)
2016/12/16 Javascript
将angular-ui的分页组件封装成指令的方法详解
2017/05/10 Javascript
vue mint-ui tabbar变组件使用
2018/05/04 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
jQuery弹框插件使用方法详解
2020/05/26 jQuery
JavaScript动画实例之粒子文本的实现方法详解
2020/07/28 Javascript
Ant Design的可编辑Tree的实现操作
2020/10/31 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
python 文件与目录操作
2008/12/24 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
Python实现的根据文件名查找数据文件功能示例
2018/05/02 Python
python实现杨氏矩阵查找
2019/03/02 Python
详解Python基础random模块随机数的生成
2019/03/23 Python
Django中Middleware中的函数详解
2019/07/18 Python
python3.6生成器yield用法实例分析
2019/08/23 Python
浅析Python 多行匹配模式
2020/07/24 Python
详解python实现可视化的MD5、sha256哈希加密小工具
2020/09/14 Python
2014年幼儿园学期工作总结
2014/12/05 职场文书
教师个人培训总结
2015/02/11 职场文书
道歉的话怎么说
2015/05/12 职场文书
六一亲子活动感想
2015/08/07 职场文书