| 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])
|
|---|