| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | #!/usr/bin/python -u# $Id: xslt.py 8353 2009-03-17 16:57:50Z mzjn $import sysimport libxml2import libxsltfrom docbook import adjustColumnWidths# Check the argumentsusage = "Usage: %s xmlfile.xml xslfile.xsl [outputfile] [param1=val [param2=val]...]" % sys.argv[0]xmlfile = Nonexslfile = Noneoutfile = "-"params  = {}try:    xmlfile = sys.argv[1]    xslfile = sys.argv[2]except IndexError:    print usage    sys.exit(1)def quote(astring):    if astring.find("'") < 0:        return "'" + astring + "'"    else:        return '"' + astring + '"'try:    outfile = sys.argv[3]    if outfile.find("=") > 0:        name, value = outfile.split("=", 2)        params[name] = quote(value)        outfile = None    count = 4    while (sys.argv[count]):        try:            name, value = sys.argv[count].split("=", 2)            if params.has_key(name):                print "Warning: '%s' re-specified; replacing value" % name            params[name] = quote(value)        except ValueError:            print "Invalid parameter specification: '" + sys.argv[count] + "'"            print usage            sys.exit(1)        count = count+1except IndexError:    pass# ======================================================================# Memory debug specific# libxml2.debugMemory(1)# Setup environmentlibxml2.lineNumbersDefault(1)libxml2.substituteEntitiesDefault(1)libxslt.registerExtModuleFunction("adjustColumnWidths",                                  "http://nwalsh.com/xslt/ext/xsltproc/python/Table",                                  adjustColumnWidths)# Initialize and runstyledoc = libxml2.parseFile(xslfile)style = libxslt.parseStylesheetDoc(styledoc)doc = libxml2.parseFile(xmlfile)result = style.applyStylesheet(doc, params)# Save the resultif outfile:    style.saveResultToFilename(outfile, result, 0)else:    print result# Free things upstyle.freeStylesheet()doc.freeDoc()result.freeDoc()# Memory debug specific#libxslt.cleanup()#if libxml2.debugMemory(1) != 0:#    print "Memory leak %d bytes" % (libxml2.debugMemory(1))#    libxml2.dumpMemory()
 |