<?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++ Release Notes</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++ Release Notes</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>
<a href="samples.html">Sample Apps</a>
</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://xalan.apache.org/old/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++ Release Notes</h2>
<p>Release notes for Xalan-C++ Version 1.11</p>
 <ul>
  <li>
<a href="#status">Status</a>
</li>
  <li>
<a href="#build">Rebuilding Xalan-C++ and the sample applications</a>
</li> 
  <li>
<a href="#contact">Getting in touch</a>
</li>
  <li>
<a href="#history">History of software changes</a>
</li>  
 </ul>
 <a name="status">‌</a>
 <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>Status</h3>
   <ul>
    <li>
<a href="#done">Changes for Xalan-C++ version 1.8</a>
</li>
    <li>
<a href="#bugs">Bug reporting</a>
</li>    
    <li>
<a href="#xml4c">Version of Xerces-C++ to use</a>
</li>
    <li>
<a href="#to-do">To-do tasks for future Xalan-C++ releases</a>
</li>
   </ul>
   <a name="done">‌</a>
   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 1.8</h4>
     <p>Major updates since version 1.7 include:</p>
     <ul>
      <li>
<a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=10582&amp;version=10833">XalanC bugs fixed for this release</a>.</li>
      <li>Upgrade from Xerces-C 2.4 to Xerces-C 2.5. </li>
      <li>Provide build support for Cygwin and HP-UX 11.00 on Itanium.  Although binary distributions are not provided for the Cygwin environment and 
          HP-UX 11.00 on Itanium platform, the build configuration files provided in the source distribution can be used to build on these platforms. </li>
      <li>Project files for supporting Microsoft Visual Studio .NET.  Although a binary distribution for the Microsoft Visual Studio .NET 
          is not provided in this release, Visual Studio solution files are provided in the Windows source distribution for those who choose to build
          on this platform.  Please see <a href="#dotNet">"Step for doing a Windows Build with Visual Studio .NET"</a> for details.</li>
      <li>Additional changes to Xerces Deprecated DOM support.  This is another step towards phasing out the support for Xerces Deprecated DOM.  
          Users are encouraged to modify their applications to interface with the new Xerces DOM support.  
          For more information on the effects of these changes to your build environment, please see 
          <a href="#xercesdepdom">"Steps for doing a Build with Xerces Deprecated DOM Support"</a>
</li>
      
      <li>Implemented optimizations to significantly improve the throughput of the ICU-enabled "format-number" function.</li>
      <li>Changes in the XML Serializer. The serializer will no longer put a newline after the xml header tag unless indent="yes". See bugzilla <a href="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=24304">24304</a> and <a href="http://nagoya.apache.org/bugzilla/show_bug.cgi?id=28386">28386</a>.</li>
     </ul>  
     

   <a name="bugs">‌</a>
   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Bug reporting</h4>
     <p>All known Xalan-C++ bugs are listed in <a href="https://issues.apache.org/jira/browse/XALANC">JIRA (the Apache bug database)</a>. For a list of open bugs with links to each bug
      report, see <a href="https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&amp;mode=hide&amp;jqlQuery=project+%3D+XALANC+AND+resolution+%3D+Unresolved+ORDER+BY+updated+DESC">XalanC open bugs</a>. If you find a new bug, please enter a XalanC bug report in this
      database.</p>
     <table class="note">
<tr>
<td class="noteImg">
<img src="resources/note.gif" alt="note" />
</td>
<td class="noteTxt">Before you can enter your first bug report, you must submit your email address to Jira and receive a password.</td>
</tr>
</table> 
     <p>We strongly encourage you write patches for problems you find and submit them to
      xalan-dev@xml.apache.org. We review the patches we receive to make sure they do not break something else, and (assuming they 
     do not) include them in our next release. In the interest of fixing bugs, adding enhancements, and addressing outstanding design
     issues, we sincerely want (and need!) your active participation in the ongoing development of Xalan.</p>
     <a name="xml4c">‌</a>     
     <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Version of Xerces-C++ to use</h4> 
<p>Xalan-C++ Version 1.11 has been tested with Xerces-C++ version 3.1.1.</p>
<p>For information about including the Xerces-C++ libraries on the path, 
   see <a href="install.html#path">Setting up the system path</a>.</p>
<p>
<b>Important:</b> You may experience unpredictable anomalies if your 
   Xalan and Xerces builds are not in synch. If you download an update to Xalan, 
   check the release notes to determine which version of Xerces you should use.</p>
<p>If you compile both Xalan-C++ and Xerces-C++ from distribution sources using the same 
   platform and compiler, you will avoid most of the compatibility issues.</p>

<a name="to-do">‌</a>
<p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>To-do tasks for future Xalan-C++ releases</h4>
    <ul>
       <li>Update the documentation</li>
       <li>Performance improvements</li>
       <li>Add a more complete set of EXSLT functions</li>
       <li>Add support for extension elements</li>
       <li>Fix any conformance bugs we or our users find</li>
       <li>Fix compiler and platform support issues</li>
       <li>Add XPath2 support into Xalan-C++</li>
    </ul>
 <p>Watch the <a href="mailto:dev@xalan.apache.org">Xalan Development Mailing List</a> for more information and for 
    ideas about how you can get involved.
</p>
    
     
  <a name="build">‌</a>
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>Rebuilding Xalan-C++</h3>
<ul>
<li>
<a href="#jar">Rebuilding Xalan-C++</a>
</li>
<li>
<a href="#samples">Rebuilding sample applications</a>
</li>
</ul>
<a name="jar">‌</a> 
   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Rebuilding Xalan-C++</h4>
   <ul>
    <li>
<a href="#needed">What you need from the distributions</a>
</li>   
    <li>
<a href="#win32">Steps for doing a Windows Build</a>
</li>
    <li>
<a href="#dotNet">Steps for doing a Windows Build with Visual Studio .NET</a>
</li>
    <li>
<a href="#unix">Steps for doing a UNIX build</a>
</li>       
    <li>
<a href="#locale">Steps for doing a Build with Message Localization Support</a>
</li>
    <li>
<a href="#xercesdepdom">Steps for doing a Build with Xerces Deprecated DOM Support</a>
</li>
   </ul>
<a name="needed">‌</a>
   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>What you need from the distributions</h4>
   <p>To rebuild Xalan-C++, you need the Xalan-C++ source files, the Xerces-C++ header files, and
   for Windows the Xerces-C++ .lib file. If you want to rebuild with the ICU, you will need to download the ICU source package to build the ICU libraries. </p>

<table class="note">
<tr>
<td class="noteImg">
<img src="resources/note.gif" alt="note" />
</td>
<td class="noteTxt">You can also download Xalan-C++ source distributions from <a href="http://www.apache.org/dyn/closer.cgi/xalan/xalan-c">Xalan-C downloads</a>: Xalan-C_1_11_0-src.zip and Xalan-C_1_11_0-src.tar.gz. Xerces-C++ source distributions are available from <a href="http://www.apache.org/dyn/closer.cgi/xerces/c">Xerces-C downloads</a>: 
xerces-c-3.1.1-src.zip and xerces-c-3.1.1-src.tar.gz.</td>
</tr>
</table>
<p>Keep in mind that at any given point in time the Xalan-C++ and Xerces-C++ source trees in the Apache XML repository may not be consistent. When we release a version of Xalan-C++ we certify that it is compatible with a given version of Xerces-C++. To be safe, use the Xerces distributions that we certify as compatible. Reminder: Xalan-C++ Version 1.11 is compatible with Xerces-C++ version 3.1.1.</p>
   <p>For information on using the <a href="http://oss.software.ibm.com/icu/index.html">International Components for Unicode (ICU)</a>, see
   <a href="usagepatterns.html#icu">Using the ICU</a>.
   The recommended version of ICU for Xalan-C++ Version 1.11 is International Components for Unicode(ICU) version 3.2. You may be able to use newer ICU releases as they appear.</p>
   <a name="win32">‌</a>
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Steps for doing a Windows build</h4>
  <p>To build Xalan-C++ on Windows, you need Xerces-C++ and MS Visual C++ 6.0 installed with Service Pack 5 for Visual C++ and Visual Studio .NET.</p> 
  <p>If you are using a different Service Pack, you must rebuild all of the Xerces and Xalan binaries.</p>
<p>Before you do the following, be sure you have <a href="getstarted.html#windowspath">provided Visual C++ the paths to the Xerces headers and libraries</a>.</p>
  <ol>    
    <li>Create the ICUROOT environment variable and set it the the path of the ICU root.</li>
    <li>Create the XERCESCROOT environment variable and set it to the path of the root of Xerces-C++.</li>
    <li>Use Visual C++ to open the Xalan workspace (.dsw) from the xml-xalan\c\Projects\Win32\VC6.  If you are building with ICU, then use XalanICU.dsw.  Otherwise, open the Xalan.dsw workspace.<br />
<br />
    <table class="note">
<tr>
<td class="noteImg">
<img src="resources/note.gif" alt="note" />
</td>
<td class="noteTxt">You may need to restart Visual Studio .NET in order for ICUROOT and XERCESCROOT to take effect.</td>
</tr>
</table>
    <br />
    As an alternative method to the steps described above, would be to go to "Tools" and select "Options" from Visual C++.  From the "Options" window, click on the "Directories" tab and do the following:
    <ol>
    <li>Show Directories for: Executable files.  Add the Xerces bin directory to the list.</li>
    <li>Show Directories for: Include files.  Add the Xerces include directory to the list.  If you are building with ICU, add the ICU include directory to the list as well.</li>
    <li>Show Directories for: Library files. Add the Xerces lib directory to the list.  If you are building with ICU, add the ICU lib directory to the list as well.</li>
    </ol>
</li>
  </ol>
  <table class="note">
<tr>
<td class="noteImg">
<img src="resources/note.gif" alt="note" />
</td>
<td class="noteTxt">To recompile existing applications without changing your source code, be sure to modify your Project settings to pick up the Xalan headers in its new location. (see image below)</td>
</tr>
</table>
  <p>
<img src="options-sane.gif" alt="Visual C++ 6.0 Include Directories change" />
</p>

<a name="dotNet">‌</a>
<p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Steps for doing a Windows Build with Microsoft Visual Studio .NET</h4>
  <p>For users who want to build with Visual Studio .NET,</p>
  <ol>
    <li>Create the ICUROOT environment variable and set it the the path of the ICU root.</li>
    <li>Create the XERCESCROOT environment variable and set it to the path of the root of Xerces-C++.</li>
    <li>Use Visual Studio .NET to open the Xalan solution (.sln) from the xml-xalan\c\Projects\Win32\VC7.  If you are building with ICU, then use XalanICU.sln.  Otherwise, open the Xalan.sln solution file.<br />
<br />
    <table class="note">
<tr>
<td class="noteImg">
<img src="resources/note.gif" alt="note" />
</td>
<td class="noteTxt">You may need to restart Visual Studio .NET in order for ICUROOT and XERCESCROOT to take effect.</td>
</tr>
</table>
    <br />
    An alternative method to the steps described above, would be to go to "Tools" and select "Options" from Visual Studio .NET.  From the "Options" window, click on the "Projects" folder to expand the list.  Select "VC++ Directories" from the list and do the following:
    <ol>
    <li>Show Directories for: Executable files.  Add the Xerces bin directory to the list.</li>
    <li>Show Directories for: Include files.  Add the Xerces include directory to the list.  If you are building with ICU, add the ICU include directory to the list as well.</li>
    <li>Show Directories for: Library files. Add the Xerces lib directory to the list.  If you are building with ICU, add the ICU lib directory to the list as well.</li>
    </ol>
</li>
  </ol>
  <table class="note">
<tr>
<td class="noteImg">
<img src="resources/note.gif" alt="note" />
</td>
<td class="noteTxt">To recompile existing applications without changing your source code, be sure to modify your Project settings to pick up the Xalan headers in its new location. (see image below)</td>
</tr>
</table>
  <p>
<img src="NET_options.jpg" alt="Visual Studio .NET Include Directories change" />
</p>
  <a name="unix">‌</a>
<p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Steps for doing a UNIX build</h4>
    <p>For users who want to build in the UNIX environment,</p>
    <ol>
      <li>The Xalan build files are written for GNU make, and will not work with other make utilities.<br />
<br />
</li>    
      <li>Set the XERCESCROOT environment variable to the path to the root of Xerces-C++.<br />
<br />
</li>    
      <li>Set the XALANCROOT environment variable to the path to the c directory in the root of the Xalan-C++
       distribution.  For example, if the distribution is located in "/home/mydir", you would set the XALANCROOT to "/home/mydir/xml-xalan/c". <br />
<br />
</li>
      <li>(Optional) If you are including the ICUBridge, install the ICU, use the shell to define XALAN_USE_ICU and to set the ICUROOT environment variable to the path to the ICU root. For more information, see (see <a href="usagepatterns.html#icu">Using the ICU</a>).  Note that building Xalan with ICU requires that Xerces must also be built with ICU.<br />
<br />
</li>
      <li>Change directory to XALANCROOT. You can also 
          build Xalan-C outside of the source tree, but you will need to adjust the path to the
          runConfigure script in the next step.<br />
<br />
</li>      
      <li>Run the runConfigure utility and provide the platform, C compiler, and C++ compiler flags as 
          indicated below.  The runConfigure utility is used to generate the appropriate Makefile for 
          the desired build platform based on the options specified by the user. Valid options for the 
          runConfigure utility are:<br />
<br />
          <code>./runConfigure -p &lt;value&gt; -c &lt;value&gt; -x &lt;value&gt; [-[flag] &lt;value&gt;]</code>
<br />
<br />
          <table border="1">
          <tr>
<th class="content" rowspan="1" colspan="1">flag</th>
<th class="content" rowspan="1" colspan="1">Description</th>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">p</td>
<td class="content" rowspan="1" colspan="1">Build platform. Option must be provided by user. Valid values <br />include: 
          aix, linux, freebsd, netbsd, solaris, hp-10, hp-11, hp-11-ia64, irix,<br /> tru64, macosx, cygwin. </td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">c</td>
<td class="content" rowspan="1" colspan="1">C compiler name. Example: gcc, cc, c89, xlc_r, etc.</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">x</td>
<td class="content" rowspan="1" colspan="1">C++ compiler name. Example: g++, xlC_r, CC, etc.</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">d</td>
<td class="content" rowspan="1" colspan="1">Indicates build is a debug build. Takes no values. Default is no <br />debug.</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">t</td>
<td class="content" rowspan="1" colspan="1">Transcoder to use. Valid value is 'icu'. Default is null.</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">m</td>
<td class="content" rowspan="1" colspan="1">Type of localization support method. Valid values include: inmem, <br />icu, and nls. 
          Default is inmem.</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">M</td>
<td class="content" rowspan="1" colspan="1">Locale for Message Localization Support. Default is "en_US"</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">r</td>
<td class="content" rowspan="1" colspan="1">Threads option. Valid values include: pthread or dce. Default is <br />dce</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">b</td>
<td class="content" rowspan="1" colspan="1">Specify whether it is a 32-bit or 64-bit build. Valid values are 32 <br />and 64. 
          Default is 32-bit</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">P</td>
<td class="content" rowspan="1" colspan="1">Install root directory. Used if invoking build with gmake install or <br />gmake 
          install-package. Default install root directory is /usr/local</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">l</td>
<td class="content" rowspan="1" colspan="1">Extra link options other than the default. Default is null</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">z</td>
<td class="content" rowspan="1" colspan="1">Extra compiler options other than the default. Default is null</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">C</td>
<td class="content" rowspan="1" colspan="1">Extra configuration options.</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">h</td>
<td class="content" rowspan="1" colspan="1">To get help on the above commands. Default is no help.</td>
</tr>
          </table>
<br />
          <b>
<i>Linux using GCC:</i>
</b>  <code>./runConfigure -p linux -c gcc -x c++</code>
<br />
          <b>
<i>Linux using the Intel compiler:</i>
</b>  <code>./runConfigure -p linux -c icc -x icpc</code>
<br />
          <b>
<i>AIX (32-bit):</i>
</b>    <code>./runConfigure -p aix -c xlc_r -x xlC_r</code>
<br />
<br />
          <b>
<i>AIX (64-bit):</i>
</b>    <code>./runConfigure -p aix -c xlc_r -x xlC_r -b 64</code>
<br />
<br />
          <b>
<i>Cygwin (32-bit):</i>
</b>  <code>./runConfigure -p cygwin -c gcc -x g++</code>
<br />
<br />
          <b>
<i>HP-UX 11 (32-bit):</i>
</b>  <code>./runConfigure -p hp-11 -c cc -x aCC</code>
<br />
<br />
          <b>
<i>HP-UX 11 (64-bit):</i>
</b>  <code>./runConfigure -p hp-11 -c cc -x aCC -b 64</code>
<br />
<br />
          <b>
<i>HP-UX 11 for Itanium (32-bit):</i>
</b>  <code>./runConfigure -p hp-11-ia64 -c cc -x aCC</code>
<br />
<br />
          <b>
<i>HP-UX 11 for Itanium (64-bit):</i>
</b>  <code>./runConfigure -p hp-11-ia64 -c cc -x aCC -b 64</code>
<br />
<br />
          <b>
<i>Solaris (32-bit):</i>
</b>  <code>./runConfigure -p solaris -c cc -x CC</code>
<br />
<br />
          <b>
<i>Solaris (64-bit):</i>
</b>  <code>./runConfigure -p solaris -c cc -x CC -b 64</code>
<br />
<br />
          If you choose to install the distribution after building the libraries and executables, 
          then you will need to indicate where you would like the distribution to be installed. 
          To specify the install directory for your distribution, specify the flag -P &lt;install directory&gt;. 
          For example, building and installing on the AIX platform:<br />
<br />
          <code>./runConfigure -p aix -c xlc_r -x xlC_r -P $HOME/my_xalan</code>
<br />
<br />
          <table class="note">
<tr>
<td class="noteImg">
<img src="resources/note.gif" alt="note" />
</td>
<td class="noteTxt">The standard binary directories bin, lib, and include are created in the specified directory only if the install or install-package option is 
          specified in the build process.<br />
<br />
</td>
</tr>
</table>
          To see the other runConfigure flags you may include, use the help flag:<br />
<br />
               <code>./runConfigure -h</code>
<br />
<br />
</li>
      <li>Purge the previous build:<br />
<br />
          <code>     make clean</code>
<br />
<br />
</li>
      <li>Run the new build:<br />
<br />
               <code>make</code>
<br />
          or<br />
               <code>make <b>
<i>targ</i>
</b>
</code>
<br />
<br />
          where <b>
<i>targ</i>
</b> can be one of:
          <table border="1">
          <tr>
<th class="content" rowspan="1" colspan="1">targ</th>
<th class="content" rowspan="1" colspan="1">Description</th>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">all</td>
<td class="content" rowspan="1" colspan="1">Build the libraries and Xalan executable. This is the default target <br />if no targ 
          is specified.</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">clean</td>
<td class="content" rowspan="1" colspan="1">Deletes existing binaries, executables, libraries, tests, and <br />samples.</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">install</td>
<td class="content" rowspan="1" colspan="1">Build the library, executables and copy them (along with <br />the header files) 
          the specified install location.</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">install-package</td>
<td class="content" rowspan="1" colspan="1">Installs the library, executables, samples to the <br />specified location.</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">Samples</td>
<td class="content" rowspan="1" colspan="1">Builds the samples.</td>
</tr>
          <tr>
<td class="content" rowspan="1" colspan="1">Tests</td>
<td class="content" rowspan="1" colspan="1">Builds the tests.</td>
</tr>
          </table>
      </li>
    </ol>
    <table class="note">
<tr>
<td class="noteImg">
<img src="resources/note.gif" alt="note" />
</td>
<td class="noteTxt">To recompile existing applications without changing your source code, be sure to modify the command line in your Makefile to pick up the Xalan headers from it's new location. e.g:  if your xalan source location is in /home/xml-xalan/c,</td>
</tr>
</table>
<p>
    <br />       <code>CC ... -I/home/xml-xalan/c/src -I/home/xml-xalan/c/src/xalanc mysrc.cpp</code>
<a name="64">‌</a>
</p>
   
   <a name="locale">‌</a>
   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Steps for doing a Build with Message Localization Support</h4>
   <p>Message Localization Support is a new feature to allow users to build Xalan-C++  such that 
   diagnostic messages are issued in the language of their choice. Message localization support 
   comes in three flavours:</p>
   <ul>
   <li>Building static messages in the form of a library (DLL or shared object) which can be bound 
   to the Xalan executable. This method is referred to as "in memory".  By default, Xalan-C++ is built using "in memory" method.
   </li>
   <li>Building messages in the form of a library using localization support provided by the 
   International Components for Unicode (ICU). </li>
   <li>Building messages in the form of a message catalog. This method utilizes the localization 
   support provided by the Unix National Language Support (NLS) system. This method is supported 
   for UNIX platforms only. </li>
   </ul>
   <p>Regardless of which method you choose, a message file containing translated messages in the 
   language of your choice must be provided. The standard message file provided in the Xalan-C++ 
   version 1.8 source package is in XML Localization Interchange File Format (XLIFF) format 
   and conforms to the XLIFF 1.1 standard (please see 
   <a href="http://www.oasis-open.org/committees/xliff/documents/xliff-specification.htm">
   http://www.oasis-open.org/committees/xliff/documents/xliff-specification.htm</a> for more 
   information.) All message files must be written and conform with the XLIFF 1.1 standard.</p>
   <p>Once an XLIFF message file has been created, the XLIFF file should be stored under 
   xml-xalan/c/src/xalanc/NLS/&lt;locale_name&gt; directory (for example, the default XLIFF message file 
   provided is XalanMsg_en_US.xlf). To build, you will need to follow the same steps 
   as shown above for building in Unix or Windows but with a small change.</p>
   <p>For building on Windows platform with "In Memory" method:</p>
   <ol>
   <li>Create the environment variable XERCESCROOT and set it to the path to the root of Xerces-C++.</li>
   <li>Create the environment variable ICUROOT and set it to the path to the ICU root.</li>
   <li>Open the Xalan.dsw workspace using Microsoft Visual C++. The "inmem" localization method should be configured by default.</li>
   <li>Select the Localization project, and go to Settings and click on the "General" tab.Verify 
   the build command line to use "nmake /f BuildMessages.mak TYPE=inmem LOCAL=en_US"</li>
   <li>Run "Build all" with the configuration of your choice. </li>
   </ol>
   <p>For building on the Windows platform with ICU method:</p>
   <ol>
   <li>Create the environment variable XERCESCROOT and set it to the path to the root of Xerces-C++.</li>
   <li>Create the environment variable ICUROOT and set it to the path to the ICU root.</li>
   <li>Open the XalanICU.dsw workspace using Microsoft Visual C++. </li>
   <li>Select the AllInOneWithICU project, and ensure that the project depends on the LocalizationWithICU 
   project. </li>
   <li>Select the LocalizationWithICU project, and go to Settings and click on the "General" tab. Modify 
   the build command line to use "nmake /f BuildMessages.mak TYPE=icu LOCAL=en_US"</li>
   <li>Open the tools.ini file under Projects\Win32\VC6\Utils\Localization and add the ICU root 
   directory to the ICUROOT variable setting.</li>
   <li>Run "Build all" with the configuration of your choice. </li>
   </ol>
   <p>For building on the Unix platform:</p>
   <ol>
   <li>Repeat steps 1 through 5 as outlined under "Steps for doing a UNIX Build" </li>
   <li>Run the runConfigure and provide the platform, C compiler, C++ compiler, the message locale 
   system flavour you are intending to build, and the locale support.<br />
<br />
   Example 1: to use the NLS method for localization support using the default locale en_US:<br />
<br />
   <b>
<i>AIX (32-bit):</i>
</b>  <code>./runConfigure -p aix -c xlc_r -x xlC -m nls</code>
<br />
<br />
   <b>
<i>AIX (64-bit):</i>
</b>  .<code>/runConfigure -p aix -c xlc_r -x xlC_r -b 64 -m nls</code>
<br />
<br />
   Example 2: to use the 'icu' method for localization support using the locale fr_FR:<br />
<br />
   <b>
<i>AIX (32-bit):</i>
</b>  <code>./runConfigure -p aix -c xlc_r -x xlC_r -m icu -M fr_Fr</code>
<br />
<br />
   <b>
<i>AIX (64-bit):</i>
</b>  <code>./runConfigure -p aix -c xlc_r -x xlC_r -b 64 -m icu -M fr_Fr</code>
<br />
<br />
   </li>
   <li>Perform steps 7 and 8 as outlined under "Steps for doing a UNIX Build" </li>
   </ol>
   <p>After Xalan-C++ and associated libraries have been successfully built, the message catalog 
   will be stored in the directory xml-xalan/c/bin.<br />
<br />
   <table border="1">
   <tr>
<th class="content" rowspan="1" colspan="1">Localization Build Type</th>
<th class="content" rowspan="1" colspan="1">File Name</th>
</tr>
   <tr>
<td class="content" rowspan="1" colspan="1">
<b>
<i>ICU or "in memory" method:</i>
</b>
</td>
<td class="content" rowspan="1" colspan="1">libxalanMsg18.so (for UNIX)<br />
   XalanMessages_1_8.dll and XalanMessages_1_8.lib (for Windows)
   </td>
</tr>
   <tr>
<td class="content" rowspan="1" colspan="1">
<b>
<i>NLS method:</i>
</b>
</td>
<td class="content" rowspan="1" colspan="1">xalanMsg1_8.cat can be found in $XALANCROOT/nls/&lt;locale_name&gt;/ directory</td>
</tr>
   </table>
   </p>
   <p>The location of the message library, Xalan-C++ and Xerces-C++ binaries need to be added to the PATH and 
   library path variables. Depending on the Message Localization Support method you've chosen, the 
   following steps will need to be performed such that Xalan-C++ will be able to utilize the message 
   library. </p>
   <ul>
   <li>For an "in memory" or "icu" build, the location of the Xalan-C++ and Xerces-C++ executables need to 
   be added to the PATH variable. The location of the message library will need to be added to: 
   <ul>
   <li>the LIBPATH variable for AIX users </li>
   <li>the LD_LIBRARY_PATH variable for RedHat, SuSE, and Solaris users </li>
   <li>the SHLIB_PATH variable for HP-UX users. </li>
   </ul>
</li>
   <li>For an NLS build, the message catalog will need to be added to the NLSPATH. </li>
   </ul>   
      
   <a name="xercesdepdom">‌</a>
   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Steps for doing a Build with Xerces Deprecated DOM Support</h4>
   <p>If you application is dependent on the XercesBridge classes to interface with the deprecated Xerces DOM, then the following steps must be taken.</p>
   <p>For a Windows build using Microsoft Visual C++ version 6.0:</p>
   <ol>
   <li>Open the Xalan.dsw workspace</li>
   <li>Go to "Projects" and select "Settings".  From the "Project Settings panel", highlight the AllInOne project.</li>
   <li>Click on the "C/C++" tab on the right hand side.  From the "Category" pull down menu, scroll down to find "Preprocessor" and click to highlight this category.</li>
   <li>Under the "Preprocessor Definitions" box, add "XALAN_BUILD_DEPRECATED_DOM_BRIDGE" to the list of definitions.</li>
   <li>Rebuild Xalan-C++ as described under <a href="#win32">"Steps for doing a Windows Build"</a>
</li>
   </ol>
   <p>For a UNIX build, the following parameter should be added to your runConfigure step: <code>-z -DXALAN_BUILD_DEPRECATED_DOM_BRIDGE</code>.  for example,</p>
       <code>./runConfigure -p aix -c xlc_r -x xlC_r -z -DXALAN_BUILD_DEPRECATED_DOM_BRIDGE</code>
<br />
<br />

   
   <a name="samples">‌</a>
   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Rebuilding a Sample application</h4>
   <p>In the 32-bit Windows distribution, all of the sample applications can be built from the Xalan.dsw Visual C++ workspace.</p>
<p>The Makefile that come with the UNIX distributions include targets for rebuilding one or all of the sample applications . To rebuild one or more sample applications, go to the root directory of your source package or the samples directory of your binary package, 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> (Windows only), <code>TraceListen</code>, <code>TransformToXercesDOM</code>, <code>UseStylesheetParam</code>, <code>XPathWrapper</code>, <code>XalanTransform</code>, or <code>XalanTransformerCallback</code>.</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="contact">‌</a>
 <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>Getting in Touch</h3>
  <p>Your feedback is more than welcome. Offers of help are even more so! Perhaps you would like to contribute to the ongoing development, testing, or documentation of Xalan-C++.</p> 
<p>Please email your comments, questions, suggestions, bug reports, and offers to help to <a href="mailto:dev@xalan.apache.org">Xalan Development Mailing List</a>.</p>
 <a name="history">‌</a>
 <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h3>Cumulative history of software changes</h3>
   <p>The following sections list the changes in each release since Xalan-C++ version 0.40.0.</p>
   

<p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 1.11</h4>
<p>This is a general bug fix release with added stability features.
   Many null pointer references have been fixed.</p>
<p>Major updates since version 1.10 include:</p>
<ul>
  <li>Add support for Xerces-C 3.0 and newer</li>
  <li>Drop support for Microsoft Studio (VC6)</li>
  <li>Fix support issues for AIX 5.3</li>
  <li>Fix support issues for Solaris 2.8</li>
  <li>Fix support issues for Solaris 2.10</li>
  <li>Fix support issues for GCC-4.3</li>
  <li>Add support for Microsoft .NET 2008 (VC9) </li>
  <li>Add support for Microsoft .NET 2010 (VC10)</li>
  <li>Add number and nodeset types as top-level stylesheet parameters</li>
  <li>Allow separation of compiler CFLAGS and CXXFLAGS for UNIX builds</li>
  <li>Xalan-C documentation rewrite and reorganize</li>
  <li>Parent Apache XML Project has been retired</li>
  <li>
<a href="#bugfix11">Bugs fixed in this release</a>.</li>
</ul>


<p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 1.10</h4>
<p>Major updates since version 1.9 include:</p>
<ul>
  <li>Support for XML 1.1 and Namespaces in XML 1.1.</li>
  <li>Added support for IBM XLC 7.0 compiler on AIX.</li>
  <li>Improved and stabilized C pluggable memory management functionality.</li> 
  <li>Various improvements in Xalan XML serializers for better performance and stability.</li>
  <li>Upgrade from Xerces-C 2.6 to Xerces-C 2.7.</li>
 </ul>  
  

<p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 1.9</h4>
<p>Major updates since version 1.8 include:</p>
<ul>
  <li>Pluggable Memory Management.  This feature allows applications to maintain precise control over memory allocations.  This 
      will allow users, with knowledge of their application's characteristics, to provide a more efficient allocation method 
      than the general purpose procedures provided by the system.  for more information on how to use this feature, please see
      the <a href="programming.html#memory">Pluggable Memory Management</a> section of the Programming page.</li>
  <li>Improved stability on the execution of large stylesheets and XML documents.  Because the current implementation relies on 
      function recursion, certain stylesheets/input documents may cause the program stack to overflow and cause the application 
      to fail.  It also may inhibit executing stylesheets that are heavily dependent on recursive functions.  This feature will 
      prevent these types of failure. </li>
  <li>Provided a global option to pool all text node strings.  This feature allows developers to set a flag to determine if a 
      parsed source tree will pool the values of all of the text nodes in the XML document.  By doing so, this can result in a 
      significant reduction in memory usage, particularly if there are a lot of repeated values in text nodes.  Please see 
      the class descriptions for <a href="apiDocs/classXalanSourceTreeDocument.html">XalanSourceTreeDocument</a>,  
      <a href="apiDocs/classXalanDefaultParsedSource.html">XalanDefaultParsedSource</a>, and
      <a href="apiDocs/classXalanTransformer.html">XalanTransformer</a> in the <a href="apiDocs/index.html">
      API Reference</a> section for more information.</li> 
  <li>Added support for Microsoft Studio .NET V7.1.  Project files for Microsoft Studio .NET V7.1 have been provided under the 
      directory xalan\c\Projects\Win32\VC7.1.</li>
  <li>Upgrade from Xerces-C 2.5 to Xerces-C 2.6. </li>
 </ul>  


   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 1.8</h4>
     <p>Major updates since version 1.7 include:</p>
     <ul>
      <li>Upgrade from Xerces-C 2.4 to Xerces-C 2.5. </li>
      <li>Provide build support for Cygwin and HP-UX 11.00 on Itanium.  Although binary distributions are not provided for the Cygwin environment and 
          HP-UX 11.00 on Itanium platform, the build configuration files provided in the source distribution can be used to build on these platforms. </li>
      <li>Project files for supporting Microsoft Visual Studio .NET.  Although a binary distribution for the Microsoft Visual Studio .NET 
          is not provided in this release, Visual Studio solution files are provided in the Windows source distribution for those who choose to build
          on this platform.  Please see <a href="buildlibs.html#winbldenv">"Step for doing a Windows Build with Visual Studio .NET"</a> 
          for details.</li>
      <li>Additional changes to Xerces Deprecated DOM support.  This is another step towards phasing out the support for Xerces Deprecated DOM.  Users 
          are encouraged to modify their applications to interface with the new Xerces DOM support.  For more information on the effects of these 
          changes to your build environment.</li>
      
      <li>Implemented optimizations to significantly improve the throughput of the ICU-enabled "format-number" function.</li>
      <li>Changes in the XML Serializer. The serializer will no longer put a newline after the xml header tag unless indent="yes".</li>

     </ul>  
     
   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 1.7</h4>
     <p>Major updates since version 1.6 include:</p>
     <ul>
      <li>Message Localization Support. This feature enables Xalan-C++ to issue diagnostic messages 
      in languages other than the default language (English). In order to utilize this feature, 
      the user must provide a version of the Xalan-C++ message catalog that has been translated in 
      their language of choice.</li>
      <li>Build, packaging, and installation improvements. Changes to the Xalan-C++ makefiles now 
      allow for a more flexible build, packaging, and install process. Each step in a typical 
      build process can be invoked by specifying the appropriate target, for example to build the 
      executable, and/or samples, or install the build at user-specified location. For more 
      information on building Xalan-C++, please see 
      <a href="buildlibs.html#unixbldenv">Steps for doing a Unix build</a>.</li>
      <li>Deprecated DOM Support. The XercesBridge classes have been marked deprecated and moved 
      into an exclusive directory within the xalanc/XercesParserLiaison directory called 
      'Deprecated'. If your application is dependent on these classes to interface with the 
      deprecated Xerces DOM you must alter your include directive with the 'Deprecated' directory. 
      For example:<br />
<br />
      <code>#include "xalanc/XercesParserLiaison/XercesDocumentBridge.hpp"</code>
<br />
<br />
      should be changed to:<br />
<br />
      <code>#include "xalanc/XercesParserLiaison/Deprecated/XercesDocumentBridge.hpp"</code>
<br />
<br />
</li>
      <li>Upgrade from Xerces-C 2.3 to Xerces-C 2.4. </li>
      <li>Porting of ThreadSafe example to UNIX platform.</li>
      <li>Implementation of EXSLT string extension functions encode-uri() and decode-uri(). </li>
      <li>Implementation of EXSLT dynamic extension function evaluate(). </li>
      <li>Implementation of EXSLT date-time extension function date-time().</li>
     </ul>  
     

   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 1.6</h4>
     <p>Major updates since version 1.5 include:</p>
     <ul>
	<li>Directory "sane include" reorganization.  A new sub-directory called 'xalanc' has been added to the src directory (for source distribution packages) and include directory (for binary distribution packages).  New source files which include Xalan headers will need to be modified to include the 'xalanc' prefix in the header path.  
            For example: <br />
<br />
            <code>#include &lt;XPath/XObject.hpp&gt;</code>
<br />
<br />
            will need to be changed to <br />
<br />
            <code>#include &lt;xalanc/XPath/XObject.hpp&gt;</code>
<br />
<br />
            For Windows users, all project files have been modified to reflect this change.  
            For UNIX users, please see 
            <a href="buildlibs.html#unixbldenv">Steps for doing a UNIX build</a> 
            for migration considerations.</li>
     </ul>  
     

   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 1.5</h4>
     <p>Major updates since version 1.4 include:</p>
     <ul>
	<li>For Windows, Xalan-C++ is now packaged as a single DLL.  The project files to build separate DLLs are now deprecated and will not be maintained.</li>
	<li>Support for Xerces-C++ DOMNode classes.</li>
	<li>New sample <b>TransformToXercesDOM</b> that illustrates how to perform a transform resulting in a Xerces-C++ DOMDocument</li>
	<li>Usage of the Xerces-C++ C++ namespace and creation of Xalan-C++ namespace.</li>
     </ul>  
     
   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 1.4</h4>
     <p>Major updates since version 1.3 include:</p>
     <ul>
       <li>The Xalan-C++ distributions no longer include the Xerces-C++ headers and libraries. 
           Accordingly, you must download the appropriate Xerces-C++ distribution 
           (see <a href="download.html">Downloading what you need</a>.</li>
       <li>64-bit build for HP-11; untested 64-bit support for Solaris and AIX.</li>
       <li>New Linux platform and compiler: Redhat 7.2 with gcc 3.1.</li>
       <li>
<a href="http://www.stlport.org/">STLport</a> is no longer required on any of our supported platforms.</li> 
       <li>
<a href="extensionslib.html#exslt">Alpha support for a number of EXSLT functions</a>.</li>       
       <li>
<a href="samples.html#parsedsourcewrappers">ParsedSourceWrappers</a>, a sample that
       illustrates how to perform transformations with input in the form of a pre-built
       XalanDOM or XalanSourceTree.</li>
     </ul>  
     
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 1.3</h4>
    <p>Major updates since version 1.2 include:</p>
     <ul>
       <li>A new and simplified command-line utility: <a href="commandline.html#xalanexe">the Xalan executable</a>
</li>
       <li>New XPath samples exploiting the XPathEvaluator C API and illustrating serialization of an XPath result set: <a href="samples.html#simplexpathcapi">SimpleXPathCAPI</a> and <a href="samples.html#serializenodeset">SerializeNodeSet</a>
</li>
       <li>A new <a href="usagepatterns.html#xercesdomwrapperparsedsource">wrapper class</a> that lets you pass in a Xerces DOM as input for a transformation</li>
       <li>Bug fixes.</li>
       <li>Changed XPathException to XalanXPathException because of a clash with a new Xerces class of the same name.</li>
      </ul>
     
  <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 1.2</h4>
    <p>Major updates since version 1.1 include:</p>
     <ul>
      <li>
<a href="extensionslib.html">Introduction of a library of extension functions</a>
</li>
      <li>Support for pre-parsed source documents and pre-compiled stylesheets in 
      <a href="apiDocs/classXalanTransformer.html">XalanTransformer</a> and the C API.</li>
      <li>Support for stylesheet params in <a href="apiDocs/classXalanTransformer.html">XalanTransformer</a> 
      and the C API</li>
      <li>Support for extension functions in <a href="apiDocs/classXalanTransformer.html">XalanTransformer</a>
</li>
      <li>Performance enhancements</li>
      </ul>
     
   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 1.1</h4>
   <p>In addition to adding to the list of platforms on which Xalan-C++ builds, our focus for this release has been on bug fixes, performance enhancements, 
      and providing a simplified C++ and C API for performing standard transformations. Major updates since version 1.0 include:</p>
   <ul>
     <li>Added HP-UX 11 build.</li>
     <li>Added Solaris build.</li>
     <li>Greatly improved performance.</li>
     <li>Improved conformance to the XSLT specification.</li>
     <li>Simplified the C++ API and provided a C API for performing standard transformations with the <a href="usagepatterns.html#xalantransformer">XalanTransformer</a> class and associated header files.</li>
     <li>Added sample illustrating use of XalanTransformer and the new C++ API: 
         <a href="samples.html#xalantransform">XalanTransform</a>.</li> 
     <li>Added sample illustrating use of XalanTransformer, the new C API, and how to run Xalan-C++ and perform transformations on an 
         Apache Web server: <a href="samples.html#apachemodulexslt">ApacheModuleXSLT</a>.</li>
     <li>Added the <a href="samples.html#streamtransform">StreamTransform</a> sample.</li>
     <li>Eliminated dependencies on non-public Xerces headers; accordingly can now build with the Xerces distribution.</li>
     <li>Fixed namespace mapping and inheritance problems.</li>
     <li>Fixed failure of &lt;copy-of ...&gt; to include CRLFs (if any) in the result.</li>
     <li>Fixed bug sorting in reverse document order based on position. </li>
     <li>Fixed &lt;xsl:number&gt; bug with use of letter-value="traditional" for "classical" Greek numbering.</li>
     <li>Fixed use of &lt;xsl:fallback&gt; within a top-level extension function.</li>
     <li>Fixed HTML output method bug. The &lt;HEAD&gt; element was not including a &lt;META&gt; tag with the encoding.</li>
     <li>Fixed bug using key() in match patterns to find descendants.</li>
     <li>Fixed bug using the id() function in complex match patterns.</li>
     <li>Fixed problem outputting multiple single-character CDATA sections.</li>
     <li>Fixed problem outputting whitespace characters.</li>
     <li>Fixed problem transforming from a stream on UNIX platforms.</li>
     <li>Fixed a bug with the document() function, which was generating a syntax error if called in the following manner: document(<b>
<i>string</i>
</b>,/).</li>
     <li>Fixed named templates bug accepting global parameter when called with a parameter of the same name that the named template does not 
         recognize.</li>
   </ul> 
   
   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 1.0</h4>
   <p>Major updates since version 0.40.0 include:</p>
   <ul>
     <li>Full support for namespace handling</li>
     <li>Full implementation of the format-number() function and support for the decimal-format element</li>
     <li>Integration with the <a href="http://oss.software.ibm.com/icu/index.html">International Components for Unicode (ICU)</a> for number formatting, sorting, and output encoding</li>
     <li>Support for the exclude-result-prefixes attribute</li>
     <li>Support for the output encoding attribute</li>
   </ul>
   
   <p align="right" size="2">
<a href="#content">(top)</a>
</p>
<h4>Changes for Xalan-C++ version 0.40.0</h4>
   <p>Major updates since version 0.30.0 include:</p>
   <ul>
     <li>Permitting OS file names (as well as URLs) as command-line arguments with TestXSLT</li>
     <li>Stricter compliance for HTML and XML output</li>
     <li>Improved handling of relative URI's</li>
     <li>Improved handling of Import and Include</li>
     <li>Better namespace handling (although there are still problems here)</li>
     <li>Support for Document() function</li>
     <li>Support for XPath predicates</li>
     <li>ProblemListener with a different output stream and call 
         XalanTransformer::setProblemListener() before calling XalanTransformer::transform().</li>
   </ul>
   

  
<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 - Sun 2012-10-07</div>
</div>
</body>
</html>
