Fred Drake | ac5f748 | 2000-10-16 15:27:05 +0000 | [diff] [blame] | 1 | """ |
| 2 | A simple demo that reads in an XML document and spits out an equivalent, |
| 3 | but not necessarily identical, document. |
| 4 | """ |
| 5 | |
Georg Brandl | 22fff43 | 2009-10-27 20:19:02 +0000 | [diff] [blame] | 6 | import sys |
Fred Drake | ac5f748 | 2000-10-16 15:27:05 +0000 | [diff] [blame] | 7 | |
| 8 | from xml.sax import saxutils, handler, make_parser |
| 9 | |
| 10 | # --- The ContentHandler |
| 11 | |
| 12 | class ContentGenerator(handler.ContentHandler): |
| 13 | |
Georg Brandl | 22fff43 | 2009-10-27 20:19:02 +0000 | [diff] [blame] | 14 | def __init__(self, out=sys.stdout): |
Fred Drake | ac5f748 | 2000-10-16 15:27:05 +0000 | [diff] [blame] | 15 | handler.ContentHandler.__init__(self) |
| 16 | self._out = out |
| 17 | |
| 18 | # ContentHandler methods |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame] | 19 | |
Fred Drake | ac5f748 | 2000-10-16 15:27:05 +0000 | [diff] [blame] | 20 | def startDocument(self): |
| 21 | self._out.write('<?xml version="1.0" encoding="iso-8859-1"?>\n') |
| 22 | |
| 23 | def startElement(self, name, attrs): |
| 24 | self._out.write('<' + name) |
Skip Montanaro | 1e8ce58 | 2007-08-06 21:07:53 +0000 | [diff] [blame] | 25 | for (name, value) in attrs.items(): |
Fred Drake | ac5f748 | 2000-10-16 15:27:05 +0000 | [diff] [blame] | 26 | self._out.write(' %s="%s"' % (name, saxutils.escape(value))) |
| 27 | self._out.write('>') |
| 28 | |
| 29 | def endElement(self, name): |
| 30 | self._out.write('</%s>' % name) |
| 31 | |
| 32 | def characters(self, content): |
| 33 | self._out.write(saxutils.escape(content)) |
| 34 | |
| 35 | def ignorableWhitespace(self, content): |
| 36 | self._out.write(content) |
Tim Peters | 182b5ac | 2004-07-18 06:16:08 +0000 | [diff] [blame] | 37 | |
Fred Drake | ac5f748 | 2000-10-16 15:27:05 +0000 | [diff] [blame] | 38 | def processingInstruction(self, target, data): |
| 39 | self._out.write('<?%s %s?>' % (target, data)) |
| 40 | |
| 41 | # --- The main program |
| 42 | |
Georg Brandl | 22fff43 | 2009-10-27 20:19:02 +0000 | [diff] [blame] | 43 | if __name__ == '__main__': |
| 44 | parser = make_parser() |
| 45 | parser.setContentHandler(ContentGenerator()) |
| 46 | parser.parse(sys.argv[1]) |