Cross Browser Compatible XSLT

Written 8 years ago by Mike Cardwell

I recently found myself inclined to learn XSLT. I find the best way to learn a language is to apply it to something practical, so I used it to update my cv/resume.

The interesting thing about XSLT is that some browsers support client side transformations, whilst other browsers don’t. I wanted to take advantage of the capability of the clients which support XSLT whilst making it compatible with the others.

Using Apache HTTPd as the web server, the solution I came up with was to serve XML to those clients which support XSLT, and to do the transformation with mod_xslt otherwise.

I had to do a fair bit of research to get a list of user agents of browsers that support client side XSLT. I’m sure the list I came up with isn’t comprehensive, but it should cover 99% of the web browsers in use. The worse that can happen is a transformation is unnecessarily done server side when it could have been done client side. I came up with the following Apache configuration which I dropped in my .htaccess file:

## Serve index.xml by default
  DirectoryIndex index.xml

## Set server side transformation for xml responses
  AddOutputFilterByType mod-xslt application/xml

## Set client side transformation for:
  BrowserMatch \bMSIE\s no-xslt
  BrowserMatch \bFirefox/\d no-xslt
  BrowserMatch \bSeaMonkey\d no-xslt
  BrowserMatch \bSafari/[3-9]\d\d no-xslt
  BrowserMatch \bOpera[/\s]\d no-xslt

## Turn it back to server side transformation for:
  BrowserMatch \bMSIE\s[1-5]\. !no-xslt
  BrowserMatch \bOpera[\s/][1-8]\.\d !no-xslt
  BrowserMatchNoCase (bot|spider) !no-xslt

## Make sure proxies don’t deliver the wrong content
  Header append Vary User-Agent

You might wonder why you would use XSLT for something like a CV. Well, all I have to do now is write an MS Word stylesheet and a PDF stylesheet and I’ll be able to update my CV in all three formats xhtml/doc/pdf by updating a single XML file. Neat huh?


I’ve given up on client side XSLT for now. There are too many quirks and problems with it and it is just safer to do the translation on the server side. A few problems:

  1. Firefox doesn’t support disable-output-escaping

  2. The NoScript Firefox addon disables XSLT as well as JavaScript

  3. Old versions of Netscape don’t support importing external xslt

Looking to hire somebody like me? I'm open to offers of full time employment and small contract jobs. Check out my hiring page. You can follow this Blog using RSS or . To read more, visit my blog index.

Feeling generous?BitcoinMoneroZcashPaypal