利用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实现的百度贴吧网络爬虫实例
Apr 17 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
python中报错&quot;json.decoder.JSONDecodeError: Expecting value:&quot;的解决
Apr 29 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
Python何时应该使用Lambda函数
Jul 02 Python
python实时检测键盘输入函数的示例
Jul 17 Python
基于python框架Scrapy爬取自己的博客内容过程详解
Aug 05 Python
使用matplotlib绘制图例标签中带有公式的图
Dec 13 Python
Python使用psutil获取进程信息的例子
Dec 17 Python
python实现双色球随机选号
Jan 01 Python
Python 实现PS滤镜中的径向模糊特效
Dec 03 Python
Python之matplotlib绘制折线图
Apr 13 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旋转图片90度的方法
2013/11/07 PHP
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
PHP实现递归无限级分类
2015/10/22 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
Javascript 继承实现例子
2009/08/12 Javascript
js常用代码段收集
2011/10/28 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
BOM之navigator对象和用户代理检测
2017/02/10 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
JS实现两周内自动登录功能
2017/03/23 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
微信小程序实现联动选择器
2019/02/15 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
JS+Canvas实现五子棋游戏
2020/08/26 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
Python标准库06之子进程 (subprocess包) 详解
2016/12/07 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
python super用法及原理详解
2020/01/20 Python
python中rc1什么意思
2020/06/19 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
CSS3.0实现霓虹灯按钮动画特效的示例代码
2021/01/12 HTML / CSS
HTML5拖放API实现自动生成相框功能
2020/04/07 HTML / CSS
英国足球店:UK Soccer Shop
2017/11/19 全球购物
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
文史专业毕业生自荐信
2013/11/17 职场文书
心理健康活动总结
2014/04/30 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
英文导游词
2015/02/13 职场文书
小学教师读书笔记
2015/07/01 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书