如何使用lxml从xml提取数据?

时间:2018-11-15 11:27:53

标签: python xml parsing lxml

我在从包含lxml的xml文件中提取数据时遇到问题。我尝试使用lxml库提取数据,但根本没有输出。

from lxml import etree 
tree = etree.parse("ifm-00028A-20170711-IODD1.1.xml")
root = tree.getroot()
levels = root.findall('DeviceIdentity', root.nsmap)
for DeviceIdentity in levels:
data_1 = int(DeviceIdentity.find('deviceId').text)
print(data_1)

[IODD] [1]

例如,我需要从vendorId和deviceId中获取值

感谢帮助!

xml文件的样本    https://i.stack.imgur.com/Ih4Tk.png

1 个答案:

答案 0 :(得分:0)

这里有两个错误。

首先,findall findall only searches the immediate descendants of an element if it is given a tag name。您可以使用XPath表达式进行更深入的搜索。因此您的findall应该是

levels = root.findall('.//DeviceIdentity', root.nsmap)

然后,deviceIdattribute。您应该能够在元素的attrib字典中找到它。假设其余代码正确无误,则看起来像这样:

for DeviceIdentity in levels:
    data_1 = int(DeviceIdentity.attrib['deviceId'])
    print(data_1)

(在以后的问题中,将示例XML包含为文本会有所帮助,并且比“根本没有输出”更具体)