XSLT 与 XProc - 所需类型中的参数绑定(bind)

标签 xslt parameters pipeline calabash xproc

我正在尝试将调用 Saxon(版本 8.9)的批处理文件转换为 XProc 管道(Calabash)。 这是我的批量调用:

java -jar saxon8.jar -o out.xml in.xml style.xsl +config=config-file.cfg

参数配置在样式表中定义如下:

<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>

错误信息是这样的:

Required item type of value of variable $config is document-node(); supplied value has item type xs:string

我知道<p:exec>步骤,但我不想使用它,因为配置文件稍后将由其他 XSLT 转换生成。它还应被其他 XProc 步骤重用。

是否可以使用正确的参数类型调用 XSLT 样式表? 感谢您的帮助!

最佳答案

看起来您对当前的 XProc 标准不太走运。它声明参数是名称/值对,其中值的数据类型必须是untypedAtomic 的字符串。别问我为什么..

http://www.w3.org/TR/xproc/#parameters

如果您不会动态编写配置内容,而只是传递固定文件的内容,则可以仅传递相应配置文件的路径,并使用 fn:doc() 来读取它来自 XSLT 文件。

我建议不要即时编写配置文件。 XProc 中的执行顺序可能不像您预期​​的那样连续。

替代方案是将每个配置设置作为单独的参数传递,但每个设置仍然必须遵守平面参数值类型。

呵呵!

关于XSLT 与 XProc - 所需类型中的参数绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17861633/

相关文章:

python - Scrapy项目提取范围问题

powershell - 如何在不更改编码的情况下将命令的输出通过管道传输到文件?

Azure DevOps Pipeline AZ CLI 批量上传不推送文件

string - 如何在XSLT中将字符串格式化为Pascal大小写?

templates - 存在Razor模板时使用XSL的原因

html - 使用 node.js 中的 XSLT 样式表将 xml 转换为 html

java - 在 Saxon Java 外部函数中深度复制 XML 节点

reactjs - React Router 多个参数不起作用

python - 如何定义sklearn.cluster.DBSCAN的eps参数的值范围?

java - 将参数传递给我的 login.jsp