美文网首页
(内部模块)xml

(内部模块)xml

作者: sixleaves | 来源:发表于2016-06-01 00:10 被阅读30次
    # 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
    

    相关文章

      网友评论

          本文标题:(内部模块)xml

          本文链接:https://www.haomeiwen.com/subject/pshhdttx.html