XML/XSLT with Python
Colin Fox
cfox at cfconsulting.ca
Sun Sep 21 07:31:40 EDT 2003
On Sat, 20 Sep 2003 22:32:59 +0200, K. N. wrote:
>
> Is there any good and fast Python module for XSLT
> processing ? I'm going to use XML and XSLT to generate
> web pages, so I need XSLT processor that will be able
> to transform for example a DOM object in memory - I
> don't want to create XML file containing data and then
> load it and transform with XSLT, but I want to do
> this at once - without writing to a temporary file.
> Actually I've seen alot articles about parsing XML,
> but nothing about creating XML documents and storing
> it as an object that will be passed to XSLT processor,
> and that is what I'm planning to do.
> I think its a quite good solution, but I have no idea
> which modules will be most suitable for this task.
> Does anyone have some experience in this matter and
> could point me where should I look ?
>
> Best regards,
> K.
Here's a CGI I wrote to do this very thing.
It uses libxml2 & libxslt from the gnome libraries.
I wanted to make sure it was reasonably efficient, so I put a bunch of
timing code into it. It turns out that processing an XML file, and running
it through this XSLT processor is really fast.
I didn't bother to include page.xsl here, as it's actual contents are
irrelevant to the technique.
Enjoy!
cf
------------------------
#! /usr/bin/env python
import time
st = time.time()
import libxml2, libxslt
import cgi, os, sys
query = cgi.FieldStorage()
readtimestart = time.time()
styledoc = libxml2.parseFile("page.xsl")
style = libxslt.parseStylesheetDoc(styledoc)
doc = libxml2.parseFile(query['script'].value)
readtimeend = time.time()
start_converting = time.time()
result = style.applyStylesheet(doc, None)
done_converting = time.time()
html = result.serialize()
print "Content-type: text/html"
print
print html
style.freeStylesheet()
doc.freeDoc()
result.freeDoc()
et = time.time()
totaltime = et-st
print "<!-- Page served in %s seconds. -->" % totaltime
print "<!-- XML conversion took %s seconds. -->" %\
(done_converting-start_converting)
print "<!-- File reading took %s seconds. -->" %\
(readtimeend-readtimestart)
More information about the Python-list
mailing list