Control transformations using XSLT parameters

Once you get your data content, how do you produce your layout? If it doesn't involve using XSLT transformations, you should reconsider your current strategy. Phillip Perkins outlines the advantages of using XSLT, which includes the fact that you aren't restricting your data to one particular layout.

If you aren't in the habit of using XSLT transformations to take your data content and produce your layout, you might want to look into the power of XSLT. One of the best advantages of using XSLT to control your layout is that you aren't restricting your data to one particular layout.

If you keep your data and business logic separate from your layout, you can create different XSL style sheets to produce the different layouts you need. This is particularly helpful if you're building user interfaces for different layout types to handle browser-to-browser incompatibilities. It's also useful if you're working with different technologies such as WML or Web services, as opposed to regular HTTP requests.

One drawback that developers without much experience in transformations might encounter is the sense that the XSL is limited to the available XML for the transformation—but that's not the case. An easy way to add functionality is through the use of the <param> XSLT element. This element allows you to add a parameter to your style sheet that you can use to pass in all sorts of information. Once the XSL style sheet is in memory, you can set the parameter's value using XPath. The style sheet is, after all, another DOM document. If you don't have XPath available to you, you might want to check out getElementsByTagName in the DOM 1 specification.

Let's say you have a parameter with the name "browser": <xsl:param name="browser"/>. Before you perform your transformation, you want to set that parameter to a value that the style sheet will use in conditions to produce the appropriate output. Simply set the text to be a value that you can use in a condition statement. Listing A shows you how in ASP. Listing B displays how your XSL style sheet should look.

If you examine the ASP code, you'll see that I've selected the <param> XSLT element using XPath: //xsl:param[@name='browser']. This says, "Get me the first xsl:param node that has a name attribute that's equal to 'browser'." The element's text is then set to 'ie'. When you inspect the XSLT, you'll see the xsl:param element, as well as how the parameter is used in an xsl:choose block. You can take all of this a bit further and create a function to handle all of your XSLT transformations. View Listing C.

When you use this function, you pass in your last parameter, pArrayOfParams, as an array of arrays. An example structure would be: (("browser", "ie"), ("version", "6.0")). The outer array contains two array elements. The first array element is an array that contains two array elements. The first element is the name of the parameter (the name attribute on the xsl:param node), and the second element is the value. The second element of the outer array is the same structure as the first inner array. This allows you to pass in as many parameters as you need for your transformation.

If you'd like more examples in PHP and Mozilla client-side JavaScript, you can download the source code.

Keep your developer skills sharp by automatically signing up for TechRepublic's free Web Development Zone newsletter, delivered each Tuesday.

Editor's Picks

Free Newsletters, In your Inbox