[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