gpt4 book ai didi

如果第一个 XML 父标签缺少子标签,Python XPath 和 ElementTree 将不起作用

转载 作者:行者123 更新时间:2023-12-01 07:45:49 24 4
gpt4 key购买 nike

我目前正在使用 Python 通过 ElementTree 库和 XPath 将 XML 文件转换为 CSV 格式。如果第一个父级人员标签的所有子标签都存在(名字、姓氏和地址),我的代码将正常工作,但我收到一条错误消息

Child Index out of range

当第一个人缺少子标签时(仅存在名字和姓氏)。

我可以编写什么代码来绕过此错误消息?这是我第一次使用XPath,如何添加if语句?或者我应该使用其他东西?

这是我的 XML 文件的样子:

<?xml version="1.0" encoding="utf-8"?>
<Members>
<Person>
<FirstName>JANE</FirstName>
<LastName>DOE</LastName>
</Person>
<Person>
<FirstName>JOHN</FirstName>
<LastName>DOE</LastName>
<Address>
<Address1>123 Straw Street</Address1>
<Address2></Address2>
<City>Apple</City>
<State>Test</State>
<ZipCode>123456 </ZipCode>
</Address>
</Person>
</Members>

当前Python代码:

import  csv
import xml.etree.ElementTree as ET

tree = ET.parse("TestStack.xml")
root = tree.getroot()

xml_data_to_csv =open('OutputStack.csv','w')

Csv_writer=csv.writer(xml_data_to_csv)
list_head=[]

count=0
for element in root.findall('Person'):
person = []

#Get head by tag
if count == 0:
FirstName = element.find('FirstName').tag
list_head.append(FirstName)

LastName = element.find('LastName').tag
list_head.append(LastName)

Address = element[2].tag
list_head.append(Address)

Csv_writer.writerow(list_head)
count = count +1

#get child node
FirstName = element.find('FirstName').text
person.append(FirstName)

LastName = element.find('LastName').text
person.append(LastName)

person.append([e.text for e in element.findall('Address//')])

#Write List_nodes to csv
Csv_writer.writerow(person)
xml_data_to_csv.close()

最佳答案

我认为标题应该是预定义的。我怀疑您的 CSV 导入后端是否接受任何格式。

import  csv
import xml.etree.ElementTree as ET

tree = ET.parse("in.xml")
root = tree.getroot()

xml_data_to_csv =open('out.csv','w')

Csv_writer=csv.writer(xml_data_to_csv)
list_head=['FirstName', 'LastName', 'Address']
Csv_writer.writerow(list_head)

for element in root.findall('Person'):
person = []

#get child node
FirstName = element.find('FirstName').text
person.append(FirstName)

LastName = element.find('LastName').text
person.append(LastName)

person.append([e.text for e in element.findall('Address//')])

#Write List_nodes to csv
Csv_writer.writerow(person)
xml_data_to_csv.close()

否则,您可以处理异常或像这样检查存在多少元素

if len(element) > 2:
head_list.append(element[2])
continue

预初始化head_list = [None] * 3 #len(element),并在for循环期间收集标题(如显示)和人员,然后在最后写入所有内容。我不会推荐这条路线。

关于如果第一个 XML 父标签缺少子标签,Python XPath 和 ElementTree 将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56465480/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com