Pythonでのxml.etree.ElementTreeとxmlnsについてです。
Youtubeなどで提供されているXMLはxmlnsを使用していて、扱いに悩んでしまった。
例としてYoutubeの動画情報取得ではこんな感じになります。
以下URLで取得できるXMLの場合。
http://gdata.youtube.com/feeds/api/videos/動画ID
xmlnsはこのような形で複数定義された状態になります。
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:gd="http://schemas.google.com/g/2005" xmlns:yt="http://gdata.youtube.com/schemas/2007">
xmlns一個だけの定義であれば解説しているページも多いのですが、実際XML提供されているサービス(Youtubeなどなど)では複数定義がほとんどのようです。。。
で、実際に値を取得してみる。
タイトル名の取得はxmlnsを指定し、属性を指定すれば取得できる訳ですが。
thumbnail画像URLなどは、xmlnsの指定を2個並べる事で取得する形になる。
サンプルコード
from xml.etree.ElementTree import *
url = "http://gdata.youtube.com/feeds/api/videos/動画ID"
tree = parse(urllib2.urlopen(url))
elem = tree.getroot()
//タイトル取得
title = elem.findtext("{http://www.w3.org/2005/Atom}title")
//thumbnail画像URL取得
thumbnail_url = elem.find("{http://search.yahoo.com/mrss/}group/{http://search.yahoo.com/mrss/}thumbnail").get("url")