在我的 xml 文件中,我有这样的节点:
<waitingJobs idList="J03ac2db8 J03ac2fb0"/>
我知道如何使用 .findall
来搜索属性,但现在看来我需要使用正则表达式,因为 I can't just use
root.findall('./[@attrib='value']')
我必须使用
root.findall('./[@attrib='*value*']')
问题
- 这可以通过
xml.etree
实现吗? - 如何使用
lxml
执行此操作?
最佳答案
不幸的是,xml.etree.ElementTree
内置库不支持contains()
和starts-with()
之类的东西。您可以手动检查该属性,查找所有 waitingJobs
并使用 .attrib
获取 idList 值:
import xml.etree.ElementTree as ET
data = """<jobs>
<waitingJobs idList="J03ac2db8 J03ac2fb0"/>
</jobs>
"""
root = ET.fromstring(data)
value = 'J03ac2db8'
print([elm for elm in root.findall(".//waitingJobs[@idList]")
if value in elm.attrib["idList"]])
通过lxml.etree
,您可以使用xpath()
方法和contains()
函数:
import lxml.etree as ET
data = """<jobs>
<waitingJobs idList="J03ac2db8 J03ac2fb0"/>
</jobs>
"""
root = ET.fromstring(data)
value = 'J03ac2db8'
print(root.xpath(".//waitingJobs[contains(@idList, '%s')]" % value))
关于python xml - 使用正则表达式搜索属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38810711/