saxon 将目录作为命令行参数传递给 XSLT 2.0 样式 sheet

saxon passing directory as a command line parameter to XSLT 2.0 style sheet

使用 Saxon9he,我想将输入文件的目录传递给我的 XSLT 样式 sheet。我已经在我的样式中定义了参数 sheet:

<xsl:param name="publishing.folder" />

并在命令行上:

+publishing.folder="%~dp1\"

+参数为空。

没有 +,

publishing.folder="%~dp1\" 

我得到:Error in xsl:result-document/@href Resolved URL is malformed: unknown protocol: d

d 可能是盘符,这是输入文件所在的位置。

这是导致错误的 @href 的代码:

    <xsl:template match="/">
      <xsl:call-template name="write-dataset-file">
            <xsl:with-param name="filename" select="concat($publishing.folder,'-dataset.xml')"/>
      </xsl:call-template>
    </xsl:template>

   <xsl:template name="write-dataset-file">
      <xsl:param name="filename"/>

      <xsl:result-document href="{$filename}" omit-xml-declaration="false" method="xml" indent="yes">
         <Dataset>

         </Dataset>
      </xsl:result-document>
  </xsl:template>

xalan 接受命令行参数 -PARAM publishing.folder "%~dp1\",但我不想回到 XSLT 1.0

xsl:result-document 的 href 属性必须是一个 URI,但你正在构造一个文件名。尽管许多 XML 相关的软件包接受标准需要 URI 的文件名,但 Saxon 往往更严格。解决此问题的最简单方法是在文件名的开头添加 "file:///",但如果文件名包含特殊字符(例如“#”),这可能不够。