| 
									
										
										
										
											2000-10-16 15:27:05 +00:00
										 |  |  | """
 | 
					
						
							|  |  |  | A simple demo that reads in an XML document and spits out an equivalent, | 
					
						
							|  |  |  | but not necessarily identical, document. | 
					
						
							|  |  |  | """
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-11 15:56:06 +00:00
										 |  |  | import sys | 
					
						
							| 
									
										
										
										
											2000-10-16 15:27:05 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | from xml.sax import saxutils, handler, make_parser | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # --- The ContentHandler | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class ContentGenerator(handler.ContentHandler): | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-11 15:56:06 +00:00
										 |  |  |     def __init__(self, out=sys.stdout): | 
					
						
							| 
									
										
										
										
											2000-10-16 15:27:05 +00:00
										 |  |  |         handler.ContentHandler.__init__(self) | 
					
						
							|  |  |  |         self._out = out | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # ContentHandler methods | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-16 15:27:05 +00:00
										 |  |  |     def startDocument(self): | 
					
						
							|  |  |  |         self._out.write('<?xml version="1.0" encoding="iso-8859-1"?>\n') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def startElement(self, name, attrs): | 
					
						
							|  |  |  |         self._out.write('<' + name) | 
					
						
							| 
									
										
										
										
											2007-08-06 21:07:53 +00:00
										 |  |  |         for (name, value) in attrs.items(): | 
					
						
							| 
									
										
										
										
											2000-10-16 15:27:05 +00:00
										 |  |  |             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) | 
					
						
							| 
									
										
										
										
											2004-07-18 06:16:08 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-10-16 15:27:05 +00:00
										 |  |  |     def processingInstruction(self, target, data): | 
					
						
							|  |  |  |         self._out.write('<?%s %s?>' % (target, data)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # --- The main program | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-10-11 15:56:06 +00:00
										 |  |  | if __name__ == '__main__': | 
					
						
							|  |  |  |     parser = make_parser() | 
					
						
							|  |  |  |     parser.setContentHandler(ContentGenerator()) | 
					
						
							|  |  |  |     parser.parse(sys.argv[1]) |