Есть ли способ избежать обработки уже обработанных узлов?
Входной XML
<?xml version="1.0" encoding="UTF-8"?>
<root>
<node1>node1.1</node1>
<node2>node2.1</node2>
<node2>node2.2</node2>
<node1>node1.2</node1>
</root>
XSL
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="root">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="node1">
[Node1]:<xsl:value-of select="."></xsl:value-of>
<xsl:apply-templates select="following-sibling::node2"/>
[End node1]
</xsl:template>
<xsl:template match="node2">
[Node2]:<xsl:value-of select="."></xsl:value-of>
</xsl:template>
</xsl:stylesheet>
выход
<?xml version="1.0" encoding="UTF-8"?>
[Node1]:node1.1
[Node2]:node2.1
[Node2]:node2.2
[End node1]
[Node2]:node2.1
[Node2]:node2.2
[Node1]:node1.2
[End node1]
Как видите, шаблон <xsl:template match="node2">
применяется дважды для каждого элемента node2 - один раз из шаблона node1 и второй раз, когда процессор XSLT преобразует элемент node2.
Есть ли какое-либо решение, чтобы избежать применения xsl:template match="node2"
во второй раз?
Мне нужно остановить обработку node2, когда я только что обработал ее в шаблоне для node1.
Важно
Этот пример - просто эмуляция более сложного варианта использования.
Это означает, что у нас есть дополнительное ограничение - мы не можем изменить шаблон для обработки корневого элемента.
Я хочу знать, есть ли способ остановить обработку элементов или перенести обработку на другие элементы.