경우 먼저 정의 할 수 있습니다 변수는 가장 왼쪽의 'Z'의 깊이를 해결하고,이를 사용하여 같은 깊이
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<!-- Work out depth of left most 'z' node -->
<xsl:variable name="LeftMost">
<xsl:for-each select="//*[@name='z']">
<xsl:sort select="count(ancestor::*)" order="descending"/>
<xsl:if test="position() = 1">
<xsl:value-of select="count(ancestor::*)"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:if test="@name='z' and count(ancestor::*) = $LeftMost">
<aaa name="w"/>
</xsl:if>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
에서 노드와 일치 할 때이 'Z'를했다면 그런 다음, 'w'노드를 추가하는 같은 노드 두 노드 모두 'w'노드가 주어지면 결국 깊어집니다.
또 다른 방법은 generate-id()를 사용하여 주먹 'z'의 ID를 최대 깊이로 가져온 다음 노드를 동일한 ID와 일치시킬 때 'w'를 추가하는 것입니다. 그러면 가장 큰 깊이에서 발견되는 첫 번째 'z'노드에만 'w'노드가 추가됩니다.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:variable name="LeftMost">
<xsl:for-each select="//*[@name='z']">
<xsl:sort select="count(ancestor::*)" order="descending"/>
<xsl:if test="position() = 1">
<xsl:value-of select="generate-id()"/>
</xsl:if>
</xsl:for-each>
</xsl:variable>
<xsl:template match="/">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:if test="@name='z' and generate-id() = $LeftMost">
<aaa name="w"/>
</xsl:if>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
원래 나무 '이름 ='z'' 2 개 노드가 가진 첫번째 잎. 새 노드를 추가 할 노드를 지정하는 방법은 무엇입니까? –
"가장 왼쪽 잎" – Alexander