Python: 'NoneType' 对象没有属性 'text', XML 正在解析
Python: 'NoneType' object has no attribute 'text', XML Parsing
我正在尝试使用 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,,
如有任何建议,我们将不胜感激。有点坚持这个。
以下似乎可行。注意代码使用的命名空间:{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
我正在尝试使用 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,,
如有任何建议,我们将不胜感激。有点坚持这个。
以下似乎可行。注意代码使用的命名空间:{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