如何从命令行 运行 Saxon

How to run Saxon from command line

任何人都可以 post 详细的分步说明如何安装 Saxon (10 HE) 以及如何 运行 在 MacOS (10.13.6) 中从命令行进行转换?

我已经在我的电脑上安装了Java。
我已经从 SourceForge 下载了 SaxonHE10-6J.zip 文件。
根据建议 here,我已将 saxon-he-10.6.jar 放在 myUserName/Library/Java/Extensions 文件夹中。
然后我打开终端应用程序并输入基于 :

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

这导致:

Unable to access jarfile saxon-he-10.6.jar

我所有的尝试,包括将 .jar 文件移动到 /Library/Java/Extensions 目录或在命令中包含 .jar 文件的完整路径,都失败了,并出现相同的错误消息。

请注意,我不是 Java 开发人员,我不打算在应用程序中使用它。我想要的只是能够偶尔进行一次转换。

我还应该注意,我的 XML 和 XSLT 文件的位置可能会因情况而异。我希望能够将 .jar 文件保存在一个固定位置,并根据需要提供 XML 和 XSLT 文件的路径 - IOW,我想要一个命令模板,我只需要更改 2文件路径(并可能向转换添加一些选项)。

我需要做什么?

我自己从不使用它:然而 myUserName/Library/Java/Extensions 就类路径而言是特殊的(你不需要将 JAR 文件放在类路径的这个目录中),但它不是就 -jar 选项而言是特殊的 - 它需要是正常方式下的绝对或相对文件名,并且与类路径无关。

如果您选择将 JAR 文件放在这个神奇的位置,那么我会使用命令 java net.sf.saxon.Transform options 从类路径中选择 Saxon,而不是直接识别 -jar 位置。

但是,有充分的理由不把撒克逊人放在这个神奇的地方;一个原因是它会影响实际上不想使用 Saxon 的应用程序(它们可能被编写为使用其他 XSLT 处理器,并且您可能根本不知道它们使用 XSLT,直到它们停止工作)。

最终我成功了。虽然这些并不是我所希望的详细的分步说明,但我将在这里总结我到目前为止所学的内容。希望这会节省一些人我不得不经历的挫败感。

  • 确保您的计算机上安装了 Java。如果没有,请下载 从 Oracle 并安装。

  • 从 SourceForge 下载 Saxon。解压缩并将其放在您的任意位置 硬盘,除了:

    • 不要放在/Library/Java/ExtensionsmyUserName/Library/Java/Extensions中;
    • 不要将其放在名称中包含 / 的文件夹中(说明见下文)。
  • 要启动 t运行 信息,请发出命令:

    java -jar 'path/to/saxon-he-10.6.jar' -xsl:'path/to/mystylesheet.xsl' -s:'path/to/some.xml'
    
  • 或者,您可以使用:

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

    此表单也可用于 运行 XQuery,方法是更改 net.sf.saxon.Transformnet.sf.saxon.Query.

  • 要向您的命令添加更多选项 and/or 参数,请参阅 此处给出的说明:
    https://www.saxonica.com/html/documentation10/using-xsl/commandline/
    但不要按照页面顶部的说明进行操作 基本命令的形式。

Corrections/additions 非常欢迎。


文件夹名称包含/的问题描述:

  1. 将所有 3 个文件(saxon-he-10.6.jarmystylesheet.xslsome.xml 在我的文档文件夹中名为 XML/RSS 的文件夹中;

  2. 运行以下命令:

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

    收到以下错误:

    Error: Could not find or load main class net.sf.saxon.Transform Caused by: java.lang.ClassNotFoundException: net.sf.saxon.Transform
    
  3. 仅将 .jar 文件移动到父文件夹,运行以下 命令:

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

    结果:运行形成成功。

  4. 将 .jar 文件移回,将文件夹重命名为 XMLRSS 和 运行 以下命令:

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

    结果:运行形成成功。