<xsl:param name="currentPage"/>
<xsl:variable name="siteRoot" select="$currentPage/ancestor-or-self::*/nodeC" />
. . .
<xsl:for-each select="$siteRoot/ancestor-or-self::*/nodeA/nodeB">
Вы должны прочитать что-нибудь в XPAth и узнать значение различных осей .
На самом деле вам нужен код, противоположный этому :
<xsl:param name="currentPage"/>
<xsl:variable name="siteRoot" select="$currentPage/descendant-or-self::nodeC[1]" />
. . .
<xsl:for-each select="$siteRoot/nodeA/nodeB">
Или лучше как одно выражение XPath :
$currentPage/*/nodeC[1]/nodeA/nodeB
Примечание : по возможности избегайте использования осей XPath descendant::
или descendant-or-self::
или псевдооператора //
- они приводят к значительной неэффективности (медленное выполнение) и //
имеет аномальное и нелогичное поведение при использовании вместе с оператором []
.