所以假设这是一个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
答案 0 :(得分:1)
我相信xml.dom.minidom
没有任何此类功能可以直接为您提供所需的数据 - search
。并且它也不支持xpath。
您应该尝试使用支持xpath的xml解析库,例如xml.etree.ElementTree
或lxml
。
>>> 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')
的结果来实现,就像您现在应该做的那样。