Python:“非类型”对象没有属性“文本”,XML解析

2024-10-01 15:40:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用Spirit获取XML文件,解析数据,并将其输出为csv文件。我觉得我忽略了一些简单的事情。我有一个错误:

Traceback (most recent call last):
  File "xml2csv.py", line 12, in <module>
    name = i.find("spirit:name").text
AttributeError: 'NoneType' object has no attribute 'text'

示例XML文件:

<?xml version="1.0" encoding="utf-8"?>
<spirit:component xmlns="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5"
  xsi:schemaLocation="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5 http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5/memoryMap.xsd">
>
<spirit:generic>
<spirit:name>GENERIC_NAME</spirit:name>
<spirit:description>GENERIC_DESCRIPTION</spirit:description>
</spirit:generic>
</spirit:component>

我的Python代码:

# Importing the required libraries
import xml.etree.ElementTree as Xet
import pandas as pd
  
cols = ["name", "description"]
rows = []
  
# Parsing the XML file
xmlparse = Xet.parse('xml_sample.xml')
root = xmlparse.getroot()
for i in root:
    name = i.find("spirit:name").text
    description = i.find("spirit:description").text
  
    rows.append({"spirit:name": name,
                 "spirit:description": description})
  
df = pd.DataFrame(rows, columns=cols)
  
# Writing dataframe to csv
df.to_csv('output.csv')

我怀疑我的错误在我的“.text”中,这是基于我正在阅读的一些其他线程。但是,删除此项会导致我的.csv文件不显示任何数据

CSV:

,name,description
0,,

如有任何建议,将不胜感激。有点困在这上面了


Tags: 文件csvtextnameorghttpwwwdescription
1条回答
网友
1楼 · 发布于 2024-10-01 15:40:48

下面的方法似乎有效。注意代码使用的名称空间:{http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5}

import xml.etree.ElementTree as ET
import pandas as pd

xml = '''<?xml version="1.0" encoding="utf-8"?>
<spirit:component xmlns="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:spirit="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5"
  xsi:schemaLocation="http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5 http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5/memoryMap.xsd">
>
<spirit:generic>
<spirit:name>GENERIC_NAME</spirit:name>
<spirit:description>GENERIC_DESCRIPTION</spirit:description>
</spirit:generic>
</spirit:component>'''

cols = ["name", "description"]
rows = []
root = ET.fromstring(xml)
names = [x.text for x in root.findall('.//{http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5}name')]
descriptions = [x.text for x in root.findall('.//{http://www.spiritconsortium.org/XMLSchema/SPIRIT/1.5}description')]
for entry in zip(names, descriptions):
    rows.append({'name': entry[0], 'description': entry[1]})

df = pd.DataFrame(rows, columns=cols)
print(df)

输出

           name          description
0  GENERIC_NAME  GENERIC_DESCRIPTION

相关问题 更多 >

    热门问题