Как воспроизвести как основной вывод, так и xsl: result-document преобразования XSLT с помощью XProc - PullRequest
0 голосов
/ 21 июня 2020

У меня есть конвейер XPro c, который берет исходный документ и преобразует его, используя несколько шаги, попутно сохраняя промежуточные результаты (они мне тоже нужны).

Это довольно просто и работает очень хорошо. Но на последнем шаге, где входными данными уже является документ 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, основной результат преобразования будет файл со всем, кроме div, чей id="spec"; а вторичным выводом будет содержимое div id="spec", которое будет go в spec.html, как того требует xsl: result-document.

К сожалению, XPro c не создает вывод для xsl:result-document и, насколько я могу судить, хочет, чтобы мы занимались для этого первичными и вторичными портами вывода. Я читал спецификацию и несколько примеров несколько раз, но я все еще не могу понять что-то, что должно быть относительно простым, как go из:

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

на что-то еще в XPro c что дало бы мне два разных вывода и возможность сохранить как основной вывод, так и вторичный вывод (là xsl: result-document).

Я был бы очень благодарен за ваши советы или примеры.

...