home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / doc / python-libxml2 / examples / xpathext.py < prev    next >
Encoding:
Python Source  |  2004-02-23  |  1.1 KB  |  50 lines

  1. #!/usr/bin/python -u
  2. import sys
  3. import libxml2
  4.  
  5. # Memory debug specific
  6. libxml2.debugMemory(1)
  7.  
  8. def foo(ctx, x):
  9.     return x + 1
  10.  
  11. def bar(ctx, x):
  12.     return "%d" % (x + 2)
  13.  
  14. doc = libxml2.parseFile("tst.xml")
  15. ctxt = doc.xpathNewContext()
  16. res = ctxt.xpathEval("//*")
  17. if len(res) != 2:
  18.     print "xpath query: wrong node set size"
  19.     sys.exit(1)
  20. if res[0].name != "doc" or res[1].name != "foo":
  21.     print "xpath query: wrong node set value"
  22.     sys.exit(1)
  23.  
  24. libxml2.registerXPathFunction(ctxt._o, "foo", None, foo)
  25. libxml2.registerXPathFunction(ctxt._o, "bar", None, bar)
  26. i = 10000
  27. while i > 0:
  28.     res = ctxt.xpathEval("foo(1)")
  29.     if res != 2:
  30.         print "xpath extension failure"
  31.         sys.exit(1)
  32.     i = i - 1
  33. i = 10000
  34. while i > 0:
  35.     res = ctxt.xpathEval("bar(1)")
  36.     if res != "3":
  37.         print "xpath extension failure got %s expecting '3'"
  38.         sys.exit(1)
  39.     i = i - 1
  40. doc.freeDoc()
  41. ctxt.xpathFreeContext()
  42.  
  43. # Memory debug specific
  44. libxml2.cleanupParser()
  45. if libxml2.debugMemory(1) == 0:
  46.     print "OK"
  47. else:
  48.     print "Memory leak %d bytes" % (libxml2.debugMemory(1))
  49.     libxml2.dumpMemory()
  50.