利用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语言编写电脑时间自动同步小工具
Mar 08 Python
python计算时间差的方法
May 20 Python
恢复百度云盘本地误删的文件脚本(简单方法)
Oct 21 Python
python导入模块交叉引用的方法
Jan 19 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
Flask教程之重定向与错误处理实例分析
Aug 01 Python
Django缓存系统实现过程解析
Aug 02 Python
python爬虫selenium和phantomJs使用方法解析
Aug 08 Python
python爬虫容易学吗
Jun 02 Python
Python中Selenium模块的使用详解
Oct 09 Python
Django Form常用功能及代码示例
Oct 13 Python
如何将anaconda安装配置的mmdetection环境离线拷贝到另一台电脑
Oct 15 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
PHP4实际应用经验篇(2)
2006/10/09 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
父窗口获取弹出子窗口文本框的值
2006/06/27 Javascript
推荐30个新鲜出炉的精美 jQuery 效果
2012/03/26 Javascript
Javascript中的for in循环和hasOwnProperty结合使用
2013/06/05 Javascript
javascript制作sql转换为stringBuffer的小工具
2015/04/03 Javascript
js获取及修改网页背景色和字体色的方法
2015/12/29 Javascript
javascript时间差插件分享
2016/07/18 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
JQuery form表单提交前验证单选框是否选中、删除记录时验证经验总结(整理)
2017/06/09 jQuery
Vue组件通信的四种方式汇总
2018/02/08 Javascript
VUE Error: getaddrinfo ENOTFOUND localhost
2018/05/03 Javascript
Vue组件全局注册实现警告框的实例详解
2018/06/11 Javascript
vue slots 组件的组合/分发实例
2018/09/06 Javascript
JavaScript实现的九种排序算法
2019/03/04 Javascript
如何在微信小程序中实现Mixins方案
2019/06/20 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
python语言元素知识点详解
2019/05/15 Python
selenium+Chrome滑动验证码破解二(某某网站)
2019/12/17 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
python实现简单的购物程序代码实例
2020/03/03 Python
python将unicode和str互相转化的实现
2020/05/11 Python
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
手机配件第一品牌:ZAGG
2017/05/28 全球购物
一道SQL面试题
2012/12/31 面试题
Java程序员面试题
2016/09/27 面试题
学前教育专业毕业生自荐信
2013/10/03 职场文书
大一学生假期实习的自我评价
2013/10/12 职场文书
《桂花雨》教学反思
2014/04/12 职场文书
个人承诺书格式
2014/06/03 职场文书
建筑安全标语
2014/06/07 职场文书
话题作文之成长
2019/12/09 职场文书
python 三边测量定位的实现代码
2021/04/22 Python
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫