NAME
	xsltc - Apache/Xalan XSLT Compiler 

SYNOPSIS
	xsltc [-o <output>] [-d <directory>] [-j <jarfile>] 
	      [-p <package name>] [-uxhsi] [<stylesheet>... ]

DESCRIPTION
	This command-line tool is a wrapper for the Java class
	org.apache.xalan.xsltc.cmdline.Compile

	The Sun XSLT Compiler is a Java-based tool for compiling XSLT
	stylesheets into lightweight and portable Java byte codes 
	called translets.  

	The XSLT Compiler can be run on any platform including UNIX,
	Windows, NT, Mac that supports Java 1.2.x or later. The generated
	translets can be run on any platform that supports a Java
	Runtime Environment, including a Palm Pilot with J2ME CLDC 
	(Java 2 Micro Edition, Connected Limited Device Configuration).

OPTIONS

	The following options are supported:

	-o <output>
		Changes the name of the generated translet class.
		By default, the translet class would be named
		<stylesheet>, if -o <output> is set, then the 
		translet class would be named <output>. Translet
		class files are written as .class files.

	-d <directory>
		Changes the destination directory. By default, any
		translet class files generated would be placed in 
		the current working directory. If -d <directory> 
		is specified, the files would be output to <directory>.

	-j <jarfile>
		Outputs all generated translet class files into a 
		jar file named <jarfile>.jar. When this option is 
		used only a jar file will be output.

	-p <package name>
		Specify a package name for all generated translet
		class.

	-u
		Specifies that <stylesheet> location will be a URI
		such as 'http://myserver/stylesheet1.xsl'.

	-i
		Specify that the stylesheet should be read from stdin.

	-x
		Turn debugging messages on.

	-h
		Output help screen.

	-s
		Prevent the command line tool from calling System.exit()


OPERANDS

	The following operand is supported:

	<stylesheet>    A path name of an input stylesheet file. 


EXAMPLES
	Example 1:  Creating a translet from stylesheet 'hamlet.xsl'.

	example%  xsltc hamlet.xsl

	would produce a set of class files such as 'hamlet.class',
	'hamlet$0.class', 'hamlet$1.class'.

	Example 2:  Outputting all classes into a jar file.

	example%  xsltc -j hamlet.jar hamlet.xsl

	would produce a single jar file output, 'hamlet.jar' which would
	contain all the generated .class files for the hamlet translet.

	Example 3: Naming the class file.  

	example%  xsltc -o newhamlet hamlet.xsl

	would produce a set of class files such as 'newhamlet.class',
	'newhamlet$0.class', etc rather than the default which would 
	be 'hamlet.class', 'hamlet$0.class', etc.	

	Example 4: Multiple stylesheets. 

	example%  xsltc hamlet1.xsl hamlet2.xsl hamlet3.xsl

	would produce a set of class files derived from the three
	stylesheets. 

	Example 5: Package Specification.

	example% xsltc -p com.mycompany.translets hamlet.xsl

	would produce a set of class files such as 
	'com/mycompany/translets/hamlet.class',
	'com/mycompany/translets/hamlet$0.class', etc.

FILES
	file.xsl		input XSLT stylesheet
	file.class		byte code file
	file.jar		java archive file
	
SEE ALSO
	xslt, jar.

BUGS
	See the Bugzilla bug database: http://nagoya.apache.org/bugzilla

AUTHORS
	Morten Jorgensen,		   morten.jorgensen@ireland.sun.com
	G. Todd Miller,                            todd.miller@east.sun.com
	Santiago Pericas-Geertsen
	Jacek Ambroziak
