libxml2dom

tests/performance.py

335:ffaf027ed471
2008-08-28 Paul Boddie Improved error reporting, adding messages for non-validation errors.
     1 #!/usr/bin/env python     2      3 """     4 A performance test using libxml2dom.macrolib, libxml2dom and minidom.     5 This module must be compiled using libxml2macro.py and run only as a compiled     6 module - ie. as performance.pyc.     7 """     8      9 import xml.dom    10     11 def find_root(d):    12     root = None    13     for n in d.childNodes:    14         if n.nodeType == xml.dom.Node.ELEMENT_NODE:    15             root = n    16             break    17     return root    18     19 import libxml2macro as x2_    20     21 def find_root_libxml2macro(x2_d):    22     x2_root = None    23     for x2_n in x2_d.childNodes:    24         if x2_n.nodeType == xml.dom.Node.ELEMENT_NODE:    25             x2_root = x2_n    26             break    27     return x2_root    28     29 def test_import_libxml2macro(x2_d):    30     x2_d2 = createDocument("nsD", "newdoc", None)    31     x2_imported = x2_d.importNode(find_root_libxml2macro(x2_d), 1)    32     x2_d2.replaceChild(x2_imported, find_root_libxml2macro(x2_d2))    33     return x2_d, x2_d2    34     35 def test_import_minidom(d):    36     d2 = xml.dom.minidom.getDOMImplementation().createDocument("nsD", "newdoc", None)    37     imported = d2.importNode(find_root(d), 1)    38     d2.replaceChild(imported, find_root(d2))    39     return d, d2    40     41 def test_import_libxml2dom(d):    42     d2 = libxml2dom.createDocument("nsD", "newdoc", None)    43     imported = d2.importNode(find_root(d), 1)    44     d2.replaceChild(imported, find_root(d2))    45     return d, d2    46     47 if __name__ == "__main__":    48     import sys    49     import time    50     51     if len(sys.argv) < 3:    52         print "Please specify a filename (of a fairly large XML document) and the testing mode."    53         print "There are quite a few large files in the libxml2 distribution."    54         print "For the testing mode, choose one of libxml2macro, minidom, libxml2dom."    55         sys.exit(1)    56     57     if sys.argv[2] == "libxml2macro":    58     59         x2_d = parseFile(sys.argv[1])    60     61         t = time.time()    62         x2_d1, x2_d2 = test_import_libxml2macro(x2_d)    63         toFile(x2_d2, "/tmp/xxx_libxml2macro.xml")    64         print "Time", time.time() - t, "seconds"    65     66     elif sys.argv[2] == "minidom":    67         import xml.dom.minidom    68         d = xml.dom.minidom.parse(sys.argv[1])    69     70         t = time.time()    71         d1, d2 = test_import_minidom(d)    72         open("/tmp/xxx_minidom.xml", "wb").write(d2.toxml("utf-8"))    73         print "Time", time.time() - t, "seconds"    74     75     elif sys.argv[2] == "libxml2dom":    76         import libxml2dom    77         d = libxml2dom.parse(sys.argv[1])    78     79         t = time.time()    80         d1, d2 = test_import_libxml2dom(d)    81         libxml2dom.toStream(d2, open("/tmp/xxx_libxml2dom.xml", "wb"))    82         print "Time", time.time() - t, "seconds"    83     84 # vim: tabstop=4 expandtab shiftwidth=4