Есть ли способ избежать обработки уже обработанных узлов?Пропустить обработку уже обработанных узлов
Входной 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"
второй раз? Мне нужно прекратить обработку узла2, когда я только что обработал его в шаблоне для node1.
Важный Этот пример является просто эмуляцией более сложного прецедента. Это означает, что у нас есть дополнительное ограничение - мы не можем изменить шаблон для обработки корневых элементов.
Я хочу знать, есть ли способ остановить обработку элементов или переместить обработку на некоторые другие элементы.
Так что, когда * должен * 'node2' шаблон будет применяться? Только для тех элементов 'node2', которые встречаются перед любыми элементами' node1'? – AakashM