17

I want to perform an XSLT 2.0 transformation by the use of command line executions. I heard that i could use the Saxon library by a shell command like:

java -jar sax.jar -input foo.xml -xsl foo.xsl -output bar.xml

Does anyone know how exactly I can achieve that goal?

By the way, i am not limited to Java. Any other shell solution is fine.

Alp
  • 29,274
  • 27
  • 120
  • 198
  • 3
    Be aware that a Sax parser does not perform XSLT. Sax parser parse XML in a stream and fire events. Saxon is an XSLT processor. Most of the time a XSLT processor does not stream. Saxon (in his commercial version) has streaming capabilities with the latest instructions provided by XSLT 3.0. – Vincent Biragnet Dec 16 '11 at 16:23
  • thanks for clarification of correct naming – Alp Dec 16 '11 at 17:11

2 Answers2

14

The documentation of Saxon is online: http://www.saxonica.com/documentation/#!using-xsl/commandline. So you need:

java -jar saxon9he.jar -xsl:foo.xsl -s:foo.xml -o:bar.xml
Martin Honnen
  • 160,499
  • 6
  • 90
  • 110
  • 3
    thanks alot. i also found this: http://manpages.ubuntu.com/manpages/oneiric/man1/saxonb-xslt.1.html is that good too or what would you prefer? – Alp Dec 16 '11 at 15:44
  • 1
    The version of Saxon shipped with your Ubuntu distribution is probably rather old. It's probably better to download the most recent version (though if you're a beginner you probably won't notice much difference). – Michael Kay Dec 16 '11 at 23:02
3

Update: check solution 2 and 3 if your java is version 11 or later, where .internal. are not available anymore.

I just wrote this bash script to use com.sun.org.apache.xalan.internal.xsltc.cmdline classes for transforming XML. Works with openjdk just fine. Not a solution for production use cases but handy for debugging.

P.S. took the idea from this blog

akostadinov
  • 17,364
  • 6
  • 77
  • 85
  • It seems, like all `.internal.` stuff, it goes away after some time... So your bash script ends up with ClassNotFoundException with JDK 11 – Ondra Žižka May 04 '21 at 11:12
  • @OndraŽižka, you are right. I've updated answer with another solution. Do you think Java stopped to embed XSLT or rather we have no way to access it anymore? – akostadinov May 04 '21 at 17:23