XPathScript Cookbook

Just as we concluded our look at XSLT with a few recipes that offer solutions to common tasks, we will do the same here with XPathScript. Since most XSLT tips are easy to re-create using XPathScript, I will not repeat the same recipes but will focus instead on things unique to XPathScript (or simply not possible with vanilla XSLT 1.0).

Accessing Client Request and Server Data

Problem

You need to access information about the current request (POSTed form data, cookies, etc.) or other parts of the Apache HTTP server API from within your stylesheet.

Solution

Use the Apache object that is passed as the first argument to the top level of every XPathScript stylesheet transformation.

<%
# at the top lexical level of your XPathScript stylesheet:
my $r = shift;
# $r now contains the same Apache object passed to mod_perl handler scripts.
%>

Discussion

One benefit of running XPathScript inside of AxKit is that each stylesheet can directly access the Apache server environment via the same Apache object that gives mod_perl its power and flexibility. This object can be used to examine (and in many cases, control) virtually every aspect of the Apache HTTP Server, from user-submitted form and query data to outgoing headers and host configurations.

Accessing form and query data

<%
use Apache::Request; 
my $r = shift;
my $cgi = Apache::Request->instance($r);
%>
<html>
  <body>
     <p>
      You said that your favorite fish is <%= $cgi->param('fave_fish') %>
     </p>
  </body>
</html>

Setting cookies

<% use ...

Get XML Publishing with AxKit now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.