@@ -151,6 +151,7 @@ def reset(self):
151151 raise NotImplementedError ("This method must be implemented!" )
152152
153153# ===== LOCATOR =====
154+
154155class Locator :
155156 """Interface for associating a SAX event with a document
156157 location. A locator object will return valid results only during
@@ -173,11 +174,15 @@ def getSystemId(self):
173174 "Return the system identifier for the current event."
174175 return None
175176
176- # --- AttributesImpl
177+ # ===== ATTRIBUTESIMPL =====
178+
177179class AttributesImpl :
178- def __init__ (self , attrs , rawnames ):
180+
181+ def __init__ (self , attrs ):
182+ """Non-NS-aware implementation.
183+
184+ attrs should be of the form {name : value}."""
179185 self ._attrs = attrs
180- self ._rawnames = rawnames
181186
182187 def getLength (self ):
183188 return len (self ._attrs )
@@ -189,16 +194,23 @@ def getValue(self, name):
189194 return self ._attrs [name ]
190195
191196 def getValueByQName (self , name ):
192- return self ._attrs [self . _rawnames [ name ] ]
197+ return self ._attrs [name ]
193198
194199 def getNameByQName (self , name ):
195- return self ._rawnames [name ]
196-
200+ if not self ._attrs .has_key (name ):
201+ raise KeyError
202+ return name
203+
204+ def getQNameByName (self , name ):
205+ if not self ._attrs .has_key (name ):
206+ raise KeyError
207+ return name
208+
197209 def getNames (self ):
198210 return self ._attrs .keys ()
199211
200212 def getQNames (self ):
201- return self ._rawnames .keys ()
213+ return self ._attrs .keys ()
202214
203215 def __len__ (self ):
204216 return len (self ._attrs )
@@ -216,20 +228,54 @@ def get(self, name, alternative=None):
216228 return self ._attrs .get (name , alternative )
217229
218230 def copy (self ):
219- return self .__class__ (self ._attrs , self . _rawnames )
231+ return self .__class__ (self ._attrs )
220232
221233 def items (self ):
222234 return self ._attrs .items ()
223235
224236 def values (self ):
225237 return self ._attrs .values ()
226238
239+ # ===== ATTRIBUTESNSIMPL =====
240+
241+ class AttributesNSImpl (AttributesImpl ):
242+
243+ def __init__ (self , attrs , qnames ):
244+ """NS-aware implementation.
245+
246+ attrs should be of the form {(ns_uri, lname): value, ...}.
247+ qnames of the form {(ns_uri, lname): qname, ...}."""
248+ self ._attrs = attrs
249+ self ._qnames = qnames
250+
251+ def getValueByQName (self , name ):
252+ for (nsname , qname ) in self ._qnames .items ():
253+ if qname == name :
254+ return self ._attrs [nsname ]
255+
256+ raise KeyError
257+
258+ def getNameByQName (self , name ):
259+ for (nsname , qname ) in self ._qnames .items ():
260+ if qname == name :
261+ return nsname
262+
263+ raise KeyError
264+
265+ def getQNameByName (self , name ):
266+ return self ._qnames [name ]
267+
268+ def getQNames (self ):
269+ return self ._qnames .values ()
270+
271+ def copy (self ):
272+ return self .__class__ (self ._attrs , self ._qnames )
273+
227274
228275def _test ():
229276 XMLReader ()
230277 IncrementalParser ()
231278 Locator ()
232- AttributesImpl ()
233279
234280if __name__ == "__main__" :
235281 _test ()
0 commit comments