Как я получаю доступ к элементам от внешнего цикла из вложенных циклов?

20
задан Mathias Müller 31 March 2014 в 12:43
поделиться

2 ответа

Можно сохранить всю/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>
26
ответ дан 30 November 2019 в 00:19
поделиться

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, группирующийся

8
ответ дан 30 November 2019 в 00:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: