Skip to Content

XSL

XSL (eXtensible Stylesheet Language) is a templating language used to transform, translate, or render XML documents. Within OU Campus, the contents of PCF files can be transformed into multiple data formats using XSLT, including but not limited to HTML, PHP Code, JSON, Text, JavaScript, CSS, and PDF (using XSL:FO).

Element Description Attributes Example
xsl:stylesheet Defines the root node of an XSL file. It appears after the prolog and must contain at least one namespace declaration.
  • version (required): defines the XSLT version utilized.
  • xmlns: [namespace] (required): defines the XSLT namespace utilized.
  • exclude-result-prefixes: specifies any namespaces which should not be copied when output.
<xsl:stylesheet version="3.0"
				xmlns:xsl="http://www.w3.org/1999/XSL/Transform"	
				xmlns:xs="http://www.w3.org/2001/XMLSchema"
				xmlns:ou="http://omniupdate.com/XSL/Variables"
				xmlns:ouc="http://omniupdate.com/XSL/Variables"
				exclude-result-prefixes="xsl xs ou ouc">
</xsl:stylesheet>
xsl:import Imports the XSLT of another stylesheet into the current one. Elements within the included stylesheet have less precedence than those defined in the current stylesheet.
  • href (required): defines the URL of a stylesheet to be imported.
<xsl:import href="common.xsl"/>
xsl:output Specifies the output format of the document resulting from the XSL transformation.
  • method: defines the output format. Options include xml, html, and text. If this attribute is missing, the default is xml.
  • version: specifies the version of XML to be output.
  • encoding: specifies the encoding attribute on the output.
  • indent: specifies whether the output should include indentations based upon a hierarchical structure.
  • include-content-type: specifies whether a meta tag should be inserted into the head element. Only applicable for HTML output method using XSLT 2.0 and above.
  • omit-xml-declaration: specifies whether the XML declaration should be removed from the output. Options are yes and no. If this attribute is missing, the default value is no.
<xsl:output method="html" version="5.0" indent="no" encoding="UTF-8" include-content-type="no"/>
xsl:function Creates your own XSL stylesheet functions, which are then called upon using an XPath expression. Any functions defined in this way need to begin with a namespace prefix which is unique to user-generated functions.
  • name (required): unique identifier for this function which must begin with a namespace prefix unique to user-generated functions.
  • as: defines the type of value to be returned when the function is invoked.
  • override-extension-function: specifies whether this user-generated function should override other functions of the same name. Options are yes or no. If this attribute is missing, the default value is yes.
<xsl:function name="ou:ssi">
	<xsl:param name="fullpath"/>
	<xsl:processing-instruction name="php"> include($_SERVER['DOCUMENT_ROOT'] . "<xsl:value-of select="$fullpath" />"); ?</xsl:processing-instruction>
</xsl:function>
xsl:template Defines processing instructions for a particular XML node or source element. xsl:template can be invoked by name using xsl:call-template or by pattern using xsl:apply-templates.
  • name (required): unique identifier for this template.
  • match (required if no name attribute is present): pattern identifier for this template.
  • mode: specifies the mode which must be matched in an xsl:apply-templates element in order for this template to be invoked
<xsl:template name="common-header">
	<xsl:copy-of select="ou:include-file('/_resources/includes/header.inc')"/>
</xsl:template>
<xsl:template match="table" mode="maincontent">
	<xsl:variable name="contents"><xsl:value-of select="./node()"/></xsl:variable>
</xsl:template>  
xsl:call-template Invokes an xsl:template by name.
  • name (required): unique identifier which must match the name attribute in an xsl:template.
  • xsl:with-param: a way to pass params to the called template
<xsl:call-template name="common-header">
	<xsl:with-param name="path">/_resources/includes/header.inc</xsl:with-param>
</xsl:call-template>
xsl:apply-templates Invokes an xsl:template by pattern.
  • select (required): defines the patten which matches to an xsl:template.
  • mode: if included, only invokes an xsl:template with a matching mode.
<xsl:apply-templates select="table" mode="maincontent" />
xsl:copy Also known as a "shallow copy." Copies and inserts a node. It does not copy any child nodes, descendants, or attributes of the original node.
  • copy-namespace: specifies whether the namespace should be copied. Options are yes or no. If this attribute is missing, the default value is yes.
<xsl:copy>
	<xsl:apply-templates select="ouc:editor" />
</xsl:copy>
xsl:param Declares a parameter. In this case, the value assigned to the parameter is the default and can be changed when used within an xsl:call-template or xsl:apply-templates.
  • name (required): unique identifier for this parameter.
  • select: an expression which defines the value of the parameter.
  • required: specifies whether the parameter is mandatory. Options are yes or no. If this attribute is missing, the default value is no.
  • as: the return type of the parameter.
<xsl:param name="href" required="yes" as="xs:string"/>
<xsl:param name="serverType">php</xsl:param>
xsl:variable Declares a variable which is a constant value. If declared immediately within the xsl:stylesheet node, this is a global variablename (required): unique identifier for this variable.
  • select: an expression which defines the value of the variable.
  • as: the return type of the variable.
<xsl:variable name="nav-file" select="'_nav.inc'" />
<xsl:variable name="col-count">
	<xsl:choose>
		<xsl:when test="$row_col_count = 4"><xsl:value-of select="$four-column-class" /></xsl:when>
		<xsl:when test="$row_col_count = 3"><xsl:value-of select="$three-column-class" /></xsl:when>
		<xsl:otherwise><xsl:value-of select="$two-column-class" /></xsl:otherwise> 
	</xsl:choose>
</xsl:variable>
xsl:copy-of Also known as a "deep copy." Copies and inserts a node and all its descendents.
  • select (required): defines the value or nodes to be copied.
  • copy-namespace: specifies whether the namespace should be copied. Options are yes or no. If this attribute is missing, the default value is yes.
<xsl:copy-of select="ouc:div[@label='related-content']/(attribute()|ouc:editor)"/>
xsl:value-of Copies the text value of a node resulting in a string output.
  • select (required): defines the value or node to be copied.
  • disable-output-escaping: specifies whether special characters should be XML escaped. Options are yes or no. If this attribute is missing, the default value is no.
<xsl:value-of select="tbody/tr[2]/td[1]" />
xsl:if Defines a conditional test and an action to take in the event the test returns as true.
  • test (required): defines the boolean condition to be tested. Output is true or false.
<xsl:if test="@required = 'true'">
	<xsl:attribute name="required"></xsl:attribute>
</xsl:if>
xsl:choose A parent element which wraps any number of xsl:when elements and a single, optional xsl:otherwise element. This element wraps a set of conditional options which are tested in order of appearance. This element has no attributes.
<xsl:choose>
	<xsl:when test="output/submit_text/text() != ''">
		<xsl:value-of select="output/submit_text/text()" />
	</xsl:when>
	<xsl:otherwise>
		Submit
	</xsl:otherwise>
</xsl:choose>
xsl:when A child element of xsl:choose. This element defines a conditional test and an action to take in the event the test returns as true. An xsl:choose element may have an unlimited number of xsl:when elements, but the first xsl:when element to return true terminates the xsl:choose operation.
  • test (required): defines the boolean condition to be tested. Output is true or false.
<xsl:when test="output/submit_text/text() != ''">
	<xsl:value-of select="output/submit_text/text()" />
</xsl:when>
xsl:otherwise An optional child element of xsl:choose. This element should be declared last within the xsl:choose and defines the action to take in the event all previously stated xsl:when elements returned false. This element has no attributes.
<xsl:otherwise>
	Submit
</xsl:otherwise>
xsl:for-each Specifies an XPath expression which may apply to multiple XML nodes and defines an action to take upon each one.
  • select (required): XPath expression identifying a specific node or value within an XML file.
<xsl:for-each select="tbody/tr[3]/td[1]/descendant::p">
	<p class="text"><xsl:value-of select="node()"/></p>
</xsl:for-each>
xsl:element Defines a literal element to be inserted during the transformation.
  • name
(required): defines the name of the element that will be created.
<xsl:element name="test">
	<xsl:text>This is a test document</xsl:text>
</xsl:element>

Output:

<test>This is a test document</test>
xsl:text Defines literal text to be inserted during the transformation.
  • disable-output-escaping: specifies whether special characters should be XML escaped. Options are yes and no. If this attribute is missing, the default value is no.
<xsl:text disable-output-escaping="yes">&lt;</xsl:text>html lang="en"<xsl:text disable-output-escaping="yes">&gt;</xsl:text>

Output:

<html lang="en">
xsl:comment Outputs an HTML comment node. This element has no attributes.
<xsl:comment>Comment goes here</xsl:comment>