Obtenez tous les ancêtres du nœud courant

Je veux obtenir tous les ancêtres du nœud actuel:

Obtenez tous les ancêtres du nœud courant

XML:

<root>
   <item title="a">
       <item title="b">               
           <item title="c"></item> <!--CURRENT-->
           <item title="d"></item>                 
        </item> 
       <item title="x">             
           <item title="y"></item> 
           <item title="z"></item>  
       </item>            
   </item> 
</root>

Résultat:

<item title="a">...</item>
<item title="b">...</item>

Edit:
Réponses avec axes ancêtre sont beaux.
Mon problème était ailleurs, dans XSLT

XSLT:

<xsl:variable name="curr" select="//item[@title = 'c']"></xsl:variable>
<xsl:variable name="test" select="$curr/ancestor::item"></xsl:variable>

<xsl:for-each select="$test/item">
<xsl:value-of select="@title"></xsl:value-of>
</xsl:for-each>

Retourne:

bcdx

Edit2: pour dimitre et pour tous ceux qui ont un problème similaire

Toutes les réponses à ma question étaient bonnes.

Juste XSLT () me renvoie un résultat étrange et @Mads Hansen m'a corrigé.

DE TRAVAIL FINAL EXEMPLE:

XML:

<?xml version="1.0" encoding="utf-8"?>
<root>
   <item title="a">
       <item title="b">               
           <item title="c"></item> 
           <item title="d"></item>                 
        </item> 
       <item title="x">             
           <item title="y"></item> 
           <item title="z"></item>  
       </item>            
   </item> 
</root>

XSLT:

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:variable name="curr" select="//item[@title = 'c']"></xsl:variable>
        <xsl:variable name="test" select="$curr/ancestor::item"></xsl:variable>

        <xsl:for-each select="$test">
            <xsl:value-of select="@title"></xsl:value-of>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>

Retourne:

ab
Alors, quel est le problème avec le code XSLT? Je vois l'un des principaux problèmes, il n'est pas syntaxiquement valide -- il n'y a même pas un seul modèle dans le présent code. Pour cette raison, aucune des réponses significatives peuvent être donnés. S'il vous plaît, de modifier la question et de fournir un ensemble (mais aussi petit que possible) la transformation qui peut être exécuté par tout le monde, de sorte que le problème peut être reproduit. Aussi, s'il vous plaît, fournir à l'exact résultat attendu et pourquoi le résultat que vous recevez est un problème.

OriginalL'auteur Moriarty | 2012-09-11