web-dev-qa-db-fra.com

Obtention des attributs du nœud parent dans XSL

Dans mon XML, j'ai les éléments suivants:

<a>
  <b>
    <c something="false">
      <d>
        <e>
          <f>someResult</f>
        </e>
      </d>
    </c>
  </b>
</a>

Maintenant, dans le XSL dans une boucle, je peux faire ce qui suit:

<xsl:value-of select="f"></xsl:value-of>

Mais comment puis-je obtenir l'attribut en c?

J'ai essayé de faire ce qui suit

<xsl:value-of select="////@something"></xsl:value-of>

En plus d'essayer un parent et rien ne semble fonctionner. Pouvez-vous obtenir des nœuds parents comme celui-ci?

De plus, je ne peux pas simplement faire:

<xsl:value-of select="/a/b/c/@something"></xsl:value-of>

Comme il peut y avoir plusieurs de c.

19
ingh.am

Pour monter dans l'arborescence, vous utilisez ".." par niveau, c'est-à-dire dans ce cas probablement

select="../../../@something"

Vous pouvez également sélectionner un nœud ancêtre par son nom (environ)

select="ancestor::c[1]/@something"  

Voir http://www.stackoverflow.com/questions/3672992 pour d'autres exemples

37
kaj

tiliser:

ancestor::c[1]/@something

Cela sélectionne l'attribut nommé something du premier ancêtre (à partir du nœud actuel) nommé c.

11
Dimitre Novatchev