Получение атрибутов родительского узла в XSL - PullRequest
16 голосов
/ 28 февраля 2012

В моем 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.

Ответы [ 2 ]

37 голосов
/ 28 февраля 2012

Для перемещения вверх по дереву вы используете «..» на уровень, т.е. в этом случае, вероятно,

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

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

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

См. http://www.stackoverflow.com/questions/3672992 для дальнейших примеров

11 голосов
/ 28 февраля 2012

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

ancestor::c[1]/@something

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

...