如何使用 BeautifulSoup 之类的 lxml 搜索 etree

How to search etree using lxml like BeautifulSoup

假设我有以下 xml:

<?xml version="1.0" encoding="utf-8"?>
<FeedType xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="https://foo.com/bar" xsi:schemaLocation="https://foo.com/bar https://foo.com/bar/arr.xsd" value="Type">
    <ElementName value='Type'>
        <DataIWant>
            stuff
        </DataIWant>
        <DataIWant>
            other stuff
        </DataIWant>
    </ElementName>
</FeedType>

我想获取 ElementName 标签中的所有内容。

在Beautifulsoup中,可以调用

soup.find_all('ElementName')

这将 return 一棵以 ElementName 为根的树。

我如何在 lxml 中执行此操作?

lxml有个findall method,可以用

但是,XML 文档包含一个默认命名空间,因此搜索普通 ElementName 标记不会找到它 - 您需要指定命名空间:

root.findall('foobar:ElementName', namespaces = {'foobar': 'https://foo.com/bar'})

如果您不想指定命名空间,您可以使用 XPath 查询,它将忽略命名空间,只查找 "local name" 为 ElementName:

的元素
root.xpath("//*[local-name() = 'ElementName']")