Привет,
Я ищу метод, позволяющий выполнить выборочный вывод документа в XSLT. Мне известен метод, при котором каждый создает узел xsl:result-document
, чтобы одно преобразование применялось к нескольким документам. Обычно этот метод использует несколько проходов, таких как:
<xsl:template match="/">
<xsl:apply-templates select="*"/>
<xsl:result-document href="test.xml">
<xsl:apply-templates select="*"/>
</xsl:result-document>
</xsl:template>
Я ищу способ сделать это встроенным, чтобы я мог создать два выходных документа за один проход. Причина в том, что у меня есть временное дерево, которое создается при запуске преобразования, которое я хочу вывести в файл.
<xsl:variable name="treeBase">
<Base/>
</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates select="*"/>
</xsl:template>
<xsl:template match="these_elements">
<xsl:param name="temp" select="$treeBase"/>
</xsl:template>
<xsl:template match="not_these_elements">
<xsl:param name="temp" select="$treeBase"/>
<xsl:apply-templates select="@*|node()">
<xsl:with-param name="temp">
<Base>
<xsl:copy-of select="$temp/Base/*"/>
<Item>
<xsl:value-of select="ThisItem"/>
</Item>
</Base>
</xsl:with-param>
</xsl:template>
Зачем вам это нужно?
В моем XSLT я строю временное дерево с помощью рекурсивных вызовов параметров. Я хочу вывести временное дерево, поскольку оно создается в отдельный документ, но все еще использую временное дерево, созданное для управления потоком. При использовании текущего метода мне пришлось бы дважды пройти сложное преобразование.
Есть ли способ сделать это в XSLT или это однопроходный, только для одного документа?
Заранее спасибо.