发布时间:2022-05-13 文章分类:Python 知识 投稿人:李佳 字号: 默认 | | 超大 打印

python操作xml的两种方法

说明

1、DOM会将整个XML读入内存,解析为树,所以占用内存大,解析慢。

它的优点是可以随意遍历树的节点。

2、SAX是一种流模式,边读边分析,占用内存小,分析快,缺点是需要自己处理事件。

一般情况下,SAX优先考虑,因为DOM占用内存太多。

实例

fromxml.parsers.expatimportParserCreate

classDefaultSaxHandler(object):
defstart_element(self,name,attrs):
print('sax:start_element:%s,attrs:%s'%(name,str(attrs)))

defend_element(self,name):
print('sax:end_element:%s'%name)

defchar_data(self,text):
print('sax:char_data:%s'%text)

xml=r'''<?xmlversion="1.0"?>
<ol>
<li><ahref="/python">Python</a></li>
<li><ahref="/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)

//测试结果
sax:start_element:ol,attrs:{}
sax:char_data:

sax:char_data:
sax:start_element:li,attrs:{}
sax:start_element:a,attrs:{'href':'/python'}
sax:char_data:Python
sax:end_element:a
sax:end_element:li
sax:char_data:

sax:char_data:
sax:start_element:li,attrs:{}
sax:start_element:a,attrs:{'href':'/ruby'}
sax:char_data:Ruby
sax:end_element:a
sax:end_element:li
sax:char_data:

sax:end_element:ol

以上就是python操作xml的两种方法,希望对大家有所帮助。更多Python学习指路:Python基础教程