mirror of https://github.com/python/cpython
47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
"""
|
|
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])
|