自前で状態を保存しなければならないので、入れ子が多いなど複雑なファイルのパースには向きそうにない。
import xml.sax, xml.sax.handler, pprint
class BookHandler(xml.sax.handler.ContentHandler):
def __init__(self):
self.inTitle = False
self.mapping = {}
def startElement(self, name, attributes):
if name == 'book':
self.buffer = ""
self.isbn = attributes["isbn"]
elif name == "title":
self.inTitle = True
def characters(self, data):
if self.inTitle:
self.buffer += data
def endElement(self, name):
if name == "title":
self.inTitle = False
self.mapping[self.isbn] = self.buffer
parser = xml.sax.make_parser()
handler = BookHandler()
parser.setContentHandler(handler)
parser.parse('books.xml')
pprint.pprint(handler.mapping)
print handler.mapping
0 件のコメント:
コメントを投稿