自前で状態を保存しなければならないので、入れ子が多いなど複雑なファイルのパースには向きそうにない。
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 件のコメント:
コメントを投稿