利用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刷投票的脚本实现代码
Nov 08 Python
Python学习笔记整理3之输入输出、python eval函数
Dec 14 Python
python数据结构之链表的实例讲解
Jul 25 Python
python的文件操作方法汇总
Nov 10 Python
python 定义给定初值或长度的list方法
Jun 23 Python
python绘制简单彩虹图
Nov 19 Python
如何安装并使用conda指令管理python环境
Jul 10 Python
Django实现跨域的2种方法
Jul 31 Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
Feb 03 Python
Pandas替换及部分替换(replace)实现流程详解
Oct 12 Python
多个版本的python共存时使用pip的正确做法
Oct 26 Python
python利用while求100内的整数和方式
Nov 07 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面向对象之旅:深入理解static变量与方法
2014/01/06 PHP
PHP中is_file不能替代file_exists的理由
2014/03/04 PHP
php反射类ReflectionClass用法分析
2016/05/12 PHP
php 生成签名及验证签名详解
2016/10/26 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
ThinkPHP3.1.2 使用cli命令行模式运行的方法
2020/04/14 PHP
JS 判断undefined的实现代码
2009/11/26 Javascript
基于jquery1.4.2的仿flash超炫焦点图播放效果
2010/04/20 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
AngularJs实现ng1.3+表单验证
2015/12/10 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
js禁止浏览器的回退事件
2017/04/20 Javascript
ES6学习教程之对象的扩展详解
2017/05/02 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
Vue 进阶之路(三)
2019/04/18 Javascript
详解新手使用vue-router传参时注意事项
2019/06/06 Javascript
webpack自动打包和热更新的实现方法
2019/06/24 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
python计算两个地址之间的距离方法
2018/06/09 Python
Django中Middleware中的函数详解
2019/07/18 Python
Django中自定义模型管理器(Manager)及方法
2019/09/23 Python
使用Python实现Wake On Lan远程开机功能
2020/01/22 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
详解webapp页面滚动卡顿的解决办法
2018/12/26 HTML / CSS
为什么需要版本控制
2016/10/28 面试题
空乘英文求职信
2014/04/13 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
毕业生自荐信范文
2015/03/05 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP