python有三种方法解析XML,分别是SAX,DOM,以及ElementTree:
SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回调函数来处理XML文件。
DOM模型将XML数据在内存中解析成一个树,通过对树的 *** 作来 *** 作XML。
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好,速度快,消耗内存少。
Python 解析XML实例:
#!/usr/bin/python# -*- coding: UTF-8 -*-
import xml.sax
class MovieHandler( xml.sax.ContentHandler ):
def __init__(self):
self.CurrentData = ""
self.type = ""
self.format = ""
self.year = ""
self.rating = ""
self.stars = ""
self.description = ""
# 元素开始事件处理
def startElement(self, tag, attributes):
self.CurrentData = tag
if tag == "movie":
print "*****Movie*****"链运
title = attributes["title"]
print "Title:", title
# 元素结束事件处理
def endElement(self, tag):
if self.CurrentData == "type":
print "Type:", self.type
elif self.CurrentData == "format":
print "Format:", self.format
elif self.CurrentData == "year":
print "Year:", self.year
elif self.CurrentData == "rating":
print "Rating:", self.rating
elif self.CurrentData == "stars":
笑唤拆 print "Stars:", self.stars
elif self.CurrentData == "description":
碰枣 print "Description:", self.description
self.CurrentData = ""
# 内容事件处理
def characters(self, content):
if self.CurrentData == "type":
self.type = content
elif self.CurrentData == "format":
self.format = content
elif self.CurrentData == "year":
self.year = content
elif self.CurrentData == "rating":
self.rating = content
elif self.CurrentData == "stars":
self.stars = content
elif self.CurrentData == "description":
self.description = content
if ( __name__ == "__main__"):
# 创建一个 XMLReader
parser = xml.sax.make_parser()
# turn off namepsaces
parser.setFeature(xml.sax.handler.feature_namespaces, 0)
# 重写 ContextHandler
Handler = MovieHandler()
parser.setContentHandler( Handler )
parser.parse("movies.xml")
python对XML的解析常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然使用场合也不同。
python有三种方法解析码闹XML,SAX,DOM,以及ElementTree:
1.SAX (simple API for XML )
python 标准库包含SAX解析器,SAX用事件驱动模型,通过在解析XML的过程中触发一个个的事件并调用用户定义的回渣模纳调函数来处理XML文件。
2.DOM(Document Object Model)
将XML数据在内存中解析成一个树,通过对树的 *** 作来 *** 作XML。
3.ElementTree(元素树)
ElementTree就像一个轻量级的DOM,具有方便友好的API。代码可用性好如没,速度快,消耗内存少。
注:因DOM需要将XML数据映射到内存中的树,一是比较慢,二是比较耗内存,而SAX流式读取XML文件,比较快,占用内存少,但需要用户实现回调函数(handler)。
可以使用beautifulsoup解析,或者自己使用正则表达式:(import re)
首先获取所有的tr标签内的内容
tr_tags = re.findall(r"<tr>(?P[\w\W]*?)</tr>芦宴氏", jsp_html_content)
对于每个tr内的标签内容:
for tag in tr_tags:
first_str = re.findall(r"title=\"(?P[\w\W]*?)\"", tag)[0]
second_str = re.findall(r"encode(\"(?P[\w\W]*?)\"", tag)[0]
third_str = re.findall(r"祥枣%>\">(?P[\w\W]*?)</a>", tag)[0]
此时first_str, second_str, third_str 就对应于【文件中陪散所有的 "文件11", "/file/1文件11.pdf", "文件11" 这三个信息"】
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)