利用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用ConfigObj读写配置文件的实现代码
Mar 04 Python
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
Feb 04 Python
python通过floor函数舍弃小数位的方法
Mar 17 Python
python通过colorama模块在控制台输出彩色文字的方法
Mar 19 Python
Python实现监控程序执行时间并将其写入日志的方法
Jun 30 Python
Python if语句知识点用法总结
Jun 10 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
Nov 23 Python
Linux 修改Python命令的方法示例
Dec 03 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
Flask搭建一个API服务器的步骤
May 28 Python
如何利用python实现Simhash算法
Jun 28 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编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
Zend Framework教程之Zend_Layout布局助手详解
2016/03/04 PHP
yii2 resetful 授权验证详解
2017/05/18 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
JS input 数字验证代码
2009/07/30 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
js 获取、清空input type=&quot;file&quot;的值示例代码
2014/02/19 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
JS+CSS实现下拉列表框美化效果(3款)
2015/08/15 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
JS实现的透明度渐变动画效果示例
2018/04/28 Javascript
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
Vue组件间通信 Vuex的用法解析
2019/08/05 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
javascript解析json格式的数据方法详解
2020/08/07 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
Python随机数random模块使用指南
2016/09/09 Python
Python利用Beautiful Soup模块搜索内容详解
2017/03/29 Python
详解pyenv下使用python matplotlib模块的问题解决
2018/11/29 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
conda安装tensorflow和conda常用命令小结
2021/02/20 Python
JD Sports比利时官网:英国领先的运动鞋和运动服饰零售商
2018/10/10 全球购物
英国时尚高尔夫服装购物网站:Trendy Golf
2020/01/10 全球购物
四种会话跟踪技术
2015/05/20 面试题
计算机应用专业学生的自我评价分享
2013/11/03 职场文书
证券期货行业个人的自我评价
2013/12/26 职场文书
师德模范事迹材料
2014/06/03 职场文书
新兵入伍心得体会
2014/09/04 职场文书
2015年乡镇工作总结范文
2015/04/22 职场文书
2016中秋节问候语
2015/11/11 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
Golang入门之计时器
2022/05/04 Golang
win10+RTX3050ti+TensorFlow+cudn+cudnn配置深度学习环境的方法
2022/06/25 Servers