Si par le plus à gauche que vous voulez dire le noeud « z » avec la plus grande profondeur, vous pouvez d'abord définir une variable de travailler sur la profondeur de la gauche plus « z », puis ajoutez le nœud « w » lorsque vous correspondez un nœud à une profondeur
<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>
avec cela, si vous aviez deux « z » nœuds en même la profondeur que vous obtiendriez avec les deux reçoivent un nœud «w».
Une approche alternative consiste à utiliser generate-id() pour obtenir l'ID du poing 'z' à la plus grande profondeur, puis ajouter le 'w' lorsque vous faites correspondre le noeud avec le même identifiant. Cela ne ferait qu'ajouter un nœud 'w' au premier nœud 'z' qu'il trouve à la plus grande profondeur.
<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>
Votre arbre original a 2 nœuds avec 'name = 'z''. Comment dire lequel vous voulez ajouter le nouveau noeud? –
"feuille la plus à gauche" – Alexander