mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	Bug fix to namespace handling in XMLGenerator (now adds declarations).
Bug fixes to XMLFilterBase (wrong ignorableWhitespace signature and did not inherit set*Handler methods from XMLReader.)
This commit is contained in:
		
							parent
							
								
									9a580c440c
								
							
						
					
					
						commit
						fc643c339d
					
				
					 1 changed files with 13 additions and 5 deletions
				
			
		|  | @ -4,7 +4,7 @@ | |||
| """ | ||||
| 
 | ||||
| import handler | ||||
| 
 | ||||
| import xmlreader | ||||
| 
 | ||||
| def escape(data, entities={}): | ||||
|     """Escape &, <, and > in a string of data. | ||||
|  | @ -31,6 +31,7 @@ def __init__(self, out=None, encoding="iso-8859-1"): | |||
|         self._out = out | ||||
|         self._ns_contexts = [{}] # contains uri -> prefix dicts | ||||
|         self._current_context = self._ns_contexts[-1] | ||||
|         self._undeclared_ns_maps = [] | ||||
|         self._encoding = encoding | ||||
| 
 | ||||
|     # ContentHandler methods | ||||
|  | @ -42,9 +43,11 @@ def startDocument(self): | |||
|     def startPrefixMapping(self, prefix, uri): | ||||
|         self._ns_contexts.append(self._current_context.copy()) | ||||
|         self._current_context[uri] = prefix | ||||
|         self._undeclared_ns_maps.append((prefix, uri)) | ||||
| 
 | ||||
|     def endPrefixMapping(self, prefix): | ||||
|         del self._current_context[-1] | ||||
|         self._current_context = self._ns_contexts[-1] | ||||
|         del self._ns_contexts[-1] | ||||
| 
 | ||||
|     def startElement(self, name, attrs): | ||||
|         self._out.write('<' + name) | ||||
|  | @ -58,6 +61,11 @@ def endElement(self, name): | |||
|     def startElementNS(self, name, qname, attrs): | ||||
|         name = self._current_context[name[0]] + ":" + name[1] | ||||
|         self._out.write('<' + name) | ||||
| 
 | ||||
|         for pair in self._undeclared_ns_maps: | ||||
|             self._out.write(' xmlns:%s="%s"' % pair) | ||||
|         self._undeclared_ns_maps = [] | ||||
|          | ||||
|         for (name, value) in attrs.items(): | ||||
|             name = self._current_context[name[0]] + ":" + name[1] | ||||
|             self._out.write(' %s="%s"' % (name, escape(value))) | ||||
|  | @ -77,7 +85,7 @@ def processingInstruction(self, target, data): | |||
|         self._out.write('<?%s %s?>' % (target, data)) | ||||
| 
 | ||||
| 
 | ||||
| class XMLFilterBase: | ||||
| class XMLFilterBase(xmlreader.XMLReader): | ||||
|     """This class is designed to sit between an XMLReader and the | ||||
|     client application's event handlers.  By default, it does nothing | ||||
|     but pass requests up to the reader and events on to the handlers | ||||
|  | @ -128,8 +136,8 @@ def endElementNS(self, name, qname): | |||
|     def characters(self, content): | ||||
|         self._cont_handler.characters(content) | ||||
| 
 | ||||
|     def ignorableWhitespace(self, chars, start, end): | ||||
|         self._cont_handler.ignorableWhitespace(chars, start, end) | ||||
|     def ignorableWhitespace(self, chars): | ||||
|         self._cont_handler.ignorableWhitespace(chars) | ||||
| 
 | ||||
|     def processingInstruction(self, target, data): | ||||
|         self._cont_handler.processingInstruction(target, data) | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Lars Gustäbel
						Lars Gustäbel