XSLT: использование другого способа обработки в рамках текущего способа обработки.

Ниже я пытаюсь сопоставить определенные узлы.

<xsl:template match="nodes">    
    <element>
        <xsl:apply-templates select="nodes" mode="different" />
    </element>
</xsl:template>

Теперь есть несколько способов обработки одних и тех же узлов. Я хочу использовать этот другой способ обработки внутри текущего способа обработки. Вот почему я выполняю apply-templates для того же выбора, что и nodes, однако теперь mode отличается.

Вот как может выглядеть другой режим:

    <xsl:template match="nodes" mode="different">
<!-- another way of processing these nodes -->
</xsl:template>

Теперь это не работает. Обрабатывается только первый тип обработки и вызов apply-templates просто не применяется.

Чтобы быть немного более конкретным:

<xsl:template match="Foundation.Core.Association.connection">
    <xsl:for-each select="Foundation.Core.AssociationEnd">
        <someElement>
                <xsl:apply-templates select="Foundation.Core.Association.connection" mode="different" />
        </someElement>      
    </xsl:for-each>
</xsl:template>

Как видите, я выбираю Foundation.Core.Association.connection. Конечно, это неправильно, но как мне обратиться к этому элементу, учитывая текущий элемент и позицию? Учитывая его комментарий Дерека, это должно сработать.

Что я делаю неправильно, как я могу получить то, что хочу, используя XSLT? Каким еще может быть подход к решению этой проблемы?

Спасибо.


person Kris Van den Bergh    schedule 03.05.2010    source источник
comment
как выглядит ваш xml?   -  person derek    schedule 03.05.2010
comment
ввод xml очень сложен. Я использую для каждого в пределах для каждого, и мне нужно использовать атрибуты из первого для каждого во втором для каждого..   -  person Kris Van den Bergh    schedule 03.05.2010


Ответы (2)


<xsl:template match="Foundation.Core.Association.connection">

    <xsl:for-each select="Foundation.Core.AssociationEnd">

        <someElement> 
                <xsl:apply-templates

select="Foundation.Core.Association.connection" mode="other" />

Как видите, я выбираю Foundation.Core.Association.connection. Конечно, это неправильно, но как мне обратиться к этому элементу, учитывая текущий элемент и позицию?

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

<xsl:apply-templates select=".." mode="different" />

Элемент, который вы хотите обработать по-другому, является родителем текущего узла.

Конечно, скорее всего, эта запутанная обработка вообще не нужна, что было бы подтверждено, если бы вы могли показать больше XML-документа и сформулировать проблему более лаконично.

person Dimitre Novatchev    schedule 03.05.2010

если «узлы» относятся к одному и тому же точному набору узлов в содержащем совпадении, попробуйте:

<xsl:template match="nodes">    
    <element>
        <xsl:apply-templates select="." mode="different" />
    </element>
</xsl:template>
person derek    schedule 03.05.2010