在我的xml文件中,我有这样的节点:
<waitingJobs idList="J03ac2db8 J03ac2fb0"/>
我知道如何使用.findall
搜索属性,但现在看来我需要使用正则表达式,因为I can't just use
root.findall('./[@attrib='value']')
我必须使用
root.findall('./[@attrib='*value*']')
问题
xml.etree
吗?lxml
?答案 0 :(得分:1)
遗憾的是,contains()
内置库不支持starts-with()
和xml.etree.ElementTree
等内容。您可以手动检查属性,查找所有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))