如何使用 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']")
假设我有以下 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']")