(内部模块)xml
2016-06-01 本文已影响30人
sixleaves
# XML比JSON复杂.在Web中的应用也没有以前多.但很多地方依然有用
# 操作XML有两种方式: DOM 和 SAX.
# 1.DOM方式会把整个XML读入内出, 解析为树, 因此占用内存大, 解析慢.
# 2.SAX是流模式, 边读边解析, 占用内存小, 解析快.缺点是我们自己要处理事件.
# 一般情况下, 威鹏们优先考虑SAX, 因为DOM太占内存
# 在Python中, 使用SAX解析XML非常简洁, 通常我们关心的事件是start_element, end_element, char_data
# 准备好这三个函数, 就可以解析了.
# eg: <a href="/">python</a>
# 会产生3个事件,
# 1.在读取<a href="/">时, 产生start_element事件.
# 2.在读取python时, 产生char_data事件.
# 3.在读取</a>时, 产生end_element事件.
from xml.parsers.expat import ParserCreate
class DefaultSaxHandler(object):
def start_element(self, name, attrs):
print('sax:start_element: %s, attrs: %s' % (name, str(attrs)))
def end_element(self, name):
print('sax:end_elemnt: %s' % name)
def char_data(self, text):
print('sax:char_data: %s' % text)
xml = r'''<?xml version="1.0"?>
<ol>
<li><a href="/python">Python</a></li>
<li><a href="/ruby">Ruby</a></li>
</ol>
'''
handler = DefaultSaxHandler()
parser = ParserCreate()
parser.StartElementHandler = handler.start_element
parser.EndElementHandler = handler.end_element
parser.CharacterDataHandler = handler.char_data
parser.Parse(xml)
# 至于如何生成XML, 最简单的是使用拼接.如果是复杂的XML, 一般使用JSON