在XProc管道中将document()参数传递给xslt

在XProc管道中将document()参数传递给xslt,xslt,xproc,Xslt,Xproc,我已经建立了一个XProc管道,其中有一个步骤。在这个样式表的参数中,有一个参数是document()节点: 这是km_to_dita.xsl样式表: <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dctm="h

我已经建立了一个XProc管道,其中有一个
步骤。在这个样式表的参数中,有一个参数是document()节点:

这是km_to_dita.xsl样式表:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dctm="http://www.documentum.com" xmlns:ale="http://www.amplexor.com/alcatel"
    exclude-result-prefixes="xs dctm ale" version="2.0">

    <xsl:param name="conf-base" select="'file:/D:/Temp/ALE_config/'" />

    <xsl:param name="output-base" select="''"/>

    <xsl:param name="lang" select="/element()[1]/@language"/>

    <xsl:param name="graphics-reference-names" as="document-node()*" />

    <!-- my templates stuff... -->
</xsl:stylesheet>

因此,我通过以下步骤在管道中调用此XSLT(出于演示目的,它设置为
,但旨在绑定到步骤的结果端口):


但在使用XML Calabash(在oXygenXML中)运行时失败,引发的错误是(对不起,这是我所有的信息),但是我已经确定是
导致了此错误):

空的


有什么想法吗?

我终于发现它出了什么问题。。。首先,如上所述,
缺少所需的
@select
属性,但奇怪的是,oXygen没有为我的管道引发任何验证错误

因此,管道可以这样固定:

<p:with-param name="graphics-reference-names" select="/">
    <p:inline>
        <graphic-ids>
            <reference type="symbol" document="dm09011b0281121ef3.xml#G4" filename="g09011b0281d9c449.gif"/>
            <reference type="symbol" document="dm09011b0281121ef3.xml#G3" filename="g09011b0281d9c449.gif"/>
            <reference type="figure" document="dm09011b0281121ef3.xml#F33" filename="g09011b0281d9c44d.gif"/>
            <reference type="symbol" document="dm09011b0281121ef3.xml#G5" filename="g09011b0281d9c451.gif"/>
            <reference type="figure" document="dm09011b0281121ef5.xml#F116" filename="g09011b0281d9c458.gif"/>
        </graphic-ids>
    </p:inline>
</p:with-param>

使用上述解决方案,XSLT会失败,因为参数被转换为字符串:

变量$graphics reference names值的必填项类型为document-node();提供的值具有项类型xs:string

这是使问题无法解决的另一个问题:XProc只允许将参数设置为原子值,如中所述。

如果使用

<p:input port="source">
    <p:pipe port="list-dm" step="list-csv"/>
    <p:pipe port="result" step="your-other-step"/>
</p:input>
在XSLT代码中,我认为应该将另一个步骤的结果作为辅助输入文档(作为默认集合的一部分访问)提供

<p:input port="source">
    <p:pipe port="list-dm" step="list-csv"/>
    <p:pipe port="result" step="your-other-step"/>
</p:input>
<xsl:param name="graphics-reference-names" as="document-node()*" select="subsequence(collection(), 2)" />