2011年11月 Archives

XML はめんどくさい

| No Comments | No TrackBacks

Python で XML を扱うときのお話し。わりとはまったので備忘録をかねて。

Python 2.5 以降であれば XML を扱うのに便利なモジュール ElementTree が内蔵されています。で、これを使って XML を読み込もうと思ったのですが…なぜか期待した通りに動作しない。具体的には findall で何もヒットしない。

で、しばらく悩んでもわからないので iterator で全出力をしてみたら…

from xml.etree import ElementTree
d=ElementTree.parse(open(filename,'rb'))
for i in d.getroot():
  print i.tag

以下のように出力されました。

{http://URL}Header
{http://URL}Body

最初見た瞬間なんじゃこりゃ⁉と叫んだのはわりと内緒です。

で、しばらく悩んで、いろんな人に相談した結果…URL の中身は xmlns の値(ネームスペース)で、どうやら XML というのはそういうものらしい。とのこと。

とはいえ、これじゃ若干めんどくさいのでいったん読み込んで、xmlns の中身を削除して、ElementTree はデータを引数として渡すことは出来ないっぽいので、cStringIO で…というわりと面倒な方法で対処しました。

import re, cStringIO
from xml.etree import ElementTree
xmlns_re = re.compile(r'^(.*?xmlns=")(.*?)(".*)$', re.I|re.S)
fp=open(filename,'rb')
data=fp.read()
fp.close()
data=xmlns_re.sub(r'\1\3', data)
fp=cStringIO.StringIO(data)
d=ElementTree.parse(fp)
fp.close()

もう少しうまいやり方がありそうだけど…XML はめんどくさいな(^^ゞ

三銃士見てきました。まぁ、ネタバレしない程度の感想としては、

can't の発音は「かんと」

いや、なんかそれだけが異様に耳に残っていて…後、ミラ・ジョヴォヴィッチは峰不二子です。絶対に。

映画としてはそこそこ楽しめました。期待していた通りでしたし。雰囲気としてはバイオハザードかな~監督同じだし。

ただ、いろいろと楽しげなシーンが全部 CM で流れてしまっていたのは残念かな。この辺、映画 CM の作り方って昔から変わらないよね。やめた方がいいと思うんだけどなぁ。

あと、今回数年ぶりぐらいに川崎のチネチッタに行ってみました。昔はかなり行ったんだけど、横浜の映画館が予約出来るようになってから行っていなかったんだよね。今回はちょっと川崎に用事があったのでそのついでに、という感じでウェブ予約してみました。

行ってみたら、結構綺麗になっていてびっくり。前はこのビルのあたりじゃなかったっけ…と、ちょっと迷子になったりしましたけど。あと、発券する機械が微妙に壊れていて、しかも壊れているのに気づかなくて困ったけど。

しかし、今現在ほとんどの映画館がウェブで席まで予約出来るようになっているんだけど、横浜の相鉄ムービルはいつまで昔のスタイルを続けるんだろう…今検索してみたら、ウェブページないんだ……って、相鉄ムービルはなくなっていて、ムービルっていう映画館になっていたのか(^^ゞ