Получение родительских атрибутов 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
.