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

标签 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 执行此操作?

最佳答案

不幸的是,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/

相关文章:

python - 如何更好地创建一个函数来通过 Django Rest 中的序列化器传递 JSON?

python - 如何将自定义指标的值从自定义回调附加到我需要在张量板中使用的 "logs"?

python - `tuple.__init__` 与元组子类中的 `super().__init__` 有什么不同?

android - 填充不适用于 Android

xml - XSLT:合并元素而不重复

python - 从 python3 运行 bash 命令

java - 在 Java 中使用 xpath 编辑 XML 文件中的常规节点

xml - XPath 等效于 current()

java - 使用 XPath 循环 XML 字符串 - Java

php - 使用 xPath 访问 simpleXML 的值