как агрегировать значения в XSLT? - PullRequest
0 голосов
/ 06 марта 2020

вот мое xml:

<countries>
   <country>
      <name> .....</name>
      <capital>....</capital>
      <continent>....</continent>
   </country>
   .
   .
   .(a lot of countries)..
<countries>

, и я создал таблицу html с 2 столбцами (используя xslt), представляющими название и столицу для каждой страны. но теперь я хочу создать таблицу для каждого континента, и каждая таблица содержит список всех стран, принадлежащих этому континенту, и я не знаю, как поступить! Спасибо за вашу помощь! вот быстрый просмотр моего XSLT:

<table border="3" width="100%" align="center">
<tr>
    <th>Name</th>
    <th>Capital</th>
</tr>

<xsl:for-each select="countries/country">
<tr>
<td >
    <xsl:value-of select="name"/>
</td>
<td>
<xsl:value-of select="capital"/>
</td>
</tr>
    </xsl:for-each>

1 Ответ

0 голосов
/ 06 марта 2020

Попробуйте это XSLT 1.0

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output indent="yes"/>

    <xsl:key name="Continent" match="country" use="continent"/>

    <xsl:template match="countries">
        <countries>
            <xsl:for-each
                select="//country[generate-id(.) = generate-id(key('Continent', continent)[1])]">
                <continent><xsl:value-of select="continent"/></continent>
                <table border="3" width="100%" align="center">
                    <tr>
                        <th>Name</th>
                        <th>Capital</th>
                    </tr>

                    <xsl:for-each select="key('Continent', continent)">
                        <tr>
                            <td >
                                <xsl:value-of select="name"/>
                            </td>
                            <td>
                                <xsl:value-of select="capital"/>
                            </td>
                        </tr>
                    </xsl:for-each>

                </table>
            </xsl:for-each>
            </countries>
    </xsl:template>
</xsl:stylesheet>

XSLT 1.0 См. Преобразование в https://xsltfiddle.liberty-development.net/naZXVEE

XSLT 2.0 См. Преобразование в https://xsltfiddle.liberty-development.net/naZXVEE/1

...