Но я всегда получаю два div с b c.
Нет, это , а не результат применения кода, который вы разместили здесь. Фактический результат:
<div id="node_1">ac</div>
в XSLT 1.0 и:
<div id="node_1">a bc</div>
в XSLT 2.0.
В выводе есть только один div
, поскольку в исходном XML-файле есть только один Nodes
узел, и единственный шаблон, который создает div
, - это тот, который соответствует Nodes
.
Чтобы получить результат, который вы ищете, вы должны попробовать что-то вроде:
XSLT 1.0
<xsl:template match="/Nodes">
<root>
<xsl:for-each select="Node">
<div id="node_{position()}">
<xsl:for-each select="Tag">
<xsl:value-of select="." />
</xsl:for-each>
</div>
</xsl:for-each>
</root>
</xsl:template>
Результат
<root>
<div id="node_1">ab</div>
<div id="node_2">c</div>
</root>
или XSLT 2.0
<xsl:template match="/Nodes">
<root>
<xsl:for-each select="Node">
<div id="node_{position()}">
<xsl:value-of select="Tag" />
</div>
</xsl:for-each>
</root>
</xsl:template>
Результат
<root>
<div id="node_1">a b</div>
<div id="node_2">c</div>
</root>