我正在尝试编写一个需要按顺序执行多个 p:xslt 步骤的 xproc。首先,它将两个规范化的 XML 文件写入磁盘,然后第三个 p:xslt 应该将这些规范化的文件作为输入。
更新:第一个问题(第三个 p:xslt 在第二个 p:store 完成写入磁盘之前触发)通过在第二个 p:store 和第三个 p:xslt 之间添加显式连接来解决。(在下面的代码中修改)
更新 2下一个问题是我想用 pxf:delete 指令删除临时文件。这给出了相同的执行顺序问题: pxf:delete 在它应该删除的文件写入磁盘之前被触发。似乎在 pxf:delete 上没有 p:input 可能。因此,先前将步骤显式连接到最后一步的策略似乎是不可能的。任何想法如何强制 pxf:delete 等待?
(以下问题已修改,对混乱感到抱歉)
xproc 看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step type="doc:compare_files" xmlns:p="http://www.w3.org/ns/xproc" xmlns:c="http://www.w3.org/ns/xproc-step" version="1.0" xmlns:cx="http://xmlcalabash.com/ns/extensions" name="current" xmlns:doc="http://technische-documentatie.oep.overheid.nl/namespaces/doc" xmlns:pxf="http://xmlcalabash.com/ns/extensions/fileutils" >
<p:output port="result">
<p:pipe port="result" step="big_transform"/>
</p:output>
<p:option name="filename1" required="true"/>
<p:option name="filename2" required="true"/>
<p:load name="load-filename1">
<p:with-option name="href" select="$filename1"/>
</p:load>
<p:load name="load-filename2">
<p:with-option name="href" select="$filename2"/>
</p:load>
<p:xslt name="prepare_transform_1">
<p:input port="source">
<p:pipe port="result" step="load-filename1"/>
</p:input>
<p:input port="stylesheet">
<p:document href="prepare_for_hash_identity_transform.xsl"/>
</p:input>
<p:input port="parameters" kind="parameter" sequence="true">
<p:inline>
<c:param-set>
<c:param name="commentsFilteren" value="ja"/>
</c:param-set>
</p:inline>
</p:input>
</p:xslt>
<p:store href="t1.xml"/>
<p:xslt name="prepare_transform_2">
<p:input port="source">
<p:pipe port="result" step="load-filename2"/>
</p:input>
<p:input port="stylesheet">
<p:document href="prepare_for_hash_identity_transform.xsl"/>
</p:input>
<p:input port="parameters" kind="parameter" sequence="true">
<p:inline>
<c:param-set>
<c:param name="commentsFilteren" value="ja"/>
</c:param-set>
</p:inline>
</p:input>
</p:xslt>
<p:store href="t2.xml" name="store2"/>
<p:xslt name="big_transform">
<p:input port="source">
<p:pipe port="result" step="store2">
</p:input>
<p:input port="stylesheet">
<p:document href="generate_hash.xsl"/>
</p:input>
<p:input port="parameters" kind="parameter" sequence="true">
<p:inline>
<c:param-set>
<c:param name="file1" value="t1.xml"/>
<c:param name="file2" value="t2.xml"/>
</c:param-set>
</p:inline>
</p:input>
</p:xslt>
<p:import href="http://xmlcalabash.com/extension/steps/fileutils.xpl"/>
<pxf:delete href="t1.xml"/>
<pxf:delete href="t2.xml"/>
</p:declare-step>