1 """ 2 A simple demo that reads in an XML document and spits out an equivalent, 3 but not necessarily identical, document. 4 """ 5 6 import sys 7 8 from xml.sax import saxutils, handler, make_parser 9 10 # --- The ContentHandler 11 12 class ContentGenerator(handler.ContentHandler): 13 14 def __init__(self, out=sys.stdout): 15 handler.ContentHandler.__init__(self) 16 self._out = out 17 18 # ContentHandler methods 19 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) 25 for (name, value) in attrs.items(): 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) 37 38 def processingInstruction(self, target, data): 39 self._out.write('<?%s %s?>' % (target, data)) 40 41 # --- The main program 42 43 if __name__ == '__main__': 44 parser = make_parser() 45 parser.setContentHandler(ContentGenerator()) 46 parser.parse(sys.argv[1]) 47