Subject: Re: [xsl] Creating csv from multiple input files From: "Darcy Parker" <darcyparker@xxxxxxxxx> Date: Tue, 6 May 2008 10:48:10 -0400 |
Related to your question... Eventually you may find yourself needing to implement XMLCatalogs if you're processing a number of XML files that have DTDs. In which case, you'll need to use the Apache Commons Resolver with saxon. On windows, I use a batch file similar to the following for running saxon. It is pretty easy to pass parameters. for example, if you call the batch file saxon.bat, use this command: saxon -o:output.xml -s:input.xml -xsl:xml2csv.xslt param1="" param2="" where param1 and param2 are the names of your xsl:param and the values are in the "". --------------------- @echo off :: A wrapper for calling the saxon XSLT processor. :: Uses Saxon 9.0j :: Uses Xerces 2.9.0 :: Uses the Apache Commons Resolver v1.2 for the Catalog Manager :: Uses %_Path2CatalogManager% which is the path to the folder where the CatalogManager.properties file is stored. :: (Not to the CatalogManager.properties file but its folder!) IF NOT DEFINED JAVA_HOME ( echo ERROR! Environment Variable JAVA_HOME is not set. echo Set JAVA_HOME variable appropriately. echo For example: set JAVA_HOME=c:\program files\java\jre1.6.0_01 goto end ) :: Next 2 lines remove potential double quotes from the JAVA_HOME environment variable so that additional information can be added :: JAVA_HOME for tests. set JAVA_HOME=%JAVA_HOME:"=% set JAVA_HOME=%JAVA_HOME:'=% IF NOT EXIST "%JAVA_HOME%\bin\java.exe" ( echo ERROR! Could not find "%JAVA_HOME%\bin\java.exe" goto end ) IF NOT EXIST "%_Path2CatalogManager%" ( echo ERROR! Could not find CatalogManager.properties goto end ) :: Note: I set the saxon_prefix using multiple lines for readability set saxon_prefix="%JAVA_HOME%\bin\java.exe" :: The %path_to_saxon9% and similar variables are not intended to be defined... but instead you should replace these with the actual paths. set saxon_prefix=%saxon_prefix% -cp %path_to_saxon9%\saxon9.jar;%path_to_xercesImpl%\xercesImpl.jar;%path_to_resolver%\resolver.jar;%_Path2CatalogManager%; set saxon_prefix=%saxon_prefix% -Djavax.xml.parsers.DocumentBuilderFactory=org.apache.xerces.jaxp.DocumentBuilderFactoryImpl set saxon_prefix=%saxon_prefix% -Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl set saxon_prefix=%saxon_prefix% -Djavax.xml.transform.TransformerFactory=com.icl.saxon.TransformerFactoryImpl set saxon_prefix=%saxon_prefix% net.sf.saxon.Transform set saxon_prefix=%saxon_prefix% -versionmsg:off set saxon_prefix=%saxon_prefix% -x:org.apache.xml.resolver.tools.ResolvingXMLReader set saxon_prefix=%saxon_prefix% -y:org.apache.xml.resolver.tools.ResolvingXMLReader set saxon_prefix=%saxon_prefix% -r:org.apache.xml.resolver.tools.CatalogResolver %saxon_prefix% %* goto end :end ------------------ On Tue, May 6, 2008 at 10:31 AM, Georg Hohmann <georg.hohmann@xxxxxxxxx> wrote: > > So you could use > > <xsl:apply-templates > > select="collection('file:///C:/dir/subdir?select=*.xml')/*/*"/> > > to process all child elements of all root elements of those .xml files in > > the directory C:\dir\subdir. > > Thanks for the answer. > Following your advice i modified my stylesheet like this: > > > <?xml version="1.0" encoding="UTF-8"?> > <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > <xsl:output name="csv" method="text" encoding="UTF-8"/> > <xsl:template match="/"> > <xsl:result-document format="csv" href="result.csv"> > <xsl:apply-templates > select="collection('data/input?select=*.xml')/*/*"/> > > <xsl:text>
</xsl:text> > </xsl:result-document> > </xsl:template> > ... > > "data/input" is the path relative to my xslt where the input files > resist. Now i wonder how i should run saxon9 from the command line. > Saxon9 needs an input file, but now the input files are all defined > inside the stylesheet. I was thinking of something like this: > > java -jar saxon9.jar xml2csv.xslt > > But this does not work due to the lack of an input file. > Could you please help a bit further? > > Georg. > > P.S.: Meanwhile i will generate a simple shell script like Wendell suggested. > That is the most obviously approach that i didn't thought of. > Sometimes too much xslt makes me blind :-)
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Creating csv from multipl, Martin Honnen | Thread | Re: [xsl] Creating csv from multipl, Andrew Welch |
Re: [xsl] Creating csv from multipl, Martin Honnen | Date | Re: [xsl] Creating csv from multipl, Andrew Welch |
Month |