XSLT и Xpath Issue - PullRequest
       1

XSLT и Xpath Issue

0 голосов
/ 04 ноября 2011

XML:

    <root>
<events>
    <event id="e1" v_id="v1">
        <elements></elements>
    </event>
    <event id="e1" v_id="v2">
        <elements></elements>
    </event>
    <event id="e1" v_id="v2">
        <elements></elements>
    </event>
</events>

<venues>
    <venue venue_id="v1">
        <venue_name></venue_name>
        <elements></elements>
    </venue>
    <venue venue_id="v2">
        <venue_name></venue_name>
        <elements></elements>
    </venue>
</root>

XSLT:

<xsl:template match="/">
        <xsl:apply-templates select="/root/events/event"/>
    </xsl:template>
    <xsl:template match="event">
        <xsl:value-of select="/root/venues/venue[@venue_id = /root/events/event/@v_id]/venue_name"/>
        <xsl:text>This is where I would like to put the venue name as a link to that venue</xsl:text>
    </xsl:template>

, поэтому, если v_id = v2 и venue_id = v2, я хочу отобразить значение venue_name из места с id =v2

Спасибо

1 Ответ

0 голосов
/ 05 ноября 2011

Это как раз та проблема, с которой ключи имеют дело.

В корне таблицы стилей добавьте

<xsl:key name="venue" match="venue" use="@venue_id" />

Это фактически объявляет ассоциативный массив всех venue элементов, проиндексированных по их атрибуту venue_id.При этом вы можете получить элемент venue с любым заданным атрибутом venue_id, используя функцию key.Я полагаю, что вы можете достичь того, что вам нужно, заменив строку <xsl:text> следующим:

<xsl:value-of select="key('venue', @v_id)/venue_name" />

По сути, это ищет нужный элемент venue и получает в нем дочерний элемент venue_name.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...