如何在列表中找到具有属性的元素?

2024-04-23 16:03:04 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在python上使用lxml找到具有不同属性的元素?你知道吗

例如

<Form>
    <Subform ind="0">
        <Check ind="0">0</Check>
        <Check ind="1">1</Check>
        <Check ind="2">2</Check>
        <Check ind="3">3</Check>
    </Subform>
</Form>

要检索我的支票:

tree.findall("./Form/Subform/Check")

要获得第一个:

tree.findall("./Form/Subform/Check[@ind='0']")

但我想做的是

tree.findall("./Form/Subform/Check[@ind='0' or @ind='1']")

仅检索第一个和第二个(或第一个和最后一个)

如何使用lxml实现这一点?你知道吗


Tags: orformtree元素属性checklxmlind
2条回答

tree.findall("./Form/Subform/Check[@ind='0' or @ind='1']")

表达式是有效的,这将在lxmlxpath()方法中工作。如果要使其“可伸缩”,可以动态构造表达式:

values = ["0", "1"]
condition = " or ".join("@ind = '%s'" % value for value in values)
print(root.xpath("//Subform/Check[%s]" % condition))

这个表达式是正确的,但是您需要使用xpath()方法,该方法提供完整的xpath1.0支持。findall()只支持有限的XPath子集,正如xml.etree.ElementTree所做的那样:

tree.xpath("/Form/Subform/Check[@ind='0' or @ind='1']")

相关问题 更多 >