症状
typeを見るとDOM Text Nodeになってるインスタンスをdataプロパティを使ってデータを取り出そうとすると「NoneTypeだよ」的なエラーが出る。
状況
mixi API用のコードの中に出てくる。更新情報を取得する関数の中でのコードで起きるエラー。レスポンスのXMLはこんな感じ。
<?xml version="1.0" encoding="UTF-8"> <feed xmlns="http://www.w3.org/2005/Atom"> <entry> <category scheme="http://mixi.jp/atom/ns#updates" label="マイミクシィ最新動画" term="video"/> <id>tag:mixi.jp,2007:updates-video-XXXXX-XXXXXXX</id> <link rel="alternate" href="http://video.mixi.jp/view_video.pl?owner_id=XXXXXX&video_id=XXXXXXX" type="text/html"/> <title>ほげほげ</title> <summary/> <content><a href="http://video.mixi.jp/view_video.pl?owner_id=XXXXX&video_id=XXXXXX">どうが</a> (ぱいそん)</content> <author> <name>ぱいそん</name> <uri>http://mixi.jp/show_friend.pl?id=XXXXX</uri> </author> <updated>2008-12-08T03:00:03Z</updated> </entry> <entry> <...> </entry> </feed>
ここで、author要素の子要素のuri要素を取得しようとして
for n in doc.getElementsByTagName('entry'): uri = n.getElementsByTagName('author').item(0).\ getElementsByTagName('uri').item(0).childNodes.item(0).data
とすると
AttributeError: 'NoneType' object has no attribute 'data'
とエラーが出る。だけどこのdataプロパティを消去した状態、つまり
for n in doc.getElementsByTagName('entry'): uri = n.getElementsByTagName('author').item(0).\ getElementsByTagName('uri').item(0).childNodes.item(0)
とすると表示は
<DOM Text Node "http://mix...">
となるわけです。あれ?Text Nodeじゃないですか!これはどうして?追調査が必要。