| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 | 
							- #!/usr/bin/python -u
 
- # $Id: xslt.py 8353 2009-03-17 16:57:50Z mzjn $
 
- import sys
 
- import libxml2
 
- import libxslt
 
- from docbook import adjustColumnWidths
 
- # Check the arguments
 
- usage = "Usage: %s xmlfile.xml xslfile.xsl [outputfile] [param1=val [param2=val]...]" % sys.argv[0]
 
- xmlfile = None
 
- xslfile = None
 
- outfile = "-"
 
- 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+1
 
- except IndexError:
 
-     pass
 
- # ======================================================================
 
- # Memory debug specific
 
- # libxml2.debugMemory(1)
 
- # Setup environment
 
- libxml2.lineNumbersDefault(1)
 
- libxml2.substituteEntitiesDefault(1)
 
- libxslt.registerExtModuleFunction("adjustColumnWidths",
 
-                                   "http://nwalsh.com/xslt/ext/xsltproc/python/Table",
 
-                                   adjustColumnWidths)
 
- # Initialize and run
 
- styledoc = libxml2.parseFile(xslfile)
 
- style = libxslt.parseStylesheetDoc(styledoc)
 
- doc = libxml2.parseFile(xmlfile)
 
- result = style.applyStylesheet(doc, params)
 
- # Save the result
 
- if outfile:
 
-     style.saveResultToFilename(outfile, result, 0)
 
- else:
 
-     print result
 
- # Free things up
 
- style.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()
 
 
  |