その時々

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

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

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>

sax4.py

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

import xml.sax, xml.sax.saxutils

base = xml.sax.saxutils.XMLGenerator
class SampleHandler4J(base):
    def startElement(self, tag, attrs):
        if tag != u'cars':
            base.startElement(self, tag, attrs)
    def endElement(self, tag):
        if tag != u'cars':
            base.endElement(self, tag)

file = open('resultS.xml', 'w')
xml.sax.parse('SampleS.xml', SampleHandler4J(file, 'utf-8'))

実行結果

$ cat resultS.xml
<?xml version="1.0" encoding="utf-8"?>

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

car要素以下のみ抽出しました。
今回はXMLGeneratorというクラスを使用しています。