撒克逊人传递目录作为XSLT 2.0样式表的命令行参数

问题描述 投票:0回答:1

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

<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

xml command-line xslt-2.0 saxon
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.