15.9.5.XSLT Examples
This section covers some examples of applying XSLT to various stored data.
Example15.23.XSLT example
create procedure xml_view_string (in _view varchar) { declare _body any; declare _pf varchar; _body := string_output (); http ('<document>', _body); _pf := concat ('DB.DBA.http_view_', _view); call (_pf) (_body); http ('</document>', _body); return (string_output_string (_body)); }
create procedure xslt_view (in v varchar, in xst varchar) { declare str, r varchar; xslt_sheet (xst, xtree_doc (file_to_string (xst))); str := xml_view_string (v); r := xslt (xst, xtree_doc (str)); declare str_out any; str_out := string_output (); http_value (r, 0, str_out); string_to_file ('xslt.out', string_output_string (str_out), 0); }
These functions will take the serialized text of an XML view created with CREATE XML VIEW, transform it with a stylesheet and store the result into a file.
The first function returns a string containing the text generated as the value of the XML view specified as argument. It calls the serialization function, which is
DB.DBA.http_view_ + view name
. This function writes the text into the string output stream
passed to it. Note that the function wraps the text inside a
<document>
element in
order to make it well-formed, since the view serialization function
will emit multiple top-level elements, one for each selected row in
the root table in the XML view.
The xslt_view()
function first
defines the style sheet, which it takes from a file in this case.
The xslt_sheet()
function is called
with the name and root element of the parsed file.
The function next gets the string to process, parses it as XML,
and converts the parse tree into an entity object. This is then
passed to the xslt()
function. The
result is another entity object. This is finally serialized as XML
text and written into the file xslt.out
.
These examples show how to parse and serialize XML using varchars, string output streams and the entity data type.
The central points are:
-
The XML entity object is a reference to a particular element of a parsed XML document, The underlying document is only visible through this reference. A string is converted into such a document and a reference to the document's root is returned by the
xtree_doc (string)
function. In previous versions of Virtuoso, the combination
xml_tree_doc (xml_tree (string))
was used for this purpose; this combination still works to maintain backwards compatibility, but using xtree_doc() is preferable.
-
A string output is used to capture the serialization of data by the
http_value()
function. If the string output were not specified the data would be sent to the HTTP client directly, if we were running in an HTTP request context.