[XML-SIG] 0.5.1 and 0.6.2
Martin v. Loewis
martin@loewis.home.cs.tu-berlin.de
Fri, 1 Dec 2000 00:47:39 +0100
> Well, I was using DOM (a file gets processed, then the tree gets
> traversed, needed information obtained, and the result file gets
> dumped).
In that case, it will be difficult to come up with code that works
identical for both versions. In PyXML 0.5, there was a single DOM
implementation; let's call it PyDOM. Instances of Document nodes where
created using a Builder instance.
In PyXML 0.6, there are two DOM implementations: minidom and 4DOM;
minidom is also provided in Python 2. A minidom instance is created
using xml.dom.minidom.parse[String]. A 4DOM instance is created using
xml.dom.ext.reader.Sax.FromXml{Stream|File|Url|}.
Once you have a Document, processing it should be identical between
all those DOM implementations - that is what the DOM standard provides.
Finally, generating back XML varies among implementations. minidom's
Node provides a toxml method; 4DOM offers xml.dom.ext.[Pretty]Print;
PyDOM had xml.dom.writer.XMLWriter and derived classes.
So if you need code that works with both versions, you probably need
to conditionalize, and unify interfaces for your needs:
try:
import xml.dom.sax_builder
import xml.dom.writer
import xml.sax.saxexts
domversion = "PyDOM"
except ImportError:
import xml.dom.ext.reader
domversion = "4DOM"
def build_from_string(str):
if domversion = "PyDOM":
builder = xml.dom.sax_builder.SaxBuilder()
parser = xml.sax.saxexts.make_parser()
parser.setDocumentHandler(builder)
io = StringIO(str)
parser.parseString(io)
return builder.doc
elif domversion = "4DOM":
return xml.dom.ext.reader.FromXmlString(str)
Likewise, you could wrap output generation.
Hope this helps,
Martin