__doc__=""" Python classes to implement connection to DBXML """ from bsddb3.db import * from dbxml import * import libxml2, libxslt import time class BDBXMLDA: """A class to manage content in Berkeley DB XML databases.""" def __init__(self, fn): self._dbfilename = fn self.container = XmlContainer(None, fn) self.container.open(None, DB_CREATE) def getID(self, id): """Grab the database document with an id, return libxml2 doc.""" xpath = "/*[@id='%s']" % id result = self.container.queryWithXPath(None, xpath) #if result.size() > 1: # raise "DuplicateIDs", "Too many ids for " + id str = result.next().asString(None) doc = libxml2.parseDoc(str) return doc def transform(self, doc, xform): """Given a doc, transform it and return a string""" xslfile = open("test.xsl").read() xslDoc = libxslt.parseStylesheetDoc(libxml2.parseDoc(xslfile)) result = xslDoc.applyStylesheet(doc, None) resultXML = xslDoc.saveResultToString(result) xslDoc.freeStylesheet() return resultXML def test(self): """Perform a simple test of the container""" book_content = r"Knowledge." document = XmlDocument() document.setContent(book_content) id = self.container.putDocument(None, document) document = self.container.getDocument(None, id) s = document.getContent() print id, "=", s results = self.container.queryWithXPath(None, "/*[@id]") print "There are", results.size(), "database documents with ids." start = time.time() doc = self.getID("1") print self.transform(doc, None) print "Elapsed:", time.time() - start self.container.close() def main(): b = BDBXMLDA("/tmp/foo") b.test() if __name__ == "__main__": main()