I'm learning to love XML because of XSLT! I'll post my tips here. (Nothing against JSON either. I use that too. To switch it up, look at converting between xml and json with points for transforming in both directions, and xml to json. The subtle difference pointed out in the first link is that "XML is a document-centric format, while JSON is a format for structured data.")
Reference Links
I really like this page as an overview of XSLT. Using it as a reference keeps me straight on what I've just learned. The next-to-last section, XSLT Element Roundup, has been very handy when I'm trying to remember exactly what I can do here.
I figure the whole point to XSL transformations is to make the output look prettier than your XML data input. So XSLT as a pretty printer is not only germane, but an easy-to-follow path of learning. Now, I did just catch myself trying to make the HTML output of one of my XSLTs to be very pretty; and that is a waste of time for two reasons! One is that the output is parser-dependent, and the other is that tidy can do a better job after the fact anyway. So don't bother with formatting niceties that aren't visible: just get the visible parts right.
When I'm about to get frustrated, this information has yielded tips like disable-output-escaping and xsl:copy-of.
Process
I've started all my presentations in OmniOutliner for the past several years, not just to organize my thoughts, but also to save as OPML. Originally I imported OmniOutliner into Keynote, but that didn't scratch my portable itch. Then I found S5. Version 1.0 was a bit clunky when you needed to reorder slides manually (another good reason to start in OmniOutliner!), but version 1.1 is a huge usability improvement (although you still need to know some HTML).
The Old Process
For my S5 1.1 presentations in 2007, I converted OPML to S5 using a stylesheet from Les Orchard. I changed the absolute paths to relative paths in that XSL. However, this conversion lost all of the notes from OmniOutliner since that was not an expected input node.
Although this worked well for me, I couldn't promote S5 to my co-workers because I know that much raw HTML is a bit much for them. Even though S5 is simple, it wasn't prime time.
The New Process
In 2008, I discovered I could use my existing PmWiki for S5 slideshows! Wikis are just so easy... I modified that opml2s5.xsl to be opml2pmwikis5.xsl (it's a simpler transformation, so even I could create the XSL; I learned just enough to add notes to the handouts view). Wow, is that easy! Too bad so much information is lost in this transformation that I don't think I could write a robust reverse transform (although sed and awk are powerful text manipulation tools).
I added custom markup to PmWiki for S5 handouts, as you might notice. Handout notes (not visible in S5's slideshow view) are surrounded by == marks. [Unfortunately, I just noticed that == conflicts with WikiCreole.] To use this, add the following block to your PmWiki's local/config.php file:
## Custom Markup for handout view for slideshow
# Markup($name, $when, $pattern, $replace);
Markup('handout', 'inline', '/==(.*?)==/',
'<span class="handout">$1</span>');
So the new process starts with OmniOutliner, runs through opml2pmwikis5.xsl using TestXSLT, and I put the results on a wiki page. Easy!
What's even better is that I can promote S5 now! It's one thing to learn HTML; that has a learning curve. It's another thing to learn wiki syntax; you should pick that up quickly. So now I can start my campaign to get rid of PowerPoint!