首页 > 解决方案 > 如何使用 XProc 复制 XSLT 转换的主输出和 xsl:result-document

问题描述

我有一个 XProc 管道,它获取一个源文档并使用几个 <p:xslt> 步骤对其进行转换,沿途存储中间结果(我也需要这些)。

这非常简单并且效果很好。但在最后一步,输入已经是一个 html 文档,我的 xslt 看起来像这样:


<xsl:template match="div[@id = 'specification']">
    <xsl:result-document href="spec.html">
        <xsl:copy>
            <xsl:apply-templates/>
        </xsl:copy>
    </xsl:result-document>
</xsl:template>
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>

现在,如果我使用 XSLT 直接运行此转换,则转换的主要输出将是一个文件,其中包含除 who 之外的所有div内容id="spec";并且第二个输出将是 的内容,根据 xsl:result-document 的要求div id="spec",它将进入。spec.html

不幸的是,XProc 没有为此创建输出xsl:result-document ,据我所知,它希望我们为此处理主要和次要输出端口。我已经多次阅读了规范和几个例子,但我仍然无法弄清楚应该相对简单的东西,如何从:

<p:xslt name="post-process">
    <p:input port="source">
        <p:pipe step="html" port="result"/>
    </p:input>
    <p:input port="stylesheet">
        <p:document href="../stylesheets/html-post-process.xsl"/>
    </p:input>
</p:xslt>

到 XProc 中的其他内容,这将给我两个不同的输出,并能够保存主要输出和辅助输出(là xsl:result-document)。

我将非常感谢您的提示或示例。

标签: xsltxproc

解决方案


推荐阅读