我正在尝试将调用 Saxon(版本 8.9)的批处理文件转换为 XProc 管道(Calabash)。
这是我的批量调用:
java -jar saxon8.jar -o out.xml in.xml style.xsl +config=config-file.cfg
参数 config 在样式表中定义如下:
<xsl:param name="config" as="document-node()"/>
XProc 部分如下所示:
<p:load name="configLoad">
<p:with-option name="href" select="'config-file.cfg'"/>
</p:load>
<p:xslt name="config">
<p:input port="source">
<p:document href="in.xml"/>
</p:input>
<p:input port="parameters">
<p:inline>
<c:param name="config">
<p:pipe port="result" step="configLoad"/>
</c:param>
</p:inline>
</p:input>
<p:input port="stylesheet">
<p:document href="style.xsl"/>
</p:input>
</p:xslt>
错误信息是这样的:
变量$config的值所需的项目类型是document-node();提供的值具有项目类型 xs:string
我知道<p:exec>
步骤,但我不想使用它,因为配置文件稍后将由其他 XSLT 转换生成。它还应被其他 XProc 步骤重用。
是否可以使用正确的参数类型调用 XSLT 样式表?
感谢您的帮助!
看来您对当前的 XProc 标准不走运。它指出参数是名称/值对,其中值的数据类型must是 untypedAtomic 的字符串。别问我为什么..
http://www.w3.org/TR/xproc/#parameters
如果您不会动态地编写配置的内容,而只是传递固定文件的内容,则可以仅传递相应配置文件的路径,并使用 fn:doc() 从XSLT 文件。
我建议不要即时编写配置文件。 XProc 中的执行顺序可能不像您预期的那样连续。
另一种方法是将每个配置设置作为单独的参数传递,但每个设置仍然必须遵守平面参数值类型。
HTH!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)