This program will run starting with Java version 1.4 as it contains
the XSL support in its distribution.

The program demonstrates how one can use XSLT as a scripting language
to fill in a Java data structure using some XML data and a stylesheet.

To run it, type:

	java TableFiller style1.xsl table-data.xml
or
	java TableFiller style2.xsl table-data.xml

        Note on using Java 5, Java 6 or higher:

        - if the sample does not work in these environments then, copy the Xalan-jars from
          "http://xml.apache.org/xalan-j/downloads.html" distribution into the "endorsed"
          directory of these Java versions (e.g. "JAVA_JRE_HOME /jre/lib/endorsed/"); make
          sure that the archive "xalan.jar" (from the xalan-tool jar) is available as well;
          tested with Xalan 2.7 and 2.8 on Java 5 and beta-version of Java 6

Be impressed and have fun!
;-)

---rgf, 2006-09-07




=============== Original "readme" text as of 2003-06-25: =================

This demo shows how one can use LotusXSL as a scripting language to
fill in a Java data structure using some XML data and a stylesheet.

To run it, type:

	java TableFiller style1.xsl table-data.xml
or
	java TableFiller style2.xsl table-data.xml

You need to have LotusXSL v0.18.* on your classpath in addition to
bsf.jar and bsfengines.jar.

