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 / nsdel.py < prev    next >
Encoding:
Python Source  |  2005-04-11  |  1.5 KB  |  63 lines

  1. #!/usr/bin/python -u
  2. #
  3. # this test exercise the XPath basic engine, parser, etc, and
  4. # allows to detect memory leaks
  5. #
  6. import sys
  7. import libxml2
  8.  
  9. instance="""<?xml version="1.0"?>
  10. <tag xmlns:foo='urn:foo' xmlns:bar='urn:bar' xmlns:baz='urn:baz' />"""
  11.  
  12. def namespaceDefs(node):
  13.     n = node.nsDefs()
  14.     while n:
  15.         yield n
  16.         n = n.next
  17.  
  18. def checkNamespaceDefs(node, count):
  19.     nsList = list(namespaceDefs(node))
  20.     #print nsList
  21.     if len(nsList) != count :
  22.         raise Exception, "Error: saw %d namespace declarations.  Expected %d" % (len(nsList), count)
  23.     
  24. # Memory debug specific
  25. libxml2.debugMemory(1)
  26.  
  27. # Remove single namespace
  28. doc = libxml2.parseDoc(instance)
  29. node = doc.getRootElement()
  30. checkNamespaceDefs(node, 3)
  31. ns = node.removeNsDef('urn:bar')
  32. checkNamespaceDefs(node, 2)
  33. ns.freeNsList()
  34. doc.freeDoc()
  35.  
  36. # Remove all namespaces
  37. doc = libxml2.parseDoc(instance)
  38. node = doc.getRootElement()
  39. checkNamespaceDefs(node, 3)
  40. ns = node.removeNsDef(None)
  41. checkNamespaceDefs(node, 0)
  42. ns.freeNsList()
  43. doc.freeDoc()
  44.  
  45. # Remove a namespace refered to by a child
  46. doc = libxml2.newDoc("1.0")
  47. root = doc.newChild(None, "root", None)
  48. namespace = root.newNs("http://example.com/sample", "s")
  49. child = root.newChild(namespace, "child", None)
  50. root.removeNsDef("http://example.com/sample")
  51. doc.reconciliateNs(root)
  52. namespace.freeNsList()
  53. doc.serialize() # This should not segfault
  54. doc.freeDoc()
  55.  
  56. # Memory debug specific
  57. libxml2.cleanupParser()
  58. if libxml2.debugMemory(1) == 0:
  59.     print "OK"
  60. else:
  61.     print "Memory leak %d bytes" % (libxml2.debugMemory(1))
  62.     libxml2.dumpMemory()
  63.