不可逆な毎日ブログ

2度と過ごすことのない毎日をつらつらと・・・

XMLを扱う

404 Not Found

NewsMLというフォーマットを扱うために、検索してみると、Java, Perl にはライブラリが
あるようだ。
Syndication-NewsML-0.10
今回は、Python でやりたかったが、なさそうだったので、自分で作成することに。

Using Non-Standard Encodings in cElementTree
WebFaction - Coming soon: Another fine website hosted by WebFaction
19.7. xml.dom.minidom — Lightweight DOM implementation — Python v2.7.3 documentation
xml.dom.minidom を用いた XML の取り扱い
PythonでElementTreeを使ってXMLを処理する方法 - Sticker@Something

これらのサイトを参考に作成してみた。とはいっても、まだ、触りだけ。
ライブラリ、どこかにないかな・・・。

import codecs
import xml.etree.cElementTree as ET

tree = None
# http://effbot.org/zone/celementtree-encoding.htm
def codec_escape_ET_parser(file, encoding):
  f = codecs.open(file, "r", encoding)
  p = ET.XMLParser(encoding="utf-8")
  while 1:
      s = f.read(65536)
      if not s:
          break
      p.feed(s.encode("utf-8"))
  return ET.ElementTree(p.close())

tree = codec_escape_ET_parser("example.xml","Shift_JIS")

"""
記事のみ
"""
print tree.find("/NewsItem/NewsComponent/NewsLines/HeadLine").text
print tree.find("/NewsItem/NewsComponent/NewsLines/DateLine").text
print tree.find("/NewsItem/NewsComponent/NewsLines/CreditLine").text
print tree.find("/NewsItem/NewsComponent/NewsLines/CopyrightLine").text
print tree.find("/NewsItem/NewsManagement/Status").get("FormalName")

やっつけでここまでできるなんて便利だ・・・。