class XMLWriter(WriterBase): def start(self): self.writer = SimpleXMLWriter(self.stream) if self.wrapper: self.writer.start(self.wrapper) def end(self): if self.wrapper: self.writer.end() def item(self, item): if self.item_wrapper: self.writer.start(self.item_wrapper) self._item(item) if self.item_wrapper: self.writer.end(self.item_wrapper) def _item(self, item): if isinstance(item, dict): for key, value in item.items(): if key and value: if isinstance(value, (list, tuple)): for subvalue in value: self.writer.start(key) self._item(subvalue) self.writer.end(key) elif isinstance(value, dict): self.writer.start(key) self._item(value) self.writer.end(key) else: self.writer.start(key) self._item(unicode(value)) self.writer.end(key) else: self.writer.data(item) def flush(self): self.writer.flush()