I.Это демонстрирует, как выполнить многопроходные преобразования XSLT 1.0 с любым процессором XSLT 1.0 , который поддерживает функцию расширения exslt node-set (), включая .NET XslCompiledTransform.
Для других процессоров XSLT 1.0 необходимо заменить ext:node-set()
на то, что они поддерживают, например msxsl:node-set()
(с msxsl, связанным с правильным пространством имен) для MSXML.
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ext="http://exslt.org/common"
exclude-result-prefixes="ext xsl">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="node()|@*" name="identity">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/">
<xsl:variable name="vrtfPass1">
<xsl:apply-templates select="node()"/>
</xsl:variable>
<xsl:apply-templates mode="pass2"
select="ext:node-set($vrtfPass1)/node()"/>
</xsl:template>
<xsl:template match="/*">
<xsl:copy>
<xsl:copy-of select="@*"/>
<one/>
<xsl:apply-templates/>
</xsl:copy>
</xsl:template>
<xsl:template match="node()|@*" mode="pass2">
<xsl:copy>
<xsl:apply-templates select="node()|@*" mode="pass2"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/*/one" mode="pass2" >
<xsl:call-template name="identity"/>
<two/>
</xsl:template>
</xsl:stylesheet>
когда это преобразование применяется к этому XML-документу :
<doc/>
желаемый результат получается :
<doc>
<one/>
<two/>
</doc>
II. В настоящее время XSLT 1.0 и XSLT 2.0 используют XPath, и для этого требуется, чтобы весь XML-документ (представление) находился в оперативной памяти .
Рабочий проект для XSLT 2.1 (недавно переименованный в 3.0) предлагает новую функцию потоковой передачи , которая, если этот WD станет официальной рекомендацией, позволит совместимым процессорам XSLT 3.0 реализоватьпотоковое вещание.
III.XslCompiledTransform для XPathDocument
по-прежнему содержит все представление XML-документа в памяти .Тот факт, что XPathDocument
обеспечивает итерацию только вперед, не означает, что XslCompiledTransform выполняет потоковую передачу документа XML.