| Viewing file:  sax.py (1.73 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
from __future__ import absolute_import, division, unicode_literals
 from xml.sax.xmlreader import AttributesNSImpl
 
 from ..constants import adjustForeignAttributes, unadjustForeignAttributes
 
 prefix_mapping = {}
 for prefix, localName, namespace in adjustForeignAttributes.values():
 if prefix is not None:
 prefix_mapping[prefix] = namespace
 
 
 def to_sax(walker, handler):
 """Call SAX-like content handler based on treewalker walker
 
 :arg walker: the treewalker to use to walk the tree to convert it
 
 :arg handler: SAX handler to use
 
 """
 handler.startDocument()
 for prefix, namespace in prefix_mapping.items():
 handler.startPrefixMapping(prefix, namespace)
 
 for token in walker:
 type = token["type"]
 if type == "Doctype":
 continue
 elif type in ("StartTag", "EmptyTag"):
 attrs = AttributesNSImpl(token["data"],
 unadjustForeignAttributes)
 handler.startElementNS((token["namespace"], token["name"]),
 token["name"],
 attrs)
 if type == "EmptyTag":
 handler.endElementNS((token["namespace"], token["name"]),
 token["name"])
 elif type == "EndTag":
 handler.endElementNS((token["namespace"], token["name"]),
 token["name"])
 elif type in ("Characters", "SpaceCharacters"):
 handler.characters(token["data"])
 elif type == "Comment":
 pass
 else:
 assert False, "Unknown token type"
 
 for prefix, namespace in prefix_mapping.items():
 handler.endPrefixMapping(prefix)
 handler.endDocument()
 
 |