使用Python从XML中提取值

使用Python从XML中提取值,python,xml,xml-parsing,Python,Xml,Xml Parsing,我从另一个xml文件中提取了以下xml <notifications> <notification name="ccmSmtp" oid="1.3.6.1" status="current"> <objects> <object module="callhome" name="ccmSmtp" /> </objects> <description>This is a descripti

我从另一个xml文件中提取了以下xml

<notifications>
  <notification name="ccmSmtp" oid="1.3.6.1" status="current">
    <objects>
      <object module="callhome" name="ccmSmtp" />
    </objects>
    <description>This is a description</description>
  </notification>
  <notification name="ccmAlertGroup" oid="1.3.6.1" status="current">
    <objects>
      <object module="callhome" name="callHome" />
    </objects>
    <description>This is a description</description>
  </notification>
  <notification name="ccmAlert" oid="1.3.6.1" status="current">
    <objects>
      <object module="callhome" name="callHome" />
    </objects>
    <description>This is a description</description>
  </notification>
  <notification name="ccmSmtp" oid="1.3.6.1" status="current">
    <objects></objects>
    <description>This is a description</description>
  </notification>
</notifications>
这段python代码给出了我上面给出的xml的输出

我尝试了以下方法来获取属性值

notificationlist = xmldoc.getElementsByTagName('notification')
print notificationlist[0].toxml()
notification1 = notificationlist[0]
key = notification1.attributes.keys()
使用它,我只能得到第一组通知的值


如何获取属性的所有值并将其存储在单独的变量中?

假设“notificationlist=xmldoc.getElementsByTagName('notification')”是从xmldoc生成的,这是您列出的输出值,您应该有四个元素。因此,只关注notificationlist[0]中的元素0将只处理第一个元素。下面是一些对samlpe xmldoc进行了修改的代码,通过在aaa、bbb、ccc、ddd前面加上前缀,使描述有所不同。您可以通过替换打印语句来捕获数据---


如果要获取
通知列表
中每个项目的属性,可以执行以下操作:

attrslist = [dict(node.attributes.items()) for node in notificationlist]
print attrslist[0]
# => {u'status': u'current', u'oid': u'1.3.6.1', u'name': u'ccmSmtp'}
print attrslist[0]['status']
# => current
从这里开始,只需迭代这个新列表,并按名称为
notificationlist
中的每个
元素提取属性

for n in attrslist:
   status = n['status']
   oid = n['oid']
   name = n['name']
   # blah

我不熟悉minidom,但我猜你只得到了第一个,因为你只要求通知列表中的第一个条目。为什么不建立一个foreach呢<代码>用于通知列表中的项目:…
attrslist = [dict(node.attributes.items()) for node in notificationlist]
print attrslist[0]
# => {u'status': u'current', u'oid': u'1.3.6.1', u'name': u'ccmSmtp'}
print attrslist[0]['status']
# => current
for n in attrslist:
   status = n['status']
   oid = n['oid']
   name = n['name']
   # blah