Навигация по отсортированным данным XML (XSLT) - PullRequest
0 голосов
/ 10 мая 2010

У меня есть файл XML с данными о компании для 30 компаний в 8 отраслях на странице портфолио. У пользователя есть возможность отсортировать эти данные по отраслям, и этот XML-файл будет постоянно добавляться.

Эта сортировка выполняется в моем XSL-файле с использованием <xsl:choose>. Пример:

<xsl:when test="(invest[@investid='con'])">
    <xsl:for-each select="$invest-port/portfolio/company[@industry='Communications']">
                 <xsl:sort select="name" />
                 <div class="invest-port-thumb">
                     <a>
                        <xsl:attribute name="href">
                         <xsl:value-of select="link" />
                        </xsl:attribute>
                        </a>
                    </div>
                </xsl:for-each>
</xsl:when>

При переходе на страницу отдельной компании в нижней части окна находятся кнопки «предыдущий» и «следующий». Моя проблема в том, что мне нужно, чтобы они динамически связывались с предыдущим и следующим <link> элементами из отсортированных данных XML.

Часть основного XML-файла:

<portfolio recact="1">

    <company industry="Industrial" status="Current" coid="1">
        <name>Horn Company</name>
        <hq>Owensboro, KY</hq>
        <link>horn.xml</link>
    </company>

    <company industry="Consumer" status="Current" coid="1">
        <name>Mike Waters Co</name>
        <hq>Orlando, FL</hq>
        <link>waters.xml</link>
    </company>

</portfolio>

Возможно ли это? Или есть более простой способ сделать это? (например, поместите каждую компанию в разделенные по отрасли XML-файлы вместо одного)

Любое понимание будет с благодарностью!

1 Ответ

0 голосов
/ 10 мая 2010

используйте preceding-sibling и following-sibling

EDIT

 <xsl:variable name="sorted">
      <xsl:for-each select="$invest-port/portfolio/company[@industry='Communications']">
           <xsl:sort select="name"/>
           <xsl:copy-of select="."/>
      </xsl:for-each>
 </xsl:variable>

и после вы можете сделать

<xsl:for-each select="$sorted/*">
    <xsl:apply-templates />
</xsl:for-each>

Так что вы можете использовать предшествующий брат и следующий брат

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