我想使用Python(2.7.5)ElementTree通过多个搜索条件从xml文件中提取一些元素。 xml看起来像:
<src name="BdsBoot.c">
<fn name="XXXXX" fn_cov="0" fn_total="1" cd_cov="0" cd_total="4">
<probe line="113" kind="condition" event="full"/>
<probe line="122" column="10" kind="condition" event="none" />
<probe line="124" column="9" kind="condition" event="full" />
</fn>
</src>
我想要探测元素,其中kind =“condition”和event =“full”
我试过了
root.findall(".//probe[@kind='condition' and @event='full']") —— error
root.findall(".//probe[@kind='condition'] and .//probe[@event='full']") —— nothing
我阅读了简单的介绍here,似乎elementtree现在不支持和运算符?
有没有办法实现这个目标?
答案 0 :(得分:3)
使用这个:
root.findall('.//probe[@kind="condition"][@event="full"]')
演示:
>>> s
'<src name="BdsBoot.c">\n <fn name="XXXXX" fn_cov="0" fn_total="1" cd_cov="0" cd_total="4">\n <probe line="113" kind="condition" event="full"/>\n <probe line="122" column="10" kind="condition" event="none" />\n <probe line="124" column="9" kind="condition" event="full" />\n </fn>\n </src>'
>>> root = ET.fromstring(s)
>>> root.findall('.//probe[@kind="condition"]')
[<Element 'probe' at 0x7f8a5146ce10>, <Element 'probe' at 0x7f8a5146ce50>, <Element 'probe' at 0x7f8a5146ce90>]
>>> root.findall('.//probe[@kind="condition"][@event="full"]')
[<Element 'probe' at 0x7f8a5146ce10>, <Element 'probe' at 0x7f8a5146ce90>]