Home > Enterprise >  How to run Saxon from command line
How to run Saxon from command line

Time:10-17

Can anyone please post detailed, step-by-step instructions how to install Saxon (10 HE) and how to run a transformation from the command line in MacOS (10.13.6)?

I have installed Java on my computer.
I have downloaded the SaxonHE10-6J.zip file from SourceForge.
Based on the recommendation here I have placed the saxon-he-10.6.jar in the myUserName/Library/Java/Extensions folder.
I then opened the Terminal application and entered a command based on this answer:

java -jar saxon-he-10.6.jar -'/Users/myUserName/Documents/path/to/mystylesheet.xsl' -s:'/Users/myUserName/Documents/path/to/some.xml'

This results in:

Unable to access jarfile saxon-he-10.6.jar

All my attempts, including moving the .jar file to the /Library/Java/Extensions directory or including a full path to the .jar file within the command failed with the same error message.

Please note that I am not a Java developer and I do not intend to use this in an application. All I want is to be able to perform an occasional transformation.

I should also note that the locations of my XML and XSLT files may change from one case to another. I would like to be able to keep the .jar file in a constant location and supply the paths to the XML and XSLT files as required - IOW, I want to have a command template where I only need to change the 2 filepaths (and possibly add some options to the transformation).

What do I need to do?

CodePudding user response:

Eventually I got it working. Although these are not exactly the detailed, step-by-step instructions I was hoping for, I will summarize here what I have learned so far. Hopefully this will save someone the hours of frustration I had to go through.

  • Make sure you have Java installed on your computer. If not, download from Oracle and install.

  • Download Saxon from SourceForge. Unzip and place it anywhere on your hard disk, except:

    • do not place it in /Library/Java/Extensions or in myUserName/Library/Java/Extensions;
    • do not place it within a folder whose name contains a /.
  • To initiate a transformation, make your command:

    java -jar 'path/to/saxon-he-10.6.jar' -xsl:'path/to/mystylesheet.xsl' -s:'path/to/some.xml'
    
  • Alternatively, you can use:

    java -cp 'path/to/saxon-he-10.6.jar' net.sf.saxon.Transform -xsl:'path/to/mystylesheet.xsl' -s:'path/to/some.xml'
    

    This form can be also used to run XQuery by changing net.sf.saxon.Transform to net.sf.saxon.Query.

  • For adding more options and/or parameters to your command, see the instructions given here:
    https://www.saxonica.com/html/documentation10/using-xsl/commandline/
    but do not follow the instructions at the top of the page regarding the form of the basic command.

Corrections/additions are most welcome.

CodePudding user response:

I don't ever use it myself: however myUserName/Library/Java/Extensions is special as far as the classpath is concerned (you don't need to put JAR files in this directory on the classpath), but it's not special as far as the -jar option is concerned - that needs to be an absolute or relative filename in the normal way and has nothing to do with the classpath.

If you've chosen to put the JAR file in this magic location, then I would use the command java net.sf.saxon.Transform options to pick Saxon up from the classpath rather than identifying the -jar location directly.

There are good reasons for NOT putting Saxon in this magic location, however; one reason is it will affect applications that don't actually want to use Saxon (they might be written to use some other XSLT processor, and you might not actually be aware that they use XSLT at all, until they stop working).

  • Related