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