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