[XML-SIG] unicode data

chris davis chris@rpgarchive.com
Fri, 03 Nov 2000 10:48:39 -0600


Thanks for the help.  In an earlier email you wrote:

"You'd need to use a driver that produces byte strings. I believe both
sgmlop and xmlproc will do at the moment (at least until they are
fixed to produce Unicode)."

Does that mean this solution will only work until those drivers are
updated?

Thanks
chris

"Martin v. Loewis" wrote:
> 
> > I have an wxPython application that stores configuration info and meta
> > data in xml.  I hold this xml data in a dom for easy use.  I pass a lot
> > of data to wxPython functions calls that require string types.  Now all
> > those calls (a lot) raise a TypError.
> 
> I see. It would be possible to wrap all data with str(), but that is
> probably not an acceptable solution; in the long run, wxPython should
> be taught to accept Unicode objects (one primary reason to introduce
> Unicode is to display it to the user, after all).
> 
> > How do I use a different driver? This is how I get my dom:
> >
> > from xml.dom.ext.reader import Sax
> > doc = Sax.FromXml(s,ownerDocument)
> 
> Good question, with no satisfying answer, at the moment. I envision an
> API where you say
> 
> from xml.dom.saxexts import make_parser
> p = parser.make_parser("xml.sax.drivers.drv_sgmlop") # that works today
> doc = Sax.FromXml(s,ownerDocument,parser=p)
> 
> The last part doesn't work, yet - please try the patch I've attached
> below; I'd like to ship that with 0.6.2 unless I get an update of 4DOM
> that solves this in a different way.
> 
> With 0.6.1, your only option is to set the environment variable
> PY_SAX_PARSER to xml.sax.drivers.drv_sgmlop.
> 
> Regards,
> Martin
> 
> Index: Sax.py
> ===================================================================
> RCS file: /cvsroot/pyxml/xml/xml/dom/ext/reader/Sax.py,v
> retrieving revision 1.4
> diff -u -r1.4 Sax.py
> --- Sax.py      2000/10/02 17:57:44     1.4
> +++ Sax.py      2000/11/03 09:25:17
> @@ -116,9 +116,10 @@
>                    validate=0,
>                    keepAllWs=0,
>                    catName=None,
> -                  saxHandlerClass=XmlDomGenerator):
> +                  saxHandlerClass=XmlDomGenerator,
> +                  parser = None):
>      #Create an XML DOM from SAX events
> -    parser = (validate and saxexts.XMLValParserFactory.make_parser()) or  saxexts.XMLParserFactory.make_parser()
> +    parser = parser or (validate and saxexts.XMLValParserFactory.make_parser()) or  saxexts.XMLParserFactory.make_parser()
>      if catName:
>          #set up the catalog, if there is one
>          from xml.parsers.xmlproc import catalog
> @@ -137,9 +138,10 @@
>              validate=0,
>              keepAllWs=0,
>              catName=None,
> -            saxHandlerClass=XmlDomGenerator):
> +            saxHandlerClass=XmlDomGenerator,
> +            parser=None):
>      fp = cStringIO.StringIO(str)
> -    rv = FromXmlStream(fp,ownerDocument,validate,keepAllWs,catName,saxHandlerClass)
> +    rv = FromXmlStream(fp,ownerDocument,validate,keepAllWs,catName,saxHandlerClass,parser)
>      return rv
> 
>  def FromXmlFile(fileName,
> @@ -147,9 +149,10 @@
>                  validate=0,
>                  keepAllWs=0,
>                  catName=None,
> -                saxHandlerClass=XmlDomGenerator):
> +                saxHandlerClass=XmlDomGenerator,
> +                parser=None):
>      fp = open(fileName, 'r')
> -    rv = FromXmlStream(fp,ownerDocument,validate,keepAllWs,catName,saxHandlerClass)
> +    rv = FromXmlStream(fp,ownerDocument,validate,keepAllWs,catName,saxHandlerClass,parser)
>      fp.close()
>      return rv
> 
> @@ -158,10 +161,11 @@
>                 validate=0,
>                 keepAllWs=0,
>                 catName=None,
> -               saxHandlerClass=XmlDomGenerator):
> +               saxHandlerClass=XmlDomGenerator,
> +               parser=None):
>      import urllib
>      fp = urllib.urlopen(url)
> -    rv = FromXmlStream(fp,ownerDocument,validate,keepAllWs,catName,saxHandlerClass)
> +    rv = FromXmlStream(fp,ownerDocument,validate,keepAllWs,catName,saxHandlerClass,parser)
>      fp.close()
>      return rv
>