我有一个 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)。
我将非常感谢您的提示或示例。