[XML-SIG] unicode data
Martin v. Loewis
martin@loewis.home.cs.tu-berlin.de
Fri, 3 Nov 2000 10:30:08 +0100
> 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