首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python Elementtree按XPath过滤

Python Elementtree按XPath过滤
EN

Stack Overflow用户
提问于 2020-09-04 17:29:40
回答 2查看 125关注 0票数 1

假设我有一个这样的XML:

代码语言:javascript
复制
<root>
  <elements>
    <element> foo </element>
    <element is="false"> foo </element>
    <element is="false"> bli </element>
    <element is="false"> bla </element>
  </elements>
</root>

我该怎么做:

代码语言:javascript
复制
import xml.etree.ElementTree as ET

root = ET.fromstring(XmlFromAbove)
res_a  = root.findall("element[@is='false']")) ##<- This gives me all elements with the specific attribute
res_b  = root.findall("element[not@is='false']")) ##<- This would be nice to give me all elements without that specific attribute (`<element> foo </element>` in this case)

现在,我知道res_b不会工作,但我猜这是一个常见的问题,所以有人知道解决这个问题的办法是什么吗?

再指出一点(从评论中复制)

我肯定可以找到包含"foo“的元素,但我想知道的是,是否有一种方法可以找到不包含属性is="false”的元素。

EN

Stack Overflow用户

回答已采纳

发布于 2020-09-04 18:10:04

见下文

代码语言:javascript
复制
import xml.etree.ElementTree as ET

xml = '''<root>
  <elements>
    <element> foo </element>
    <element is="false"> foo </element>
    <element is="false"> bli </element>
    <element is="false"> bla </element>
    <element please="false"> no_is </element>
    <element is="true"> with_true_is </element>
  </elements>
</root>'''

root = ET.fromstring(xml)

no_is_lst = [e for e in root.findall('.//element') if 'is' not in e.attrib]
for e in no_is_lst:
    print(e.text)

输出

代码语言:javascript
复制
 foo 
 no_is 
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63738487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档