python - 基于同一元素中的条件属性打印属性值(XML Python)
问题描述
我有一个这样的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 = "abs_axis_11" && name = "" :打印输出 = 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
解决方案
我不得不对下面的示例采取一些自由,因为您提供的数据和代码不是一个完整的工作示例(为了将来参考,请尝试按照这些说明进行操作)。
假设:
- 您正在使用该
xml.etree.ElementTree
模块 - 您提供的 XML 片段是您正在解析的整个消息的子集
基于这些假设,我整理了以下内容:
#!/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
(iebutton
) 的父元素,然后向下导航到它的子元素event
推荐阅读
- c - 在c中使用标志?
- android - 用户登录时如何保护非消耗性应用内购买
- mysql - MySQL - 存储过程错误操作数应包含 1 列
- r - 具有多个条件的 IF 语句始终为真(嵌套在 while 循环中)
- python - 将 url_for 分配给变量并将其用作 render_template 中的参数,不起作用
- c# - 如何使用 C# 在 firebase 和 unity 之间引入和保存数据?
- mysql - MySql 连接字符串本地主机
- php - 有没有办法在 PHP 中每个月后增加一个数字
- c - 如何在 C 中的 for 循环中分配给变量?
- swift - Swift:无法以编程方式编辑自定义表格单元格的属性