利用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标准库之多进程(multiprocessing包)介绍
Nov 25 Python
Python中的map()函数和reduce()函数的用法
Apr 27 Python
Python计算两个日期相差天数的方法示例
May 23 Python
通过Pandas读取大文件的实例
Jun 07 Python
Python实现多条件筛选目标数据功能【测试可用】
Jun 13 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
python sqlite的Row对象操作示例
Sep 11 Python
Flask项目中实现短信验证码和邮箱验证码功能
Dec 05 Python
Python-openCV读RGB通道图实例
Jan 17 Python
基于pytorch padding=SAME的解决方式
Feb 18 Python
python打包多类型文件的操作方法
Sep 21 Python
Python办公自动化之教你用Python批量识别发票并录入到Excel表格中
Jun 26 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中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
PHP获取本周第一天和最后一天示例代码
2014/02/24 PHP
PHP后期静态绑定之self::限制实例分析
2018/12/21 PHP
解javascript 混淆加密收藏
2009/01/16 Javascript
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
限制文本框输入N个字符的js代码
2010/05/13 Javascript
js 动态生成json对象、时时更新json对象的方法
2016/12/02 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
2018/02/01 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
js中Generator函数的深入讲解
2019/04/07 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
原生js实现自定义消息提示框
2020/11/19 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
2020/12/04 Vue.js
Python中装饰器的一个妙用
2015/02/08 Python
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
编写Python CGI脚本的教程
2015/06/29 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
2016/11/16 Python
Python爬豆瓣电影实例
2018/02/23 Python
python 将md5转为16字节的方法
2018/05/29 Python
Python使用sax模块解析XML文件示例
2019/04/04 Python
Python Sqlalchemy如何实现select for update
2020/10/12 Python
日本最新流行服饰网购:Nissen
2016/07/24 全球购物
美国婚戒购物网站:Anjays Designs
2017/06/28 全球购物
澳洲健康食品网上商店:Aussie Health Products
2018/06/15 全球购物
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
编程输出如下图形
2013/11/24 面试题
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
2015年党风廉政承诺书
2015/01/22 职场文书
2015年社区统计工作总结
2015/04/21 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
CSS 文字装饰 text-decoration & text-emphasis 详解
2021/04/06 HTML / CSS
Java 关于String字符串原理上的问题
2022/04/07 Java/Android
Oracle中DBLink的详细介绍
2022/04/29 Oracle
tomcat下部署jenkins的方法
2022/05/06 Servers