猿问

如何在Python中解析XML?

如何在Python中解析XML?

我在包含xml的数据库中有很多行,我正在尝试编写一个Python脚本,该脚本将遍历这些行并计算特定节点属性的实例数量。例如,我的树看起来像:

<foo>
   <bar>
      <type foobar="1"/>
      <type foobar="2"/>
   </bar></foo>

如何使用Python访问XML中的属性1和2?


慕侠2389804
浏览 878回答 4
4回答

慕勒3428872

我建议ElementTree。同一API的其他兼容实现,例如lxml,以及cElementTreePython标准库本身;&nbsp;但是,在这种情况下,他们主要添加的是更快的速度 - 编程部分的简易性取决于ElementTree定义的API&nbsp;。首先root从XML&nbsp;构建一个Element实例,例如使用XML函数,或者使用以下内容解析文件:import&nbsp;xml.etree.ElementTree&nbsp;as&nbsp;ET root&nbsp;=&nbsp;ET.parse('thefile.xml').getroot()或者显示的许多其他方式中的任何一种ElementTree。然后做一些事情:for&nbsp;type_tag&nbsp;in&nbsp;root.findall('bar/type'): &nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;type_tag.get('foobar') &nbsp;&nbsp;&nbsp;&nbsp;print(value)类似的,通常很简单的代码模式。

慕桂英3389331

那里有很多选择。如果速度和内存使用是一个问题,cElementTree看起来很棒。与简单地使用文件读取相比,它的开销非常小readlines。相关指标可在下表中找到,从cElementTree网站复制:library&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;time&nbsp; &nbsp; spacexml.dom.minidom (Python 2.1)&nbsp; &nbsp; 6.3 s&nbsp; &nbsp;80000Kgnosis.objectify&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 2.0 s&nbsp; &nbsp;22000kxml.dom.minidom (Python 2.4)&nbsp; &nbsp; 1.4 s&nbsp; &nbsp;53000kElementTree 1.2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1.6 s&nbsp; &nbsp;14500k&nbsp;&nbsp;ElementTree 1.2.4/1.3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;1.1 s&nbsp; &nbsp;14500k&nbsp;&nbsp;cDomlette (C extension)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.540 s 20500kPyRXPU (C extension)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0.175 s 10850klibxml2 (C extension)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;0.098 s 16000kreadlines (read as utf-8)&nbsp; &nbsp; &nbsp; &nbsp;0.093 s 8850kcElementTree (C extension)&nbsp; --> 0.047 s 4900K <--readlines (read as ascii)&nbsp; &nbsp; &nbsp; &nbsp;0.032 s 5050k&nbsp; &nbsp;正如@jfs所指出的那样,cElementTree它与Python捆绑在一起:Python 2 :&nbsp;from xml.etree import cElementTree as ElementTree.Python 3 :(&nbsp;from xml.etree import ElementTree自动使用加速C版本)。
随时随地看视频慕课网APP
我要回答