使用lxml查找与一组标记名称匹配的元素

时间:2016-10-27 16:32:44

标签: python xml xpath lxml

如何使用lxml查找与一组标记名称匹配的元素?

假设我想在以下XML树中找到所有ac元素:

<foo>
    <a/>
    <b/>
    <c/>
</foo>

我该怎么做?我想做类似foo.findall('./(a|b)')的事情,但这不起作用。

2 个答案:

答案 0 :(得分:2)

您使用union运算符处于正确的轨道,但正确的语法应如下所示:

foo.xpath('*[self::a|self::b]')

或简单地说:

foo.xpath('a|c')

请注意xpath()优先于findall(),因为前者提供对XPath 1.0的完全支持,而后者仅支持XPath 1.0表达式的有限子集。

答案 1 :(得分:0)

您可以将{regex与xpath()一起使用。见Regular expressions in XPath

html = '''<foo>
    <a/>
    <b/>
    <c/>
</foo>'''

import lxml.html

data = lxml.html.fromstring(html)

result = data.xpath('./*[re:match(local-name(), "a|b")]', namespaces={'re': "http://exslt.org/regular-expressions"})

print(result)
#print(list(x.tag for x in result))
相关问题