Python XML解析:返回特定的属性标记值

时间:2015-07-25 12:35:00

标签: python xml parsing attributes iterator

所以假设这是一个XML输出的片段,我只对名称=" app"感兴趣。下面突出显示的数据(即搜索):

      <s:key name="modifiable">1</s:key>
      <s:key name="sharing">global</s:key>
      **<s:key name="app">search</s:key>**
      <s:key name="can_write">1</s:key>
      <s:key name="ttl">600</s:key>

是否可以使用xml.dom.minidom方法返回该特定值而无需迭代?

我知道如何使用以下方法将上述内容保存到列表中:

keysList = xmlfile.getElementByTagName('s:key') 

然后遍历keysList并使用&#34; if&#34;匹配声明:

iter.attributes['name'].value == "app"

但是,我想知道是否存在一个能够提供我想要的信息的功能......就像

keysList.getAttribute(name="app").value

1 个答案:

答案 0 :(得分:1)

我相信xml.dom.minidom没有任何此类功能可以直接为您提供所需的数据 - search。并且它也不支持xpath。

您应该尝试使用支持xpath的xml解析库,例如xml.etree.ElementTreelxml

使用xml.etree.ElementTree -

的简单示例
>>> import xml.etree.ElementTree as ET
>>> s="""<root>      <key name="modifiable">1</key>
...       <key name="sharing">global</key>
...       <key name="app">search</key>
...       <key name="can_write">1</key>
...       <key name="ttl">600</key></root>"""
>>> root = ET.fromstring(s)
>>> root.find('.//key[@name="app"]').text
'search'

lxml -

In [1]: from lxml import etree

In [2]: s="""<root>      <key name="modifiable">1</key>
   ...:       <key name="sharing">global</key>
   ...:       <key name="app">search</key>
   ...:       <key name="can_write">1</key>
   ...:       <key name="ttl">600</key></root>"""

In [6]: root = etree.fromstring(s)

In [7]: elements = root.xpath('.//key[@name="app"]')

In [8]: elements[0].text
Out[8]: 'search'

对于xml.dom.minidom,您必须通过迭代getElementByTagName('s:key')的结果来实现,就像您现在应该做的那样。