利用python將xml文件解析成html文件的實現(xiàn)方法
功能就是題目所述,我的python2.7,裝在windows環(huán)境,我使用的開發(fā)工具是wingide 6.0
1、首先是我設(shè)計的簡單的一個xml文件,也就是用來解析的源文件
下面是這個文件website.xml內(nèi)容:
<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就是對應(yīng)一個html文件,這里有兩個page也就是要解析成兩個html文件,然后分別是index.html和shouting.html,其中在index.html中通過<a>鏈接轉(zhuǎn)到shouting.html文件中顯示shouting.html文件的內(nèi)容
2、python代碼實現(xiàn)解析(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解析方法調(diào)用parse方法來解析,自己創(chuàng)建了一個解析類,繼承了ContentHandler,在里面分別重寫了startelement和endelement方法還有charactors方法,startelement方法是當(dāng)找到xml文件中的開頭標(biāo)簽時調(diào)用,如<a>、<h1>,passthrough變量是為了判斷當(dāng)前是否在page標(biāo)簽里面,true表示在page標(biāo)簽里面,就是屬于當(dāng)前page頁面的元素,因為xml.sax是關(guān)注標(biāo)簽的,他不會管你是否在當(dāng)前哪個page里面,然后后面的代碼都容易理解,就是添加html的開頭標(biāo)簽<html><head><body>等,注意,attrs儲存的是標(biāo)簽的屬性,例如<page>里面name="shouting",name="index",那么就attrs就儲存這name="shouting"這個東西,從而在attrs里面獲取name屬性里面的shouting和index作為html文件的文件名,同理<a>里面的href=……也是通過這個數(shù)據(jù)獲取,分別存在str和val變量中,并且通過write寫進文件。
然后endelement就是當(dāng)解析到</h1>這類的結(jié)尾標(biāo)簽的時候調(diào)用,添加結(jié)尾的標(biāo)簽,如果是文件結(jié)尾,那么就是</page>,這時候就把</html>、</body>這些html的結(jié)尾標(biāo)簽添加進去,否則,就是page頁面里面的元素結(jié)尾標(biāo)簽
characters就是將開頭標(biāo)簽于結(jié)尾標(biāo)簽之間找到的字符串添加進去
最后我們把python代碼運行起來之后就可以看到在同一目錄下生成了兩個html文件,分別是shouting.html和index.html,打開index.html就可以看到一個叫做“shouting”的鏈接,點過去就打開了shouting.html
以上這篇利用python將xml文件解析成html文件的實現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- Python大數(shù)據(jù)之使用lxml庫解析html網(wǎng)頁文件示例
- Python lxml解析HTML并用xpath獲取元素的方法
- Python基于lxml模塊解析html獲取頁面內(nèi)所有葉子節(jié)點xpath路徑功能示例
- Python使用lxml模塊和Requests模塊抓取HTML頁面的教程
- Python實現(xiàn)把xml或xsl轉(zhuǎn)換為html格式
- Python將xml和xsl轉(zhuǎn)換為html的方法
- 使用python解析xml成對應(yīng)的html示例分享
- python將xml xsl文件生成html文件存儲示例講解
- Python在字符串中處理html和xml的方法
相關(guān)文章
python for循環(huán)remove同一個list過程解析
這篇文章主要介紹了python for循環(huán)remove同一個list過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-08-08使用Fabric自動化部署Django項目的實現(xiàn)
這篇文章主要介紹了使用Fabric自動化部署Django項目的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09單身狗福利?Python爬取某婚戀網(wǎng)征婚數(shù)據(jù)
今天我就當(dāng)回媒婆,給男性程序員來點福利.今天目標(biāo)爬取征婚網(wǎng)上呈現(xiàn)出來的女生信息保存成excel表格供大家篩選心儀的女生,需要的朋友可以參考下2021-06-06Scrapy之爬取結(jié)果導(dǎo)出為Excel的實現(xiàn)過程
這篇文章主要介紹了Scrapy之爬取結(jié)果導(dǎo)出為Excel的實現(xiàn)過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-12-12opencv python 對指針儀表讀數(shù)識別的兩種方式
這篇文章主要介紹了opencv python 對指針儀表讀數(shù)識別的兩種方式,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01