[XML-SIG] 0.5.1 and 0.6.2
Bastian Kleineidam
calvin@cs.uni-sb.de
Fri, 1 Dec 2000 01:16:48 +0100 (CET)
>Can anybody give a hint on how to correctly write applications
>that may need to work with both versions of python-xml?
Make a compatibility layer with try: except: statements.
I am using this:
#-----8<------
try:
try:
# xml interface (DOM-2, SAX-2) as found in PyXML 0.6.2
from xml.dom.ext.reader.Sax2 import Reader
def _get_dom(filename):
return Reader(validate=1).fromStream(open(filename))
except ImportError:
# xml interface (DOM-2, SAX-2) as found in PyXML 0.6.1
from xml.dom.ext.reader.Sax2 import FromXmlFile
def _get_dom(filename):
return FromXmlFile(filename, validate=1)
def get_dom(filename):
# change dir to find DTD file
import os
olddir = os.getcwd()
os.chdir(os.path.dirname(filename))
dom = _get_dom(filename)
os.chdir(olddir)
return dom
def get_attr(attrs, name):
if attrs.has_key(('', name)):
return attrs[('', name)]._get_value()
def get_dom_attrs(dom):
return dom.documentElement._get_attributes()
def get_node_attrs(node):
return node._get_attributes()
def get_node_name(node):
return node._get_nodeName()
def get_childnodes(node):
return node._get_childNodes()
def node_value(node):
from xml.dom.Node import Node
if node._get_nodeType() == Node.TEXT_NODE:
return node._get_nodeValue()
s = ""
for n in node._get_childNodes():
s = s + node_value(n)
return s
except ImportError:
# xml interface (DOM-1, SAX-1) as found in PyXML 0.5.x
from xml.sax import saxexts,saxutils
from xml.dom.sax_builder import SaxBuilder
_parser = saxexts.XMLValParserFactory.make_parser()
_parser.setErrorHandler(saxutils.ErrorPrinter())
def get_dom(filename):
_dom_builder = SaxBuilder()
_parser.setDocumentHandler(_dom_builder)
_parser.parse(filename)
_parser.reset()
return _dom_builder.document
def get_attr(attrs, name):
if attrs.has_key(name):
return attrs[name].get_value()
def get_dom_attrs(dom):
return dom.get_documentElement().get_attributes()
def get_node_attrs(node):
return node.get_attributes()
def get_node_name(node):
return node.get_name()
def get_childnodes(node):
return node.get_childNodes()
def node_value(node):
from xml.dom.core import TEXT_NODE
if node.get_nodeType() == TEXT_NODE:
return node.get_nodeValue()
s = ""
for n in node.get_childNodes():
s = s + node_value(n)
return s
def get_node_attr(node, name):
return get_attr(get_node_attrs(node), name)
#---8<----
Bastian