<?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |
<html> | |
<head> | |
<title>ASF: Xalan-C++ Samples</title> | |
<meta http-equiv="content-type" content="text/html; charset=UTF-8" /> | |
<meta http-equiv="Content-Style-Type" content="text/css" /> | |
<link rel="stylesheet" type="text/css" href="resources/apache-xalan.css" /> | |
</head> | |
<!-- | |
* Licensed to the Apache Software Foundation (ASF) under one | |
* or more contributor license agreements. See the NOTICE file | |
* distributed with this work for additional information | |
* regarding copyright ownership. The ASF licenses this file | |
* to you under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
--> | |
<body> | |
<div id="title"> | |
<table class="HdrTitle"> | |
<tbody> | |
<tr> | |
<th rowspan="2"> | |
<a href="../index.html"> | |
<img alt="Trademark Logo" src="resources/XalanC-Logo-tm.png" width="190" height="90" /> | |
</a> | |
</th> | |
<th text-align="center" width="75%"> | |
<a href="index.html">Xalan-C/C++ Version 1.11</a> | |
</th> | |
</tr> | |
<tr> | |
<td valign="middle">Xalan-C++ Samples</td> | |
</tr> | |
</tbody> | |
</table> | |
<table class="HdrButtons" align="center" border="1"> | |
<tbody> | |
<tr> | |
<td> | |
<a href="http://www.apache.org">Apache Foundation</a> | |
</td> | |
<td> | |
<a href="http://xalan.apache.org">Xalan Project</a> | |
</td> | |
<td> | |
<a href="http://xerces.apache.org">Xerces Project</a> | |
</td> | |
<td> | |
<a href="http://www.w3.org/TR">Web Consortium</a> | |
</td> | |
<td> | |
<a href="http://www.oasis-open.org/standards">Oasis Open</a> | |
</td> | |
</tr> | |
</tbody> | |
</table> | |
</div> | |
<div id="navLeft"> | |
<ul> | |
<li> | |
<a href="resources.html">Resources</a> | |
<br /> | |
</li> | |
<li> | |
<a href="../index.html">Home</a> | |
</li></ul><hr /><ul> | |
<li> | |
<a href="index.html">Xalan-C++ 1.11</a> | |
</li> | |
<li> | |
<a href="whatsnew.html">What's New</a> | |
</li> | |
<li> | |
<a href="license.html">Licenses</a> | |
</li></ul><hr /><ul> | |
<li> | |
<a href="overview.html">Overview</a> | |
</li> | |
<li> | |
<a href="charter.html">Charter</a> | |
</li></ul><hr /><ul> | |
<li> | |
<a href="download.html">Download</a> | |
</li> | |
<li> | |
<a href="buildlibs.html">Build Libraries</a> | |
</li> | |
<li> | |
<a href="install.html">Installation</a> | |
</li> | |
<li> | |
<a href="builddocs.html">Build Documents</a> | |
</li></ul><hr /><ul> | |
<li>Sample Apps<br /> | |
</li> | |
<li> | |
<a href="commandline.html">Command Line</a> | |
</li> | |
<li> | |
<a href="usagepatterns.html">Usage Patterns</a> | |
</li></ul><hr /><ul> | |
<li> | |
<a href="programming.html">Programming</a> | |
</li> | |
<li> | |
<a href="extensions.html">Extensions</a> | |
</li> | |
<li> | |
<a href="extensionslib.html">Extensions Library</a> | |
</li> | |
<li> | |
<a href="apiDocs/index.html">API Reference</a> | |
</li></ul><hr /><ul> | |
<li> | |
<a href="faq.html">Xalan-C FAQs</a> | |
</li></ul><hr /><ul> | |
<li> | |
<a href="whatsnew.html#bugs">Bugs</a> | |
</li> | |
<li> | |
<a href="http://xml.apache.org/xalan-j/test/run.html#how-to-run-c">Testing</a> | |
</li> | |
<li> | |
<a href="secureweb.html">Web Security</a> | |
</li> | |
</ul> | |
</div> | |
<div id="content"> | |
<h2>Xalan-C++ Samples</h2> | |
<ul> | |
<li> | |
<a href="#getstarted">Samples to help you get started</a> | |
</li> | |
<li> | |
<a href="#rebuilding">Rebuilding a Sample application</a> | |
</li> | |
<li> | |
<a href="#apachemodulexslt">ApacheModuleXSLT</a> | |
</li> | |
<li> | |
<a href="#compilestylesheet">CompileStylesheet</a> | |
</li> | |
<li> | |
<a href="#documentbuilder">DocumentBuilder</a> | |
</li> | |
<li> | |
<a href="#externalfunctions">ExternalFunctions</a> | |
</li> | |
<li> | |
<a href="#parsedsourcewrappers">ParsedSourceWrappers</a> | |
</li> | |
<li> | |
<a href="#serializenodeset">SerializeNodeSet</a> | |
</li> | |
<li> | |
<a href="#simpletransform">SimpleTransform</a> | |
</li> | |
<li> | |
<a href="#simplexpathapi">SimpleXPathAPI</a> | |
</li> | |
<li> | |
<a href="#simplexpathcapi">SimpleXPathCAPI</a> | |
</li> | |
<li> | |
<a href="#streamtransform">StreamTransform</a> | |
</li> | |
<li> | |
<a href="#threadsafe">ThreadSafe</a> | |
</li> | |
<li> | |
<a href="#tracelisten">TraceListen</a> | |
</li> | |
<li> | |
<a href="#transformtoxercesdom">TransformToXercesDOM</a> | |
</li> | |
<li> | |
<a href="#usememorymanager">UseMemoryManager</a> | |
</li> | |
<li> | |
<a href="#usestylesheetparam">UseStylesheetParam</a> | |
</li> | |
<li> | |
<a href="#xalantransform">XalanTransform</a> | |
</li> | |
<li> | |
<a href="#xalantransformercallback">XalanTransformerCallback</a> | |
</li> | |
</ul> | |
<a name="getstarted"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>Samples to help you get started</h3> | |
<p>Each of the subdirectories in the Xalan-C++ samples directory contains the source files for a | |
sample application. The executables for the samples are in the build subdirectory, which should be on the system | |
path.</p> | |
<p>With most of the samples, you can use the following procedure:</p> | |
<ol> | |
<li>Go to the samples subdirectory containing the sample (use the DOS shell if you are running Windows)<br /> | |
<br /> | |
</li> | |
<li>Run the sample from the command line (as indicated below)<br /> | |
<br /> | |
</li> | |
<li>Examine the application source files. You may also want to modify the source files. Remember that if you | |
modify a .cpp file, you must rebuild the executable and place it on the path before you can run the | |
modified application.</li> | |
</ol> | |
<table class="note"> | |
<tr> | |
<td class="noteImg"> | |
<img src="resources/note.gif" alt="note" /> | |
</td> | |
<td class="noteTxt">Each sample application looks for input files in the current directory, the directory from | |
which you run the application. The input files are in the samples subdirectory along with the sample source | |
files. For the UNIX builds, application executables are in the bin subdirectory. For the Windows32 build, the | |
application executable is in the bin subdirectory (Xalan-C_1_11_0-<my_Windows_distribution>\bin). To run a | |
sample, be sure the executable is on the path, and run it from the samples subdirectory that contains the input | |
files.</td> | |
</tr> | |
</table> | |
<table class="note"> | |
<tr> | |
<td class="noteImg"> | |
<img src="resources/note.gif" alt="note" /> | |
</td> | |
<td class="noteTxt">The most of the samples are implemented without providing a pluggable memory manager. The <a href="#simpletransform">SimpleTransform</a> sample illustrates, | |
in addition to a simple transformation, the usage of the processor with memory manager</td> | |
</tr> | |
</table> | |
<a name="rebuilding"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>Rebuilding a Sample application</h3> | |
<p>Instructions for rebuilding the samples differ depending on whether you are using the binary package or the source | |
package. </p> | |
<p>For Windows users, the Xalan Visual C++ workspace contains project configurations for building | |
each of the samples. Users who have downloaded the source package, can find the XalanICU.dsw workspace | |
file under:<br /> | |
<br /> <code>Xalan-C_1_11_0-src\src\xalanc\Projects\Win32\VC6</code> | |
<br /> | |
<br /> and XalanICU.sln solution file under:<br /> | |
<br /> | |
<code>Xalan-C_1_11_0-src\src\xalanc\Projects\Win32\VC7.1</code> | |
<br /> | |
<br /> Users who have downloaded the binary package, should use the Samples.dsw workspace file | |
located under: <br /> | |
<br /> | |
<code>Xalan-C_1_11_0-<my_Win32_distribution>\Samples\Projects\Win32\VC6</code> | |
<br /> | |
<br /> | |
or the Samples.sln solution file for .NET V7.1 users, located under: <br /> | |
<br /> | |
<code>Xalan-C_1_11_0-<my_Win32_distribution>\Samples\Projects\Win32\VC7.1</code> | |
<br /> | |
<br /> | |
</p> | |
<p>The Makefile that comes with the UNIX distributions include targets for rebuilding one or all of | |
the sample applications. To rebuild one or more sample applications from the UNIX source package, | |
go to the Xalan-C_1_11_0-src directory and run<br /> | |
<br /> | |
<code>gmake <b> | |
<i>Target</i> | |
</b> | |
</code> | |
<br /> | |
<br /> | |
where <b> | |
<i>Target</i> | |
</b> is <code>Samples</code> (all the samples), <code>ApacheModuleXSLT</code>, | |
<code>CompileStylesheet</code>, <code>DocumentBuilder</code>, <code>ExternalFunctions</code>, | |
<code>ParsedSourceWrappers</code>, <code>SerializedNodeSet</code>, <code>SimpleTransform</code>, | |
<code>SimpleXPathAPI</code>, <code>SimpleXPathCAPI</code>, <code>StreamTransform</code>, | |
<code>ThreadSafe</code>, <code>TraceListen</code>, <code>TransformToXercesDOM</code>, | |
<code>UseStylesheetParam</code>, <code>XalanTransform</code>, or | |
<code>XalanTransformerCallback</code>.</p> | |
<p>To rebuild the samples from the UNIX binary package, go to the ../samples directory of your installation, | |
run the runConfigure utility for your target platform, and then run gmake. For example, AIX users would | |
issue the following command:<br /> | |
<br /> | |
<code>./runConfigure -p aix -c xlc_r -x xlC_r</code> | |
<br /> | |
<code>cd samples</code> | |
<br /> | |
<br /> | |
<code>gmake <b> | |
<i>Target</i> | |
</b> | |
</code> | |
<br /> | |
<br /> | |
where <b> | |
<i>Target</i> | |
</b> can be Samples (for building all samples), or the individual sample name as | |
listed above.</p> | |
<table class="note"> | |
<tr> | |
<td class="noteImg"> | |
<img src="resources/note.gif" alt="note" /> | |
</td> | |
<td class="noteTxt">For information on building Apache Module, see <a href="samples.html#apachemodulexslt">ApacheModuleXSLT</a> | |
</td> | |
</tr> | |
</table> | |
<a name="apachemodulexslt"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>ApacheModuleXSLT</h3> | |
<table class="note"> | |
<tr> | |
<td class="noteImg"> | |
<img src="resources/note.gif" alt="note" /> | |
</td> | |
<td class="noteTxt">This sample must be built with the Apache Web server, and the Xalan-C++ distribution files do not include a binary | |
for ApacheModuleXSLT. Assuming you have installed the Apache server on your platform, you can use Visual C++ on Windows to | |
build ApacheModuleXSLT.dll, or the Makefile on UNIX to build xslt_module (with the appropriate library suffix).</td> | |
</tr> | |
</table> | |
<p>What it does: runs as an Apache module on an Apache Web server; performs transformations and returns the output to a Web | |
browser. You configure Apache to respond to a given URL request for an output file (html or txt file in the configuration below) | |
by applying an xsl stylesheet file to an xml document file (both with the specified name in a given location) and returning | |
the transformation output to the client.</p> | |
<p>This sample also illustrates use of the XalanTransformer class and the C API defined in src/XalanTransformer/XalanCAPI.h. It returns | |
transformation output in blocks to a callback function, which enables the browser to start displaying the result before the transformation | |
has been completed.</p> | |
<table class="note"> | |
<tr> | |
<td class="noteImg"> | |
<img src="resources/note.gif" alt="note" /> | |
</td> | |
<td class="noteTxt">You may need to adjust the Visual C++ or Makefile settings to locate the required Apache header files. As shipped, the Visual C++ | |
project file looks in \Apache Group\Apache\src\include, and the UNIX Makefile looks in usr/lib.</td> | |
</tr> | |
</table> | |
<p>To build the Apache module, follow the instructions in <a href="buildlibs.html#winbldenv">Steps for doing a Windows | |
build</a> or <a href="buildlibs.html#unixbldenv">Steps for doing a UNIX build</a>. For UNIX platforms, you do the build with<br /> | |
<code>gmake ApacheModuleXSLT</code>.</p> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h4>Setting up and using ApacheModuleXSLT</h4> | |
<p>To use ApacheModuleXSLT, do the following:</p> | |
<ol> | |
<li>(UNIX only) Be sure the Xalan and Xerces libraries are on your library path (you can accomplish this by copying them to | |
/usr/lib; see <a href="getstarted.html#path">Setting up the path/library path</a>), and copy the Apache module to | |
/usr/lib/apache.<br /> | |
<br /> | |
</li> | |
<li>Add LoadModule and (UNIX only) AddModule entries to the Apache configuration file: httpd.conf.<br /> | |
<br /> | |
Windows: <code>LoadModule xslt_module Xalan-C_1_11_0-<my_Windows_distribution>\bin\ApacheModuleXSLT.dll</code> | |
<br /> | |
<br /> | |
UNIX: <code>AddModule mod_xslt.c</code> | |
<br /> | |
and<br /> | |
<code>LoadModule xslt_module /usr/lib/apache/mod_xslt.<b> | |
<i>xx</i> | |
</b> | |
</code> | |
<br /> | |
<br /> | |
where <b> | |
<i>xx</i> | |
</b> is the appropriate library suffix for the UNIX platform ("so" or "a").<br /> | |
<br /> | |
</li> | |
<li>Add a <Location> entry to httpd.conf that indicates where xml/xsl file pairs are to be found, and what target file extensions | |
to recognize. We suggest the following:<br /> | |
<br /> | |
<code><Location /xslt></code> | |
<br /> | |
<code>AddHandler mod_xslt .html</code> | |
<br /> | |
<code>AddHandler mod_xslt .txt</code> | |
<br /> | |
<code></Location></code> | |
<br /> | |
<br /> | |
This <Location> element instructs the module to respond to requests for <b> | |
<i>xxx</i> | |
</b>.html and <b> | |
<i>xxx</i> | |
</b>.txt files in the | |
in the xslt subdirectory (under the document root; see next item) by applying the <b> | |
<i>xxx</i> | |
</b>.xsl stylesheet to <b> | |
<i>xxx</i> | |
</b>.xml | |
(both in that directory) and returning the transformation result to the browser.<br /> | |
<br /> | |
For example, a request for foo.html instructs the module to apply foo.xsl to foo.xml and return the result.<br /> | |
<br /> | |
Note: It is up to the stylesheet to apply the appropriate xsl:output method to the output. Whether the user specifies html or txt is, of | |
itself, immaterial.<br /> | |
<br /> | |
</li> | |
<li>Put xml/xsl file pairs in the <Location> subdirectory (xslt in the example)) under the document root directory specified in | |
httpd.conf by the DocumentRoot and <Directory> settings. Alternatively, you can modify these settings to point to | |
Xalan-C_1_11_0-<my_UNIX_distribution>/samples/ApacheModuleXSLT, which includes an xslt subdirectory with xml/xsl file pairs | |
(foo.xml/xsl, apachemod.xml/xsl).<br /> | |
<br /> | |
</li> | |
<li>Start the Apache server.<br /> | |
<br /> | |
</li> | |
<li>From a Web browser, call the module with a URL as follows:<br /> | |
<code>http://<b> | |
<i>serverName</i> | |
</b>/xslt/<b> | |
<i>xxx</i> | |
</b>.html</code> | |
<br /> | |
where <b> | |
<i>serverName</i> | |
</b> is the Apache server (such as www.myServer.com) and <b> | |
<i>xxx</i> | |
</b> is the name of an xml/xsl pair of files | |
(such as foo.xml and foo.xsl) in the xslt subdirectory under the DocumentRoot directory.<br /> | |
<br /> | |
For example,<br /> | |
<code>http://www.myServer.com/xslt/apachemod.html</code> | |
<br /> | |
instructs ApacheModuleXSLT to apply the apachemod.xsl stylesheet to the apachemod.xml XML document (both files in the xslt directory | |
under the Apache DocumentRoot directory) and return the transformation result to the browser.</li> | |
</ol> | |
<a name="compilestylesheet"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>CompileStylesheet</h3> | |
<p>What it does: Use a compiled stylesheet to perform a series of transformations.</p> | |
<p>You can run it from the CompileStylesheet subdirectory with</p> | |
<p> | |
<code>CompileStylesheet</code> | |
</p> | |
<p>See also: <a href="usagepatterns.html#compiled">Compiling stylesheets</a>.</p> | |
<a name="documentbuilder"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>DocumentBuilder</h3> | |
<p>What it does: Use a DocumentBuilder to programmatically construct an XML document, apply the foo.xsl stylesheet to | |
this document, and write the ouput to foo.out.</p> | |
<p>You can run it from the DocumentBuilder subdirectory with</p> | |
<p> | |
<code>DocumentBuilder</code> | |
</p> | |
<a name="externalfunctions"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>ExternalFunctions</h3> | |
<p>What it does: implement, install, and illustrate the usage of three extension functions. The functions return a | |
square root, a cube, and a string with the current date and time. The sample stylesheet (foo.xsl) gets the area | |
of a cube and units of measurement from an XML document (foo.xml), computes the length of each side | |
of a cube and the volume of the cube, and enters the date and time of the transformation. The output appears in | |
foo.out.</p> | |
<p>Run this sample from the ExternalFunctions subdirectory with</p> | |
<p> | |
<code>ExternalFunctions</code> | |
</p> | |
<p>See also: <a href="extensions.html">Extension Functions</a>.</p> | |
<a name="parsedsourcewrappers"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>ParsedSourceWrappers</h3> | |
<p>What it does: performs a transformation with input in the form of a pre-built XercesDOM or XalanSourceTree.</p> | |
<p>Run this sample from the ParsedSourceWrappers subdirectory with</p> | |
<p> | |
<code>ParsedSourceWrappers</code> | |
</p> | |
<p>See transformXercesDOM() and transformXalanSourceTree() as called by transform() in ParsedSourceWrappers.cpp.</p> | |
<a name="serializenodeset"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>SerializeNodeSet</h3> | |
<p>What it does: Serialize the node set returned by the application of an XPath expression to an XML document.</p> | |
<p>Run this sample from the SerializeNodeSet subdirectory with</p> | |
<p> | |
<code>SerializeNodeSet <b> | |
<i>XMLFile</i> | |
</b> <b> | |
<i>ContextNode</i> | |
</b> <b> | |
<i>XPathExpression</i> | |
</b> | |
</code> | |
</p> | |
<p>where <b> | |
<i>XMLFile</i> | |
</b> is an XML source file, <b> | |
<i>ContextNode</i> | |
</b> is the location path to the context | |
node, and <b> | |
<i>XPathExpression</i> | |
</b> is an XPath expression to apply to that context node. The SerializeNodeSet | |
directory contains the same foo.xml sample source file as the preceding examples.</p> | |
<a name="simpletransform"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>SimpleTransform</h3> | |
<p>What it does: The SimpleTransform class uses the foo.xsl stylesheet to transform foo.xml, and writes the | |
output to foo.out. The source for this sample has been modified to demonstrate the usage of the new pluggable | |
memory management feature.</p> | |
<p>You can run it from the SimpleTransform subdirectory with</p> | |
<p> | |
<code>SimpleTransform</code> | |
</p> | |
<p>See also: <a href="usagepatterns.html#xalantransformer">Basic procedures for performing XSL | |
transformations</a>.</p> | |
<a name="simplexpathapi"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>SimpleXPathAPI</h3> | |
<p>What it does: Use the XPathEvaluator interface to evaluate an XPath expression from the specified context node of | |
an XML file and display the nodeset returned by the expression.</p> | |
<table class="note"> | |
<tr> | |
<td class="noteImg"> | |
<img src="resources/note.gif" alt="note" /> | |
</td> | |
<td class="noteTxt">You can use this sample as an aid when you want to find out what a given XPath expression returns from a | |
given context node in an XML file.</td> | |
</tr> | |
</table> | |
<p>Run this sample from the SimpleXPathAPI subdirectory with</p> | |
<p> | |
<code>SimpleXPathAPI <b> | |
<i>XMLFile</i> | |
</b> <b> | |
<i>ContextNode</i> | |
</b> <b> | |
<i>XPathExpression</i> | |
</b> | |
</code> | |
</p> | |
<p>where <b> | |
<i>XMLFile</i> | |
</b> is an XML source file, <b> | |
<i>ContextNode</i> | |
</b> is the location path to the context | |
node, and <b> | |
<i>XPathExpression</i> | |
</b> is an XPath expression to apply to that context node.</p> | |
<table class="note"> | |
<tr> | |
<td class="noteImg"> | |
<img src="resources/note.gif" alt="note" /> | |
</td> | |
<td class="noteTxt">Keep in mind that the string value returned by an XPath expression is the string value of the first node in the | |
nodeset returned by the expresssion.</td> | |
</tr> | |
</table> | |
<p>The XPathWrapper subdirectory contains an XML file named xml.foo (part of it appears below).</p> | |
<blockquote class="source"> | |
<pre> | |
<?xml version="1.0"?> | |
<doc> | |
<name first="David" last="Marston">Mr. Marson</name> | |
<name first="David" last="Bertoni">Mr. Bertoni</name> | |
... | |
<name first="Paul" last="Dick">Mr. Dick</name> | |
</doc> | |
</pre> | |
</blockquote> | |
<p>You can try command lines like</p> | |
<p> | |
<code>SimpleXPathAPI foo.xml /doc name/@last</code> | |
</p> | |
<p>and</p> | |
<p> | |
<code>SimpleXPathAPI foo.xml / '//name[position()="4"]/@first'</code> | |
</p> | |
<table class="note"> | |
<tr> | |
<td class="noteImg"> | |
<img src="resources/note.gif" alt="note" /> | |
</td> | |
<td class="noteTxt">If a SimpleXPathAPI argument includes characters (such as *) that the shell interprets incorrectly, enclose the argument | |
in double quotes.</td> | |
</tr> | |
</table> | |
<p>See also: <a href="usagepatterns.html#xpath">Working with XPath expressions</a>.</p> | |
<a name="simplexpathcapi"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>SimpleXPathCAPI</h3> | |
<p>What it does: Use the XPathEvaluator C interface to evaluate an XPath epxeression and display the string value returned | |
by the epxression.</p> | |
<table class="note"> | |
<tr> | |
<td class="noteImg"> | |
<img src="resources/note.gif" alt="note" /> | |
</td> | |
<td class="noteTxt">Keep in mind that the string value returned by an XPath expression is the string value of the first node in the nodeset | |
returned by the epxresssion.</td> | |
</tr> | |
</table> | |
<p>Run this sample from the SimpleXPathCAPI subdirectory with</p> | |
<p> | |
<code>SimpleXPathCAPI <b> | |
<i>XMLFile</i> | |
</b> <b> | |
<i>XPathExpression</i> | |
</b> | |
</code> | |
</p> | |
<p>where <b> | |
<i>XMLFile</i> | |
</b> is an XML source file, and <b> | |
<i>XPathExpression</i> | |
</b> is an XPath expression to apply to the XML | |
source file. The SimpleXPathCAPI subdirectory contains an XML file named xml.foo identical to foo.xml in the preceding | |
example.</p> | |
<p>You can try command lines like</p> | |
<p> | |
<code>SimpleXPathCAPI foo.xml /doc/name[3]</code> | |
</p> | |
<a name="streamtransform"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>StreamTransform</h3> | |
<p>What it does: The StreamTransform class processes character input streams containing a stylesheet and an XML document, and | |
writes the transformation output to a character output stream. This sample illustrates the process for working with stylesheets | |
and documents that you assemble in memory.</p> | |
<p>You can run it from the SimpleTransform subdirectory with</p> | |
<p> | |
<code>StreamTransform</code> | |
</p> | |
<a name="threadsafe"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>ThreadSafe</h3> | |
<p>What it does: Multiple threads use a single compiled stylesheet (StylesheetRoot) and DOM source tree (XalanNode) to perform | |
transformations concurrently. The application tracks the progress of the threads in messages to the console, and each thread | |
writes its own output file. Imagine a server application responding to multiple clients who happen to request the same | |
transformation.</p> | |
<p>You can run it from the ThreadSafe subdirectory with</p> | |
<p> | |
<code>ThreadSafe</code> | |
</p> | |
<p>See also: <a href="usagepatterns.html#compiled">Compiling stylesheets</a>.</p> | |
<a name="tracelisten"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>TraceListen</h3> | |
<p>What it does: Trace events during a transformation; the transformation uses birds.xsl to transform birds.xml and writes the | |
output to birds.out.</p> | |
<p>You can run it from the TraceListen subdirectory with</p> | |
<p> | |
<code>TraceListen <b> | |
<i>traceFlags</i> | |
</b> | |
</code> | |
</p> | |
<p>where <b> | |
<i>traceFlags</i> | |
</b> is one or more of the following:</p> | |
<p> <code>-tt</code> (Trace the templates as they are being called)</p> | |
<p> <code>-tg</code> (Trace each result tree generation event)</p> | |
<p> <code>-ts</code> (Trace each selection event)</p> | |
<p> <code>-ttc</code> (Trace the template children as they are being processed)</p> | |
<p>These flags are also available in the <a href="commandline.html">command-line utility (TestXSLT)</a>.</p> | |
<p>The core of this example is the following fragment:</p> | |
<blockquote class="source"> | |
<pre> | |
// Set up a diagnostic writer to be used by the TraceListener... | |
XalanStdOutputStream theStdErr(cerr); | |
XalanOutputStreamPrintWriter diagnosticsWriter(theStdErr); | |
// Make sure that error reporting, which includes any TraceListener | |
// output does not throw exceptions when transcoding, since that could | |
// result in an exception being thrown while another exception is active. | |
// In particular, characters that the TraceListener writes might not be | |
// representable in the local code page. | |
theStdErr.setThrowTranscodeException(false); | |
// Set up the TraceListener... | |
// traceTemplates, traceTemplateChildren, traceGenerationEvent, | |
// and TraceSelectionEvent are booleans set by the command line. | |
TraceListenerDefault theTraceListener( | |
diagnosticsWriter, | |
traceTemplates, | |
traceTemplateChildren, | |
traceGenerationEvent, | |
traceSelectionEvent); | |
// Add the TraceListener to the XSLT processor... | |
theProcessor.setTraceSelects(traceSelectionEvent); | |
theProcessor.addTraceListener(&theTraceListener); | |
// Perform the transformation | |
.... | |
</pre> | |
</blockquote> | |
<a name="transformtoxercesdom"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>TransformToXercesDOM</h3> | |
<p>What it does: Performs a simple transformation but puts the result in a Xerces DOMDocument</p> | |
<p>Run this sample from the TransformToXercesDOM subdirectory with</p> | |
<p> | |
<code>TransformToXercesDOM <b> | |
<i>XMLFile</i> | |
</b> <b> | |
<i>XSLFile</i> | |
</b> | |
</code> | |
</p> | |
<p>where <b> | |
<i>XMLFile</i> | |
</b> is a source XML file, and <b> | |
<i>XSLFile</i> | |
</b> is the XLST input file. The program will use | |
<b> | |
<i>XSLFile</i> | |
</b> to transform the input file <b> | |
<i>XMLFile</i> | |
</b> using Xerces DOM as the output destination.</p> | |
<p>See the FormatterToXercesDOM usage in the sample code.</p> | |
<a name="usestylesheetparam"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>UseStylesheetParam</h3> | |
<p>What it does: Performs a transformation using top-level stylesheet parameters. There are three supported types of parameters. One is a text string. A second is a number of type double. A nodeset or parsed document can also be used.</p> | |
<p>You can run it from the UseStylesheetParam subdirectory with</p> | |
<p> | |
<code>UseStylesheetParam <b> | |
<i>xmlfile</i> | |
</b> <b> | |
<i>stylesheet</i> | |
</b> <b> | |
<i>outfile</i> | |
</b> [options]</code> | |
</p> | |
<p>where the options are:</p> | |
<p> | |
<code> -s key "'String-Value'"</code> | |
<br /> | |
<code> -n key Number</code> | |
<br /> | |
<code> -d key "Document-URL"</code> | |
</p> | |
<p>The files used by the sample program and the top-level parameter nodesets for this illustration are to be in working directory in which the sample program runs.</p> | |
<p>Using the sample program:</p> | |
<p> | |
<code>UseStylesheetParam foo.xml foo.xslt foo.out \<br /> | |
-s stringA "'This is a test string value'" \<br /> | |
-n numberA 123.012345 \<br /> | |
-d parmA "parmA.xml" \<br /> | |
-d parmB "parmB.xml"</code> | |
</p> | |
<p>The <b> | |
<i>parmA.xml</i> | |
</b> and <b> | |
<i>parmB.xml</i> | |
</b> are parsed and converted to nodesets. The stylesheet <b> | |
<i>foo.xslt</i> | |
</b> merges the contents of <b> | |
<i>foo.xml</i> | |
</b> and the parameters into the <b> | |
<i>foo.out</i> | |
</b> file.</p> | |
<p>The source sample is implemented in C++. Another example is implemented in 'C' using the XalanCAPI library <b> | |
<i>TestCAPIparm.c</i> | |
</b>. The usage interface for both is the same.</p> | |
<p>See also: <a href="usagepatterns.html#params">Setting stylesheet parameters</a>.</p> | |
<a name="xalantransform"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>XalanTransform</h3> | |
<p>What it does: XalanTransform uses the XalanTransformer class and the associated C++ API to apply an XSL stylesheet | |
file to an XML document file and write the transformation output to either an output file or to a stream. XalanTransform | |
takes command-line arguments for the XML document to be transformed, the XSL stylesheet to apply, and an optional output | |
file argument. If you omit the third argument, XalanTransform writes the transformation output to a stream that is sent to | |
standard out (the console).</p> | |
<p>You can run XalanTransform from the XalanTransform subdirectory with</p> | |
<p> | |
<code>XalanTransform foo.xml foo.xsl foo.out</code> | |
</p> | |
<p>Omit the third argument to write the transformation result to the console. See also: <a href="usagepatterns.html#xalantransformer">Using the XalanTransformer class.</a>.</p> | |
<a name="xalantransformercallback"></a> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
<h3>XalanTransformerCallback</h3> | |
<p>What it does: Return transformation output in blocks to a callback function, which writes the output to a file. | |
This sample illustrates the use of a callback function to incrementally process a transformation result, that is to begin | |
working with the transformation result before the transformation has been completed. See <a href="usagepatterns.html#incremental">Processing output incrementally</a>.</p> | |
<p>You can run it from the XalanTransformerCallback subdirectory with</p> | |
<p> | |
<code>XalanTransformerCallback foo.xml foo.xsl [foo.out]</code> | |
</p> | |
<table class="note"> | |
<tr> | |
<td class="noteImg"> | |
<img src="resources/note.gif" alt="note" /> | |
</td> | |
<td class="noteTxt">If you omit the third argument, the transformation result is written to the console.</td> | |
</tr> | |
</table> | |
<p align="right" size="2"> | |
<a href="#content">(top)</a> | |
</p> | |
</div> | |
<div id="footer">Copyright © 1999-2012 The Apache Software Foundation<br />Apache, Xalan, and the Feather logo are trademarks of The Apache Software Foundation<div class="small">Web Page created on - Fri 07/13/2012</div> | |
</div> | |
</body> | |
</html> |