我在从包含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
答案 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)
然后,deviceId
是attribute。您应该能够在元素的attrib字典中找到它。假设其余代码正确无误,则看起来像这样:
for DeviceIdentity in levels:
data_1 = int(DeviceIdentity.attrib['deviceId'])
print(data_1)
(在以后的问题中,将示例XML包含为文本会有所帮助,并且比“根本没有输出”更具体)