Contents
Name
::xslt::compile, ::xslt::extension
Synopsis
package require xslt ?2.5?
ssheet
method ?option value...? ?args...?
::xslt::extension
add nsuri
tcl-namespace
Tcl Namespace Usage
::xslt
Description
TclXSLT is a wrapper for the Gnome libxslt library that allows an application
to perform XSL transformations (XSLT). The package also provides a
binding to the XSLT extension mechanism so that XSLT extension may
be implemented using Tcl scripts.
Transformation only works with documents created by
TclDOM/libxml2.
The TclXSLT package makes extensive use of Tcl objects. Compiled
XSL stylesheets are stored as the internal representation of a Tcl
object. Source and result documents are accessed via TclDOM's C
interface as Tcl objects. This allows the application to cache
parsed XML documents and compiled XSL stylesheets for better
runtime performance.
Packages and Namespaces
The TclXSLT package defines the xslt package and also a
Tcl namespace using that name.
Commands
The ::xslt::compile
command pre-compiles a stylesheet document. It returns a compiled
stylesheet object and also defines a Tcl command to access the
stylesheet. This Tcl command may be used to transform XML
documents.
Example 1. Example
set source_doc [::dom::libxml2::parse $XML]
set ssheet_doc [::dom::libxml2::parse $XSLstylesheet]
set ssheet [::xslt::compile $ssheet_doc]
set result [$ssheet transform $source_doc]
NB. It is advisable to use the -baseuri option when
parsing the source and stylesheet documents to allow external
resources to be resolved.
Stylesheet Command
The stylesheet command created by ::xslt::compile command accesses a
compiled stylesheet.
Command Methods
The following command methods may be used:
- [cget] [option]
-
Returns the value of an option. See below for the list of valid
options.
- [configure] [option
value]
-
Sets the value of an option. Available options are as
follows:
- [transform] [source]
[name | value]
-
Performs an XSL transformation on the given source document.
Stylesheet parameters may be specified as name-value pairs. The
return result is the DOM token for the result document.
Stylesheet Parameters
Any number of name-value pairs may be specified as arguments to
the stylesheet
transform method. These are passed as values for parameters
in the stylesheet. libxslt interprets the values as XPath
expressions, where the context node is the root node for the source
document. To pass a value as a string it must be XPath-quoted, for
example
Following is an example of how to use the stylesheet
transform method.
Example 2. Example
set source_doc [::dom::libxml2::parse $XML]
set ssheet_doc [::dom::libxml2::parse $XSLstylesheet]
set ssheet [::xslt::compile $ssheet_doc]
set result_doc [$ssheet transform $source_doc]
set result_xml [::dom::libxml2::serialize $result_doc \
-method [$ssheet cget -method]]
The ::xslt::extension
command is used to manage extensions of the libxslt library. The
add is used to register an extension. The remove
is used to unregister an extension. See EXTENSIONS
for more detail.
Extensions
The TclXSLT package allows an application to bind Tcl scripts to
the extension mechanism of libxslt. This means that Tcl scripts may
provide the implementation of an XSLT extension element or
function. The binding is achieved to associating a Tcl namespace
with an XML namespace.
Implementing An Extension
The Tcl application uses the ::xslt::extension add command
to register an extension. An XML Namespace for the extension is
specified as an argument, along with a Tcl namespace that will
provide implementations of extension elements and functions. For
example,
Everytime the ::xslt::transform command is
executed, a newly-created XSLT engine is initialized. For each
registered extension, every procedure in the associated Tcl
namespace is defined in the XSLT engine as either an extension
element or an extension function. The procedure is defined as an
extension function if it has a variable argument list, otherwise it
is defined as an extension element. The procedure name is used as
the local part of the extension name. For example,
"myfunc" is defined as an extension function and "myelement" is
defined as an extension element.
Extension Functions
The arguments to an extension function are converted to a string
value and then passed as parameters to the Tcl procedure.
The return result of the Tcl procedure becomes the return value
of the extension function. The type of the result is preserved
where possible, otherwise it is converted to a string value.
Extension Elements
Extension elements have not been implemented in TclXSLT
v1.1.
Using An Extension
To invoke an extension in an XSL stylesheet, use the normal XSLT
extension mechanism. The XML Namespace matches the extension to the
registered Tcl namespace (NB. the stylesheet author is free to
choose any prefix for the extension namespace). For example,
This stylesheet would result in the following Tcl script being
evaluated: