利用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 相关文章推荐
Perl中著名的Schwartzian转换问题解决实现
Jun 02 Python
python 文件操作删除某行的实例
Sep 04 Python
Python基于回溯法子集树模板解决找零问题示例
Sep 11 Python
python cx_Oracle的基础使用方法(连接和增删改查)
Nov 19 Python
Python爬虫框架scrapy实现的文件下载功能示例
Aug 04 Python
Django项目后台不挂断运行的方法
Aug 31 Python
python 项目目录结构设置
Feb 14 Python
python logging 日志的级别调整方式
Feb 21 Python
jupyter notebook oepncv 显示一张图像的实现
Apr 24 Python
Python 正则模块详情
Nov 02 Python
python 安全地删除列表元素的方法
Mar 16 Python
Python实战实现爬取天气数据并完成可视化分析详解
Jun 16 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数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
php实现过滤字符串中的中文和数字实例
2015/07/29 PHP
PHP的Yii框架中过滤器相关的使用总结
2016/03/29 PHP
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
页面实时更新时间的JS实例代码
2013/12/18 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
基于jQuery实现Tabs选项卡自定义插件
2016/11/21 Javascript
vue 和vue-touch 实现移动端左右导航效果(仿京东移动站导航)
2017/04/22 Javascript
AngularJS 监听变量变化的实现方法
2018/10/09 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
前端性能优化建议
2020/09/17 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛5.21 LGD-CDEC VS NE
2014/05/22 DOTA
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
详解Python中 sys.argv[]的用法简明解释
2017/12/20 Python
使用python对文件中的单词进行提取的方法示例
2018/12/21 Python
python调用opencv实现猫脸检测功能
2019/01/15 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
Pytorch根据layers的name冻结训练方式
2020/01/06 Python
python实现一次性封装多条sql语句(begin end)
2020/06/06 Python
python中的django是做什么的
2020/07/31 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
python中random模块详解
2021/03/01 Python
文秘自荐信
2013/10/20 职场文书
2014年政教处工作总结
2014/12/20 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
2016年三八红旗手先进事迹材料
2016/02/26 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
美元符号 $
2022/02/17 杂记