Можно сохранить всю/Root/A структуру в переменной и сослаться на ту переменную вместо того, чтобы создать новую переменную для каждого атрибута и подэлемента, к которому необходимо получить доступ.
<xsl:for-each select="/Root/A/">
<xsl:variable name="ROOT_A" select="."/>
<xsl:for-each select="/Root/B/">
<!-- Variable is accessed like this: $ROOT_A/@someAttribute
Just like a normal XML node -->
</xsl:for-each>
</xsl:for-each>
Welbog ответил на это хорошо - но только отметить, что Вы, кажется, делаете cartesion (перекрестное) соединение - который является намеренным? При попытке сделать регулярное соединение (с предикатом и т.д.), то Вы хотите, хотят изучить <xsl:key/>
- т.е. объявить ключ:
<xsl:key name="BIndex" match="/Root/B" use="SomeChildNode"/>
затем используют в Вашем предикате:
<xsl:for-each select="/Root/A/">
<xsl:variable name="ROOT_A" select="."/>
<xsl:for-each select="key('BIndex', LocalNode)">
<!-- -->
</xsl:for-each>
</xsl:for-each>
Это должно быть эквивалентно (но намного быстрее, чем) предикат:
<xsl:for-each select="/Root/B[SomeChildNode = current()/LocalNode]">
, Если Вы группировка данные, затем посмотрите Muenchian, группирующийся