その時々

その時々で違うんです。特に決まっていないんです。

PythonでXMLを触ってみる10 saxね

今回はテキストデータを拾ってみます。

SampleS.xml

<?xml version="1.0" encoding="UTF-8"?>
<cars>
  <car country="日本">
    <name>乗用車</name>
    <price>150</price>
    <img file="car1.jpg" />
  </car>
  <car country="日本">
    <name>トラック</name>
    <price>500</price>
    <img file="car2.jpg" />
  </car>
  <car country="アメリカ">
    <name>オープンカー</name>
    <price>200</price>
    <img file="car3.jpg" />
  </car>
</cars>

sax3.py

#!/usr/bin/python
# -*- coding: utf-8 -*-

import xml.sax

class SampleHandler3J(xml.sax.ContentHandler):
    def startDocument(self):
        print 'XML文書が開始しました。'
    def endDocument(self):
        print 'XML文書が終了しました。'
    def startElement(self, tag, attrs):
        print '%rが開始しました。' % tag
    def endElement(self, tag):
        print '%rが終了しました。' % tag
    def characters(self, data):
        if len(data.strip()) != 0:
            print data

p = xml.sax.make_parser()
p.setContentHandler(SampleHandler3J())
p.parse('SampleS.xml')

実行結果

$ python sax3.py
XML文書が開始しました。
u'cars'が開始しました。
u'car'が開始しました。
u'name'が開始しました。
乗用車
u'name'が終了しました。
u'price'が開始しました。
150
u'price'が終了しました。
u'img'が開始しました。
u'img'が終了しました。
u'car'が終了しました。
u'car'が開始しました。
u'name'が開始しました。
トラック
u'name'が終了しました。
u'price'が開始しました。
500
u'price'が終了しました。
u'img'が開始しました。
u'img'が終了しました。
u'car'が終了しました。
u'car'が開始しました。
u'name'が開始しました。
オープンカー
u'name'が終了しました。
u'price'が開始しました。
200
u'price'が終了しました。
u'img'が開始しました。
u'img'が終了しました。
u'car'が終了しました。
u'cars'が終了しました。
XML文書が終了しました。

SAXでも空文字を考慮する必要があるみたいです。