【发布时间】:2018-02-13 18:19:17
【问题描述】:
出于验证目的:如何逐个节点(甚至是子节点)搜索整个 XML 节点,如下所示:
XML 文件:
<Summary>
<Hardware_Info>
<HardwareType>FlashDrive</HardwareType>
<ManufacturerDetail>
<ManufacturerCompany>Company1</ManufacturerCompany>
<ManufacturerDate>2017-07-20T12:26:04-04:00</ManufacturerDate>
<ModelCode>4BR6282</ModelCode>
</ManufacturerDetail>
<ActivationDate>2017-07-20T12:26:04-04:00</ActivationDate>
</Hardware_Info>
<DeviceConnectionInfo>
<Device>
<Index>0</Index>
<Name>Laptop1</Name>
<Status>Installed</Status>
</Device>
<Device>
<Index>1</Index>
<Name>Laptop2</Name>
<Status>Installed</Status>
</Device>
</DeviceConnectionInfo>
</Summary>
并根据特定表的匹配列搜索值。举例来说,表格是这样的:
表格:
HardwareType ManufacturerCompany ManufacturerDate ActivationDate Device.Index Name
FlashDrive Company1 2017-07-20T12:26:04-04:00 2017-07-20T12:26:04-04:00 0 Laptop1
FlashDrive Company2 2017-07-20T12:26:04-04:00 2017-07-20T12:26:04-04:00 1 Laptop2
在这种情况下,我将有一个列列表:
HardwareType, ManufacturerCompany, ManufacturerDate, ActivationDate, Device.Index, Name
对于我的最终结果,我想打印表列名的值以及在 xml 中找到的表名的值。例如类似于原始表(假设验证很好):
输出结果:
HardwareType ManufacturerCompany ManufacturerDate ActivationDate Device.Index Name
FlashDrive Company1 2017-07-20T12:26:04-04:00 2017-07-20T12:26:04-04:00 0 Laptop1
FlashDrive Company2 2017-07-20T12:26:04-04:00 2017-07-20T12:26:04-04:00 1 Laptop2
当前实现:
例如,我可以获取表的列名列表,但是到目前为止,我的知识最好的实现方法是:
import xml.etree.ElementTree as ET
import csv
tree = ET.parse("/test.xml")
root = tree.getroot()
f = open('/test.csv', 'w')
csvwriter = csv.writer(f)
count = 0
head = ['ManufacturerCompany','ManufacturerDate',...]
csvwriter.writerow(head)
for time in root.findall('Summary'):
row = []
job_name = time.find('ManufacturerDetail').find('ManufacturerCompany').text
row.append(job_name)
job_name = time.find('ManufacturerDetail').find('ManufacturerDate').text
row.append(job_name)
csvwriter.writerow(row)
f.close()
但是,这个实现没有循环输出我想要的每个功能。任何有关实施的指导或建议都会很棒。
谢谢
【问题讨论】:
标签: python xml parsing elementtree