我正在使用xml.etree.ElementTree解析XML file。我想找到基于name属性的元素。

fnd = root.findall("./player[@name='Pqp239']")


但是,这只会找到名称的完全匹配。您将如何查找其名称包含名称一部分的元素?所以会是这样的

fnd = root.findall("./player[@name='rob']")


会找到所有名称包含rob的元素,如下所示:

Rob
Robert
chifforobe

最佳答案

您可以使用contains() function,但这仅在您切换到lxml.etree而不是仅部分/有限XPath支持的xml.etree.ElementTree时才有效:

import lxml.etree as ET

tree = ET.parse("input.xml")
root = tree.getroot()

root.xpath("./player[contains(@name, 'rob')]")


但是请注意,要使部分匹配不区分大小写,您需要另外应用translate() function


case insensitive xpath contains() possible?

09-10 05:09