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