利用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正则表达式re模块详细介绍
May 29 Python
在Python中进行自动化单元测试的教程
Apr 15 Python
在Python中操作字典之setdefault()方法的使用
May 21 Python
用Python抢过年的火车票附源码
Dec 07 Python
Python中property属性实例解析
Feb 10 Python
python多环境切换及pyenv使用过程详解
Sep 27 Python
Django与pyecharts结合的实例代码
May 13 Python
python 瀑布线指标编写实例
Jun 03 Python
如何在VSCode下使用Jupyter的教程详解
Jul 13 Python
Pycharm编辑器功能之代码折叠效果的实现代码
Oct 15 Python
python 实现的截屏工具
May 08 Python
python基础之文件处理知识总结
May 23 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导出Redis数据到另一个Redis中的代码
2014/03/12 PHP
CI框架给视图添加动态数据
2014/12/01 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
IE浏览器兼容Firefox的JS脚本的代码
2008/10/23 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
Easyui的组合框的取值与赋值
2016/10/28 Javascript
Angularjs之filter过滤器(推荐)
2016/11/27 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
微信小程序实现图片自适应(支持多图)
2017/01/25 Javascript
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
详解如何从零开始搭建Express+Vue开发环境
2018/07/17 Javascript
Vue 3.0中jsx语法的使用
2020/11/13 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
尝试用最短的Python代码来实现服务器和代理服务器
2016/06/23 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
在Django model中设置多个字段联合唯一约束的实例
2019/07/17 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
Python多分支if语句的使用
2020/09/03 Python
用python批量下载apk
2020/12/29 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
美国最大的城市服装和运动鞋零售商:Jimmy Jazz
2016/11/19 全球购物
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
Java语言程序设计测试题改错题部分
2014/07/22 面试题
幼师专业毕业生自荐信
2013/09/29 职场文书
日语专业个人求职信范文
2014/02/02 职场文书
全国文明单位申报材料
2014/05/31 职场文书
奥林匹克的口号
2014/06/13 职场文书
法制宣传标语集锦
2014/06/25 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
升职自我推荐信范文
2015/03/25 职场文书
MySQL派生表联表查询实战过程
2022/03/20 MySQL
Python matplotlib 利用随机函数生成变化图形
2022/04/26 Python