如何解决xml 到 csv 的转换:'NoneType' 对象没有属性 'text'' - ElementTree
我正在尝试学习如何将 xml 转换为 csv 格式并查找了一些教程。我正在执行以下操作,但出现错误:'NoneType' 对象没有属性 'text''
所以部分 XML 文件如下(它实际上更大,但为了示例我缩小了它):
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
-<ns2:export xmlns:ns2="http://zakupki.gov.ru/oos/export/1" xmlns="http://zakupki.gov.ru/oos/types/1">
-<ns2:fcsNotificationZK schemeVersion="1.0">
<id>27778</id>
<purchaseNumber>0373100113714000006</purchaseNumber>
<docPublishDate>2014-01-24T18:40:51.599+04:00</docPublishDate>
然后我正在编写以下代码来获取标签和标签信息:
import csv
import xml.etree.cElementTree as ET
tree = ET.parse("xml_notification_example.xml")
root = tree.getroot()
xml_data_to_csv = open('out.csv','w')
list_head = []
csv_writer = csv.writer(xml_data_to_csv)
count = 0
for element in root:
list_nodes = []
if count == 0:
root.findall('id')
list_head.append('id')
root.findall('purchaseNumber')
list_head.append('purchaseNumber')
root.findall('docPublishDate')
list_head.append('docPublishDate')
csv_writer.writerow(list_head)
count = +1
iden = element.find('id').text
list_nodes.append(iden)
purchaseNumber = element.find('purchaseNumber').text
list_nodes.append(purchaseNumber)
docPublishDate = element.find('docPublishDate').text
list_nodes.append(docPublishDate)
csv_writer.writerow(list_nodes)
xml_data_to_csv.close()
我犯了一个错误:
---> 19 iden = element.find('id').text
20 list_nodes.append(iden)
21
AttributeError: 'NoneType' 对象没有属性 'text'
能否请你告诉我这里有什么问题,即使是直观的?
解决方法
xml 包含一个命名空间 xmlns="http://zakupki.gov.ru/oos/types/1"
。因此,这需要在 find()
中引用。
尝试:
element.find('{http://zakupki.gov.ru/oos/types/1}id').text
输出:
'27778'
硬编码命名空间是凌乱和丑陋的。要使其动态化,请参阅 @Rik Poggi
和 @Mark Ransom
的组合答案:
Python: ElementTree,get the namespace string of an Element
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。