I recently had a requirement to read in an XSLT file and transform it using Python.
These transforms weren't created by me and were importing other XSL files. Normally this wouldn't be a problem, however these assumed the XSL files were running on a webserver and were of the form:
This caused libxslt to crash as it couldn't resolve the filename.
Tured out to be very basic indeed, however took quite a lot of Googling. Simply add a custom resolver to libxml using the command:
Now you need a function which will get called on each include:
def entity_resolver(url, id, context): if url.startswith("file:///"): new_filename = url # # Put code here to work out the correct path on the FILESYSTEM to load url correctly # # # Return an open FILE object # file_buffer = open(new_filename, "rt") return file_buffer