YouTube video embedding with XSLT
Written for: XSLT
A while ago, I published an article on how to use Python's docutils to expand some markup in reStructuredText into the HTML for a YouTube embedded video. Just for fun, here's an XSLT stylesheet that does something similar. It hasn't had a chance to be used in production, but if you have an XSLT-based web application, it might come in useful.
youtube.inc.xslt
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml">
<!-- Replaces elements of thei form <youtube id="asdfasdf" /> with the
correct XHTML object element to embed a YouTube video -->
<!-- If desired, one can also place arbitrary elements inside the youtube
element that will be converted into parameters of the object element.
E.g. the element <fullscreen>true</fullscreen> will be converted to
<param name="fullscreen" value="true" /> -->
<xsl:strip-space elements="youtube"/>
<xsl:template match="youtube">
<xsl:element name="object">
<xsl:attribute name="type">application/x-shockwave-flash</xsl:attribute>
<xsl:attribute name="width">425</xsl:attribute>
<xsl:attribute name="height">344</xsl:attribute>
<xsl:attribute name="class">youtube-embed</xsl:attribute>
<xsl:attribute name="data">
http://www.youtube.com/v/<xsl:value-of select="@id"/>
</xsl:attribute>
<xsl:element name="param">
<xsl:attribute name="name">movie</xsl:attribute>
<xsl:attribute name="value">
http://www.youtube.com/v/<xsl:value-of select="@id"/>
</xsl:attribute>
</xsl:element>
<xsl:element name="param">
<xsl:attribute name="name">wmode</xsl:attribute>
<xsl:attribute name="value">transparent</xsl:attribute>
</xsl:element>
<xsl:apply-templates mode="youtube-params" />
</xsl:element>
</xsl:template>
<xsl:template match="youtube/*" mode="youtube-params">
<xsl:element name="param">
<xsl:attribute name="name"><xsl:value-of select="local-name()" /></xsl:attribute>
<xsl:attribute name="value"><xsl:value-of select="text()" /></xsl:attribute>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
As the comment notes, you need to run this on an XML document that contains elements like <youtube id="asdfasdf" />. It's not currently configurable as to the width, height, and other parameters (except by changing the XSLT) but could be made so.
Tweet it!
Post Comment
All comments are personally reviewed and must be: