我有一個問題搞清楚,爲什麼我收到以下Python的XML AttributeError的:「NoneType」對象有沒有屬性「文本」
AttributeError: 'NoneType' object has no attribute 'text'
我試圖導入使用Python 2.7的XML文件中的錯誤。以下是我的XML文件的樣子。
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE dblp SYSTEM "file.dtd">
<top>
<blue key="2343998978">
<animal>lion</animal>
<animal>seal</animal>
<state>california</state>
<zoo>san diego</zoo>
<year>2015</year>
</blue>
<red key="9383893838739">
<elem_a>jennifer</elem_a>
<elem_a>paul</elem_a>
<elem_a>carl</elem_a>
<elem_b>kansas</elem_b>
<elem_d>australia</elem_d>
</red>
<yellow key="83963277272">
<car>chevy</car>
<car>dodge</car>
<cap>baseball</cap>
<cat>tabby</cat>
</yellow>
<red key="9383893838739">
<elem_a>greg</elem_a>
<elem_a>chris</elem_a>
<elem_a>john</elem_a>
<elem_b>arkansas</elem_b>
<elem_c>ice cream</elem_c>
</red>
<yellow key="84748346734">
<car>toyota</car>
<car>honda</car>
<cap>football</cap>
</yellow>
</top>
我是新來的Python,但創建了下面的腳本來導入上面的XML文件,那就是當我收到上述錯誤。以下是我的代碼。
import xml.etree.ElementTree as ET
myfile = 'C:/Users/user1/Desktop/file.xml'
tree = ET.parse(myfile)
root = tree.getroot()
for x in root.findall('blue'):
animal = x.find('animal').text
key1 = x.attrib['key']
state = x.find('state').text
zoo = x.find('zoo').text
year = x.find('year').text
print animal, key1, state, zoo, year
for y in root.findall('red'):
elem_a = y.find('elem_a').text
key2 = y.attrib['key']
elem_b = y.find('elem_b').text
elem_c = y.find('elem_c').text
elem_d = y.find('elem_d').text
print elem_a, key2, elem_b, elem_c, elem_d
for z in root.findall('yellow'):
car = z.find('car').text
key3 = z.attrib['key']
cap = z.find('cap').text
cat = z.find('cat').text
print car, key3, cap, cat
在XML文件中有三種主要元素類型:藍色,紅色和黃色。對於某些父元素存在特定子元素的問題之一不適用於其他元素。例如,在上面的示例XML文件中,一個「黃色」元素具有三個子元素,包括「car」,「cat」和「cap」,但不是每個「yellow」元素都具有全部三個子元素。在下面的XML中,第一個「yellow」元素具有「cat」子節點,第二個「yellow」元素沒有「cat」子元素,但在完整的XML文件中,「yellow」元素可以具有任何一個,兩個或三個「貓」,「帽子」和「汽車」子元素。我知道這是導致錯誤,但我不知道如何解決它。有沒有人有任何想法或提示如何解決這個錯誤?謝謝。
在您嘗試訪問找到的元素的文本,這些線中的一條,沒有元素被發現在所有。你可以在錯誤的回溯中看到錯誤的確切路線。您在該行中搜索的元素不存在。 – lucasnadalutti
這行可能會導致錯誤:'elem_c = y.find('elem_c').text' - 'red'標籤中沒有'elem_c'。 – Jan
此外,線'elem_d = y.find('elem_d').text'和'cat = z.find('cat').text'會給你同樣的錯誤。 – Marcs