python xml Python玩XML:SAX才是王道,DOM内存爆炸你怕不怕?
资深软件开发工程师业余马拉松选手。XML虽说比JSON要来得更加复杂些, 于Web里的应用也不像先前那般多了, 然而依旧存在着不少地方在使用它, 因此, 很有必要知悉怎样对XML进行操作。DOM vs SAX解析XML, 存在着两种办法, 分别是DOM以及SAX。DOM会将整个XML读进内存之中, 解析成为树, 所以占用内存大, 解析速度慢, 其优点是能够任意地遍历树的节点。SAX属于流模式, 一边读一边解析, 占用内存小, 解析速度快, 它的缺点是我们得自己去处理事件。正常情况下优先考虑SAX因为DOM实在太占内存。于其中运用SAX去解析XML极为简洁, 一般而言我们所关注的事件是, 这个, 以及, 这3个函数到位了, 过后如此便能够对xml予以解析了。举个例子当SAX解析器读到一个节点时a href/python a会产生3个事件事件在读取时事件在读取时事件在读取时。用代码实验一下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_element: %s % name) def char_data(self, text): print(sax:char_data: %s % text) xml rPythonRuby handler DefaultSaxHandler() parser ParserCreate() parser.StartElementHandler handler.start_element parser.EndElementHandler handler.end_element parser.CharacterDataHandler handler.char_data parser.Parse(xml)应予以留意的是, 在读取一长串字符之时, 存在被多次调用的可能性, 故而需自行留存起来, 于其中再度整合。不是解析XML之外, 要怎样生成XML呢? 在大部分的情形下, 所需生成的XML结构算得上是极为简单的, 所以, 生成XML最简便且最有效的手段运用拼接字符串:L [] L.append(r ) L.append(r) L.append(encode(some data)) L.append(r) return .join(L)要是打算生成繁复的XML, 那该如何是好呢? 在此建议你千万别使用XML, 而是将其改成JSON。小结在对 XML 进行解析之际, 要留意去找出自身感兴趣的那些节点, 当响应事件之时, 需将节点数据予以保存, 在解析完成之后, 便能够对数据进行处理。练习请借助SAX进行程序编写, 以此来解析XML格式的天气预报, 进而获取天气预报:from xml.parsers.expat import ParserCreate from urllib import request def parseXml(xml_str): print(xml_str) return { city: ?, weather: { condition: Sunny, temperature: 37.2, wind: 9.7 } } # 测试: URL https://api.weatherapi.com/v1/current.xml?keyb4e8f86b44654e6b86885330242207qBeijingaqino with request.urlopen(URL, timeout4) as f: data f.read() result parseXml(data.decode(utf-8)) assert result[city] Beijing

相关新闻

最新新闻

日新闻

周新闻

月新闻