python xml - 使用正则表达式搜索属性

时间:2016-08-07 03:51:55

标签: python xml xpath

在我的xml文件中,我有这样的节点:

<waitingJobs idList="J03ac2db8 J03ac2fb0"/>

我知道如何使用.findall搜索属性,但现在看来我需要使用正则表达式,因为I can't just use

root.findall('./[@attrib='value']')

我必须使用

root.findall('./[@attrib='*value*']')

问题

  1. 这可以通过xml.etree吗?
  2. 如何使用lxml
  3. 执行此操作

1 个答案:

答案 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))