|
Lee Brown
administrator at leebrown.org
Sat Aug 5 14:45:25 EDT 2006
Greetings!
In addition to lxml, here are a few other xslt solutions for python (along
with my personal opinions of them):
Pyana:
A wrapper on Apache's Xalan processor. Simple API, reasonably fast, but no
support for xlst 2.0 or xinclude.
FourSuite:
An incredibly comprehensive suite of xml/xslt tools in 100% python - no
external dependencies. Full support for xinclude, xpath, xquery, yada,
yada, yada. Also has incredibly complicated (but thorough) documentation
and is rather slow. Probably way to slow for per-request xslt
transformations, but O.K. for a Content Management System operating
independently of the web server.
MSXML (Microsoft XML COM object library)
Can be called up from Python as a COM object using pywin32. Very fast, but
also very frustrating due to well-hidden (or non-existent) documentation.
Not available for non-windows platforms.
Misc. External Processes:
Of course, you can always call another process using Python's os.popen,
os.spawn, or sys.command functions. In that case, you can use almost any
xslt engine that has a command-line interface. Candidates include Apache's
Xerces/Xalan, libxml2/libxslt, Altova's XMLSpy run-time engine. Way too
slow for per-request processing, but that's more to do with OS overhead than
the libraries themselves.
I used to use Pyana with Mod Python and I liked it a lot until I ran up
against the need to do xinclude processing. Now I use lxml and I also like
it a lot, though I'm not really fond of the Element Tree API. (But then I'm
unusual in that regard.)
Just for grins and giggles, here is a code sample for performing xslt
transformations as an Apache output filter using Mod Python and lxml:
### xsltfilter.py ###
from mod_python import apache
from cStringIO import StringIO
import lxml.etree
xsltfile = open('c:/webdev/sites/crashtest/templates/template.xslt', 'rU')
styledoc = lxml.etree.parse(StringIO(xsltfile.read()))
transformer = lxml.etree.XSLT(styledoc)
xsltfile.close()
def outputfilter (filter):
streamlet = filter.read()
try:
streambuffer = filter.req.streambuffer
except AttributeError:
filter.req.streambuffer = StringIO()
streambuffer = filter.req.streambuffer
while streamlet:
streambuffer.write(streamlet)
streamlet = filter.read()
if streamlet is None:
doc = lxml.etree.parse(streambuffer)
doc.xinclude()
result = str(transformer(doc))
filter.req.headers_out["Content-Length"] = str(len(output))
filter.write(result)
filter.close()
###
Note that this filter loads the xslt template once on startup and then just
keeps re-using it over and over to maximize efficiency.
Best Regards,
Lee E. Brown
(administrator at leebrown.org)
-----Original Message-----
From: mod_python-bounces at modpython.org
[mailto:mod_python-bounces at modpython.org] On Behalf Of Diego Guillen
Sent: Wednesday, August 02, 2006 7:53 PM
To: mod_python at modpython.org
Subject: [mod_python] libxml2 and libxslt in mod_python
Hi all,
BACKGROUND
I just started using mod_python 3.1.4 with Apache2 on Ubuntu 6.06 Linux.
[it embeds Python 2.4] I'm translating a small application from PHP5, as an
exercise. It uses classes, simple inheritance, and xslt processing.
I'm looking into /var/log/apache2/error.log, as well as on the Firefox
1.5 browser, for error messages.
COMMENTS
My first impression is that mod_python's error reporting system is not as
pleasant to use. I don't seem to get enough feedback when something goes
wrong, and the error messages don't seem to point to the right version of
the files, nor to the right line numbers.
[It seems that the line numbers are shifted when you use logging, or when a
statement spans over several lines]
When I move the application into another folder, and remove the references
to the mod_python module [simulating the requests], it seems to be easier to
debug directly with the Python 2.4 interpreter.
QUESTIONS
My questions are:
* is it possible to access the libxml2, libxslt libraries in mod_python?
* is there an alternative better way for doing xslt in Python?
* is there any good Python-based documentation on the use of these libraries
without recurring to the C description (http://xmlsoft.org/)?
* and this may sound heretical on this mailing list: is there a way better
than mod_python to write web applications with Python?
Thanks,
Diego
_______________________________________________
Mod_python mailing list
Mod_python at modpython.org
http://mailman.modpython.org/mailman/listinfo/mod_python
|