[2] | 1 | """
|
---|
| 2 | A simple demo that reads in an XML document and spits out an equivalent,
|
---|
| 3 | but not necessarily identical, document.
|
---|
| 4 | """
|
---|
| 5 |
|
---|
[391] | 6 | import sys
|
---|
[2] | 7 |
|
---|
| 8 | from xml.sax import saxutils, handler, make_parser
|
---|
| 9 |
|
---|
| 10 | # --- The ContentHandler
|
---|
| 11 |
|
---|
| 12 | class ContentGenerator(handler.ContentHandler):
|
---|
| 13 |
|
---|
[391] | 14 | def __init__(self, out=sys.stdout):
|
---|
[2] | 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 |
|
---|
[391] | 43 | if __name__ == '__main__':
|
---|
| 44 | parser = make_parser()
|
---|
| 45 | parser.setContentHandler(ContentGenerator())
|
---|
| 46 | parser.parse(sys.argv[1])
|
---|