我有一个像这样的xml文件:
<button_map>
<button id="abs_axis_11" label="">
<device type="keyboard" id="0" name=""/>
<event type="button" id="g"/>
</button>
<button id="abs_axis_16" label="Melee">
<device type="keyboard" id="0" name=""/>
<event type="button" id="v"/>
/button>
<button id="abs_axis_11" label="">
<device type="joystick" id="0" name="Controller"/>
<event type="button" id="9"/>
</button>
</button_map>
条件是按钮id =&#34; abs_axis_11&#34; &安培;&安培; name =&#34;&#34; :print output = g,但我找不到在结果输出中删除id = 9的方法(使用Python)
我的工作代码:
for event in root.findall('/button_map/button[@id="abs_axis_11"][device[@name=""]]/event'):
button = event.get('id')
print button
答案 0 :(得分:0)
我不得不对下面的示例采取一些自由,因为您提供的数据和代码不是一个完整的工作示例(供将来参考,try following these instructions)。
假设:
xml.etree.ElementTree
模块基于这些假设,我将以下内容放在一起:
#!/usr/bin/python
import xml.etree.ElementTree as ET
XML_DATA = """
<root>
<button_map>
<button id="abs_axis_11" label="">
<device type="keyboard" id="0" name=""/>
<event type="button" id="g"/>
</button>
<button id="abs_axis_16" label="Melee">
<device type="keyboard" id="0" name=""/>
<event type="button" id="v"/>
</button>
<button id="abs_axis_11" label="">
<device type="joystick" id="0" name="Controller"/>
<event type="button" id="9"/>
</button>
</button_map>
</root>
"""
tree = ET.ElementTree(ET.fromstring(XML_DATA))
for event in tree.findall(
'./button_map/button[@id="abs_axis_11"]/device[@name=""]/../event'):
print "Result: %s" % (event)
print "Event ID: %s" % event.get('id')
此脚本的输出为:
$ python python-xml.py
Result: <Element 'event' at 0x7efd53f8c610>
Event ID: g
以下是关于XPath查询的一些指示:
device
是子元素,而不是button
的属性。因此我删除了
它来自括号(这对我造成invalid predicate
错误,
并将其指定为层次结构中的元素..
导航到device
的父元素
(即button
)然后直到它的子元素event