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

时间:2016-03-29 12:58:05

标签: python xpath lxml

如何在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做到这一点?

2 个答案:

答案 0 :(得分:1)

  

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

表达式有效,这将在lxml xpath()方法中有效。如果你想让它变得可扩展&#34;,你可以动态构建表达式

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

答案 1 :(得分:1)

该表达式是正确的,但您需要使用提供完整XPath 1.0支持的xpath()方法。 findall()仅支持xml.etree.ElementTree的有限XPath子集:

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