[XML-SIG] Attribute namespace bug

Juergen Hermann Juergen Hermann" <jh@web.de
Tue, 30 Oct 2001 22:28:44 +0100


On Tue, 30 Oct 2001 14:02:02 -0700, Uche Ogbuji wrote:

>--- xml/sax/saxutils.py	2001/09/27 21:42:28	1.23
>+++ xml/sax/saxutils.py	2001/10/30 21:00:45
>@@ -155,6 +155,8 @@
>     def _outputwrapper(stream,encoding):
>         return stream
> 
>+GENERATED_PREFIX =3D "genprefix%s"
>+
> class XMLGenerator(handler.ContentHandler):

=3D=3D=3D> use class attribute, less namespace pollution, 
use self.GENERATED_PREFIX below!

class XMLGenerator(handler.ContentHandler):
  	GENERATED_PREFIX =3D "genprefix%d"

Also, do people realize where "genprefix" comes from when 
it "suddenly pops up"?! Thus, maybe:

  	GENERATED_PREFIX =3D "xml.sax.saxutils.prefix%d"

(it _is_ long, but it should occur in rare cases only anyway)

>             elif self._current_context[name[0]] is None:
>                 # default namespace
>-                name =3D name[1]
>+                #If an attribute has a nsuri but not a prefix, we must=

>+                #create a prefix and add a nsdecl
>+                prefix =3D GENERATED_PREFIX % self._generated_prefix_c=
tr
>+                self._generated_prefix_ctr =3D self._generated_prefix_=
ctr + 1
>+                name =3D prefix + ':' + name[1]
>+                self._out.write(' xmlns:%s=3D%s' % (prefix, name[0]))

This looks like a bug to me, fix:

                  self._out.write(' xmlns:%s=3D%s' % (prefix, quoteattr(=
name[0])))

>+                self._current_context[name[0]] =3D prefix
>             else:
>                 name =3D self._current_context[name[0]] + ":" + name[1=
]
>             self._out.write(' %s=3D%s' % (name, quoteattr(value)))


Ciao, J=FCrgen