| """ | |
| A simple demo that reads in an XML document and spits out an equivalent, | |
| but not necessarily identical, document. | |
| """ | |
| import sys | |
| from xml.sax import saxutils, handler, make_parser | |
| # --- The ContentHandler | |
| class ContentGenerator(handler.ContentHandler): | |
| def __init__(self, out=sys.stdout): | |
| handler.ContentHandler.__init__(self) | |
| self._out = out | |
| # ContentHandler methods | |
| def startDocument(self): | |
| self._out.write('<?xml version="1.0" encoding="iso-8859-1"?>\n') | |
| def startElement(self, name, attrs): | |
| self._out.write('<' + name) | |
| for (name, value) in attrs.items(): | |
| self._out.write(' %s="%s"' % (name, saxutils.escape(value))) | |
| self._out.write('>') | |
| def endElement(self, name): | |
| self._out.write('</%s>' % name) | |
| def characters(self, content): | |
| self._out.write(saxutils.escape(content)) | |
| def ignorableWhitespace(self, content): | |
| self._out.write(content) | |
| def processingInstruction(self, target, data): | |
| self._out.write('<?%s %s?>' % (target, data)) | |
| # --- The main program | |
| if __name__ == '__main__': | |
| parser = make_parser() | |
| parser.setContentHandler(ContentGenerator()) | |
| parser.parse(sys.argv[1]) |