如何像BeautifulSoup一样使用lxml搜索etree



假设我有以下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')

这将返回一个以ElementName为根的树。

如何在lxml中执行此操作?

lxml有一个可以使用的findall方法。

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

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

如果不想指定名称空间,可以使用XPath查询,该查询将忽略名称空间,只查找"本地名称"为ElementName:的元素

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

最新更新