XSL Processors in batch mode
> Does anyone know offhand if either XT or Xalan can run an entire > subdirectory's XML files through a stylesheet from one command on the > command line? What're the arguments to use? XT can do this by invoking it as follows: xt source_dir stylesheet result_dir XT will apply the stylesheet to each file in the source_dir directory and put the output files in the result_dir directory. Note that XT will re-parse the stylesheet for each source file in the source directory. The stylesheet should not be in the source_dir. When XT creates an output file, it will use the same file name as the corresponding input file. Let's say that your input XML documents are in the IN directory, and your stylesheet (xlate.xsl) is in the current directory, and you want the output files to be placed in the OUT directory. Then you would execute the following command: xt in xlate.xsl out I don't think that this XT feature is documented. I found out about it by reading the source code of the com.jclark.xsl.sax.Driver class (the 19991102 version of XT).
Batch XSLT Processing
Most all XSLT processors can be called command line in a batch. Below I include the command lines I use for various processors. I have also written a simple wrapper for MSXML3 that allows batching XSLT;
java -classpath c:\saxon\saxon.jar com.icl.saxon.StyleSheet -o tmpout.xml tmpdata.xml tmpxform.xml java -classpath c:\xalan\xalan.jar;c:\xalan\xerces.jar org.apache.xalan.xslt.Process -in tmpdata.xml -xsl tmpxform.xml -out tmpout.xml java -classpath c:\xt\xt.jar;c:\xerces\xerces.jar - -Dcom.jclark.xsl.sax.parser=org.apache.xerces.parsers.SAXParser com.jclark.xsl.sax.Driver tmpdata.xml tmpxform.xml tmpout.xml java -classpath c:\oraxml\lib\xmlparserv2.jar oracle.xml.parser.v2.oraxsl tmpdata.xml tmpxform.xml tmpout.xml
Note: You need to point to the actual location you have unzipped the .jar files. Also note that I explicitly include classpath, since I seem to have strange behavior if the processors all use the same global classpath. Finally note that most of the above allow mixing and matching SAX processors; this is just the config I use.
Access to a list of files
XYZ.XML <dir> <xmlFile>input.xml</xmlFile> <xmlFile>input_meta.xml</xmlFile> <xmlFile>sample.xml</xmlFile> <xmlFile>x.xml</xmlFile> </dir>
With <dir> as your current node, do
<xsl:apply-templates select="document(xmlFile)" mode="m"/>
and it will cause each of these input documents to be processed.