Получение родительских атрибутов node в XSL

В моем XML я имею следующее:

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

Теперь в XSL внутри цикла я могу сделать следующее:

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

Но как я могу получить атрибут в c?

Я пробовал сделать следующее

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

Как и попытка родителя, и ничего, похоже, не работает. Можете ли вы получить такие родительские узлы?

Кроме того, я не могу просто сделать:

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

Так как может быть кратно c.

Ответ 1

Чтобы перемещаться по дереву, вы используете ".." на уровне, то есть в этом случае, вероятно,

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

Вы также можете выбрать предка node по имени (приблизительно)

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

Подробнее см. http://www.stackoverflow.com/questions/3672992

Ответ 2

Использование

ancestor::c[1]/@something

Это выбирает атрибут с именем something первого (от текущего предка node вверх) с именем c.